我有一个OpenGL纹理,并且我想在运行中更改纹理中像素的RGBA值。我想在CPU端进行修改。我想创建一个函数,以将选定坐标中纹理的像素更改为选定RGBA值。
我尝试了以下方法:
glTexSubImage2D(GL_TEXTURE_2D,0,x,y,1,1,GL_RGBA,GL_UNSIGNED_BYTE,data);
其中x
和y
是修改后的像素的坐标,而data
是红色,绿色,蓝色和alpha的整数数组。但是我不确定是否使用了正确的参数,因为当我使用此参数时纹理不会改变。我想创建一个函数,该函数使用glTexSubImage2D
将指定坐标中纹理的像素颜色更改为指定颜色。
答案 0 :(得分:0)
您必须创建一个Direct buffer,才能通过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
的第8个参数必须是单个彩色通道的数据类型, GL_UNSIGNED_INT
或GL_INT
:
glTexSubImage2D(GL_TEXTURE_2D,0,x,y,1,1,GL_RGBA,GL_UNSIGNED_INT,data);