是否可以只上传在 OpenGL ES 2.0 中发生变化的部分纹理?
Is it possible to upload only parts of texture that has changed in OpenGL ES 2.0?
我使用 Qt 在 OpenGL 中显示 2D 纹理。大多数纹理在帧与帧之间都是相同的,但一些水平线可能已经改变。
我的第一个实现使用每帧上传整个纹理
glTexImage2D
.
在我当前的实现中,我在 initializeGL()
方法中调用了 glTexStorage2D
。
接下来,我仅上传使用 glTexSubImage2D
更改的水平线。我发现这要快得多。
不幸的是,我发现我需要通过远程桌面支持 运行 我的应用程序到 Windows 7 PC。在这种情况下,我需要使用 OpenGL ES 2.0 API (ANGLE).
是否可以只上传在OpenGL ES 2.0中发生变化的水平线?
glTexSubImage2D
存在于 OpenGL ES 2.0 中,但没有 glTexStorage2D
它似乎不起作用。
编辑:
Florian Winters 的回答很好:
我替换了
glTexStorage2D(GL_TEXTURE_2D, 1, GL_RGBA8, m_textureWidth, m_textureHeight);
和
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, m_textureWidth, m_textureHeight, 0,
GL_RGBA, GL_UNSIGNED_BYTE, nullptr);
在初始化中,initGL()
。
对于每一帧,paintGL()
,我必须添加:
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, /*GL_NEAREST*/GL_LINEAR);
glBindTexture(GL_TEXTURE_2D, m_texName);
之后才能正常工作。
您需要先初始化纹理,然后才能使用 glTexSubImage2D
更新部分纹理。这可以通过调用 glTexStorage2D
或 glTexImage2D
来完成。如果 glTexStorage2D
不可用,请使用 glTexImage2D
,因为它在 OpenGL 的早期版本中就可用。
正如 glTexSubImage2D
的 documentation 所说,
GL_INVALID_OPERATION is generated if the texture array has not been defined by a previous glTexImage2D operation.
我使用 Qt 在 OpenGL 中显示 2D 纹理。大多数纹理在帧与帧之间都是相同的,但一些水平线可能已经改变。
我的第一个实现使用每帧上传整个纹理
glTexImage2D
.
在我当前的实现中,我在 initializeGL()
方法中调用了 glTexStorage2D
。
接下来,我仅上传使用 glTexSubImage2D
更改的水平线。我发现这要快得多。
不幸的是,我发现我需要通过远程桌面支持 运行 我的应用程序到 Windows 7 PC。在这种情况下,我需要使用 OpenGL ES 2.0 API (ANGLE).
是否可以只上传在OpenGL ES 2.0中发生变化的水平线?
glTexSubImage2D
存在于 OpenGL ES 2.0 中,但没有 glTexStorage2D
它似乎不起作用。
编辑: Florian Winters 的回答很好: 我替换了
glTexStorage2D(GL_TEXTURE_2D, 1, GL_RGBA8, m_textureWidth, m_textureHeight);
和
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, m_textureWidth, m_textureHeight, 0,
GL_RGBA, GL_UNSIGNED_BYTE, nullptr);
在初始化中,initGL()
。
对于每一帧,paintGL()
,我必须添加:
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, /*GL_NEAREST*/GL_LINEAR);
glBindTexture(GL_TEXTURE_2D, m_texName);
之后才能正常工作。
您需要先初始化纹理,然后才能使用 glTexSubImage2D
更新部分纹理。这可以通过调用 glTexStorage2D
或 glTexImage2D
来完成。如果 glTexStorage2D
不可用,请使用 glTexImage2D
,因为它在 OpenGL 的早期版本中就可用。
正如 glTexSubImage2D
的 documentation 所说,
GL_INVALID_OPERATION is generated if the texture array has not been defined by a previous glTexImage2D operation.