Изменение пиксельных значений текстуры RGBA с помощью glTexSubImage2D не обновляет текстуру - PullRequest
0 голосов
/ 05 сентября 2018

У меня есть текстура OpenGL, и я хотел бы изменить значения RGBA пикселей в текстуре на ходу. Я хочу сделать модификацию на стороне процессора. Я хотел бы создать функцию для изменения пикселя в текстуре в выбранных координатах на выбранное значение RGBA.

Я пробовал следующее:

glTexSubImage2D(GL_TEXTURE_2D,0,x,y,1,1,GL_RGBA,GL_UNSIGNED_BYTE,data);

, где x и y - это координаты модифицированного пикселя, а data - это массив int красного, зеленого, синего и альфа. Однако я не уверен, что использовал правильные параметры, потому что текстура не меняется, когда я использую это. Я хочу создать функцию, которая изменяет цвет пикселей в текстуре в указанных координатах на указанный цвет, используя glTexSubImage2D.

1 Ответ

0 голосов
/ 05 сентября 2018

Вам необходимо создать Прямой буфер , чтобы зафиксировать данные с помощью glTexSubImage2D

Рекомендую создать ByteBuffer, как-то так:

ByteBuffer buffer = ByteBuffer.allocateDirect(data.length);
buffer.put(data);
buffer.flip();
glTexSubImage2D(GL_TEXTURE_2D,0,x,y,1,1,GL_RGBA,GL_UNSIGNED_BYTE,buffer);

Если data уже является прямым буфером, но это IntBuffer, то восьмой параметр glTexSubImage2D, который указывает тип данных для одного цветового канала, должен быть GL_UNSIGNED_INT или GL_INT:

glTexSubImage2D(GL_TEXTURE_2D,0,x,y,1,1,GL_RGBA,GL_UNSIGNED_INT,data);
...