0

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

如何设置 OpenGL 提示该纹理将经常更新?

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

2 回答 2

0

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

  1. 将您的纹理附加为帧缓冲区对象并以这种方式更新它。这可能是完成您所要求的最有效的方法。与纹理关联的内存仍然驻留在 GPU 上,您可以以渲染速度对其进行更新。
  2. 尝试使用像素缓冲区对象(通常称为 PBO,并且具有 OpenGL 缓冲区类型GL_PIXEL_UNPACK_BUFFER)作为 Qt 将其生成的纹理写入的缓冲区,并将该缓冲区标记为GL_DYNAMIC_DRAW. 对于每次更新,您仍然需要glTexImage*D()使用 PBO 的缓冲区偏移量(即可能为零)进行调用,但这种方法可能比直接通过glTexImage*D().
于 2013-02-18T23:39:10.890 回答
0

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

于 2013-02-18T23:39:12.583 回答