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

Modifying pixel RGBA values of texture using glTexSubImage2D does not update the texture

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

我尝试了以下操作:

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

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

将指定坐标中纹理的像素颜色更改为指定颜色。


您必须创建一个直接缓冲区,才能通过glTexSubImage2D

提交数据

我建议创建一个ByteBuffer,如下所示:

1
2
3
4
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

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