Можно ли изменить по ссылке содержимое FloatBuffer?

Я инициализировал содержимое моего FloatBuffer массивом Float один раз. А затем измените Floats, который я вставил, я ожидаю, что он также изменит значения в FloatBuffer, но я получаю странный результат.

Я делаю неправильно? Возможно ли это сделать?

РЕДАКТИРОВАТЬ: Моя ошибка, я понял, что Float неизменяем, так что это нормальное поведение. Итак, мой вопрос: есть ли способ заполнить FloatBuffer изменяемыми оболочками float, чтобы я мог легко изменять содержимое FloatBuffer по ссылке? Или есть более приятная альтернатива FloatBuffer для передачи данных OpenGL?


person user2591935    schedule 28.12.2016    source источник


Ответы (1)


У FloatBuffer есть методы, которые делают то, что вы хотите, если я правильно вас понимаю.

С FloatBuffer вы можете установить его позицию, вызвав метод position (не забудьте вернуть его в 0, когда закончите, opengles требует его в 0, если я правильно помню). Затем вы можете читать или писать в эту позицию с помощью get и поместить методы.

Поэтому, если вам нужно обновить содержимое собственной памяти, вы можете сделать это из FloatBuffer, который выделил его следующим образом:

    floatBuffer.position(position);
    floatBuffer.put(data, startIndex, count);
    floatBuffer.position(0);
person satm12    schedule 28.12.2016
comment
Это не то, чем я хочу заниматься. Я хочу установить значение один раз и изменить значение, которое я установил извне, и изменить значение в FloatBuffer. Но я думаю, что это невозможно с FloatBuffers, поскольку они сохраняют только «плавающие» значения, и вы не можете сделать это с примитивными типами, поэтому я не могу изменить их значение по ссылке. - person user2591935; 28.12.2016
comment
FloatBuffers выделяются в собственную память, где opengl es нуждается в хранении своих данных. Выделенная память сохраняется в виде массива, поэтому она является ссылкой. Если вы хотите, чтобы java-объект напрямую обращался к собственной памяти, я не думаю, что это возможно. - person satm12; 28.12.2016