Opengl 是否将流提示传递到现有纹理?

Opengl 是否将流提示传递到现有纹理?,opengl,textures,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); 没有机制指示纹理将被重复更新;仅通过usage参数与缓冲区(例如VBO等)相关。但是,有

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

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

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

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

  • 将纹理附加为帧缓冲区对象,并以这种方式进行更新。这可能是实现你要求的最有效的方法。与纹理关联的内存仍驻留在GPU上,您可以以渲染速度更新它
  • 尝试使用像素缓冲区对象(通常称为PBO,OpenGL缓冲区类型为
    GL\u pixel\u UNPACK\u buffer
    )作为Qt将生成的纹理写入的缓冲区,并将该缓冲区标记为
    GL\u DYNAMIC\u DRAW
    。对于每次更新,您仍然需要使用PBO的缓冲区偏移量(即,可能为零)调用
    glTexImage*D()
    ,但这种方法可能比直接通过
    glTexImage*D()
    将texel爆破到管道中更有效

  • 没有这样的暗示。OpenGL定义的是功能,而不是性能。只要在需要的时候上传就可以了