将流提示传递给现有纹理?

时间:2013-02-18 23:29:33

标签: opengl textures

我有一个由我的代码的另一部分创建的纹理(使用QT5的bindTexture,但这不相关)。

如何设置一个OpenGL提示,这个纹理会经常更新?

    glBindTexture(GL_TEXTURE_2D, textures[0]);
    //Tell opengl that I plan on streaming this texture
    glBindTexture(GL_TEXTURE_2D, 0);

2 个答案:

答案 0 :(得分:0)

没有机制来指示纹理将被重复更新;这只通过 usage 参数与缓冲区(例如,VBO等)相关。但是,有两种可能性:

  1. 将纹理作为帧缓冲对象附加并以此方式更新。这可能是你提出要求的最有效方法。与纹理关联的内存仍然驻留在GPU上,您可以以渲染速度更新它。
  2. 尝试使用像素缓冲区对象(通常称为PBO,并且OpenGL缓冲区类型为GL_PIXEL_UNPACK_BUFFER)作为Qt将其生成的纹理写入的缓冲区,并标记该缓冲区为GL_DYNAMIC_DRAW。对于每次更新,您仍然需要使用PBO的缓冲区偏移量(即,可能为零)调用glTexImage*D(),但是这种方法可以提供一些效率,而不仅仅是直接通过glTexImage*D()将纹理像素喷射到管道。

答案 1 :(得分:0)

没有这样的提示。 OpenGL定义功能,而不是性能。只需在需要时上传即可。