2016-12-28 2 views
0

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

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

EDIT: Моя ошибка, я понял, что Float неизменен, так что это нормальное поведение. Таким образом, мой вопрос будет, есть ли способ заполнить FloatBuffer изменчивыми флеш-оболочками, чтобы я мог легко изменить свой контент FloatBuffer по ссылке? Или есть ли более приятная альтернатива FloatBuffer для передачи данных OpenGL?

ответ

0

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

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

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

floatBuffer.position(position); 
    floatBuffer.put(data, startIndex, count); 
    floatBuffer.position(0); 
+0

Это не то, что я хочу сделать. Я хочу поставить значение один раз и изменить значение, которое я установил извне, и изменить значение в FloatBuffer. Но я думаю, что это невозможно с FloatBuffers, поскольку они только сохраняют значения «float», и вы не можете сделать это с помощью примитивных типов, поэтому я не могу изменить их значение по ссылке – user2591935

+0

FloatBuffers выделяют в родную память, где opengls нуждается в ее данные сохранены. Выделенная память сохраняется как массив, поэтому она является ссылкой. Если вы хотите, чтобы java-объект имел доступ к непосредственно встроенной памяти, я не думаю, что это возможно. – satm12