【问题标题】:Modifying pixel RGBA values of texture using glTexSubImage2D does not update the texture使用 glTexSubImage2D 修改纹理的像素 RGBA 值不会更新纹理
【发布时间】:2018-09-05 06:05:39
【问题描述】:

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

我尝试了以下方法:

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

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

【问题讨论】:

    标签: java opengl lwjgl


    【解决方案1】:

    您必须创建一个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或@987654330 @:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多