使用glTexSubImage2D修改纹理的像素RGBA值不会更新纹理

时间:2018-09-05 06:05:39

标签: java opengl lwjgl

我有一个OpenGL纹理,并且我想在运行中更改纹理中像素的RGBA值。我想在CPU端进行修改。我想创建一个函数,以将选定坐标中纹理的像素更改为选定RGBA值。

我尝试了以下方法:

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

其中xy是修改后的像素的坐标,而data是红色,绿色,蓝色和alpha的整数数组。但是我不确定是否使用了正确的参数,因为当我使用此参数时纹理不会改变。我想创建一个函数,该函数使用glTexSubImage2D将指定坐标中纹理的像素颜色更改为指定颜色。

1 个答案:

答案 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_INTGL_INT

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