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

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

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

我尝试了以下方法:

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

其中 xy 是修改像素的坐标,data 是红、绿、蓝和 alpha 的 int 数组。但是我不确定,如果我使用了正确的参数,因为当我使用它时纹理没有改变。我想创建一个函数,使用 glTexSubImage2D.

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

您必须创建一个 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已经是一个direct buffer,但它是一个IntBuffer,那么glTexSubImage2D的第8个参数,它指定了单一颜色通道的数据类型,有成为 GL_UNSIGNED_INTGL_INT:

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