OpenGL - 在更新纹理之前是否需要取消绑定纹理?

时间:2014-05-21 17:26:58

标签: opengl textures rendering shader

我使用简单的1D纹理将动态数组值传递给我的像素着色器。我希望能够不时更新这些数组值(以及数组的大小)。目前,我正在使用序列

glBindTexture(GL_TEXTURE_1D, myTexture);
glTexImage1D(GL_TEXTURE_1D, 0, GL_R32F, arraySize, 0, GL_RED, GL_FLOAT, array);

为此。虽然这在初始化时工作正常,但在渲染期间(在键盘输入上)执行这些行会在GL_INVALID_OPERATION之后产生glTexImage1D

那么,在更新之前是否需要停用或取消绑定纹理?

2 个答案:

答案 0 :(得分:4)

实际上纹理必须绑定才能更新它,否则OpenGL如何知道要更新的纹理(注意纹理ID没有在glTexImage *函数的任何地方使用)? / p>

如果你在调用该函数后的某个时刻得到了GL_INVALID_OPERATION,那么它可能是触发错误的其他东西。我会开始在代码中添加glGetError()方法,直到找到导致错误的确切函数。

答案 1 :(得分:0)

我终于找到了错误原因。由于我已经更新了键盘输入上的纹理数据,因此相应的代码是从另一个线程执行的(与主渲染线程不同)。

解决方案是将此操作存储在队列中,该队列可由主渲染线程访问和执行。