Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 加载纹理时,本例中glTexSubImage1D()-GL_无效_值错误的原因是什么?_C++_Opengl - Fatal编程技术网

C++ 加载纹理时,本例中glTexSubImage1D()-GL_无效_值错误的原因是什么?

C++ 加载纹理时,本例中glTexSubImage1D()-GL_无效_值错误的原因是什么?,c++,opengl,C++,Opengl,我尝试加载传递函数作为1D纹理,如下所示: glBindTexture(GL_TEXTURE_1D, transfer); glTexStorage1D(GL_TEXTURE_1D, 1, GL_RGBA32F, 11); glTexSubImage1D(GL_TEXTURE_1D, 1, 0, 11, GL_RGBA, GL_FLOAT, props.transColors); 其中,props.transColors是一个浮点数组(可以在运行时从GUI更改这些值): 计划是使用glTexS

我尝试加载传递函数作为1D纹理,如下所示:

glBindTexture(GL_TEXTURE_1D, transfer);
glTexStorage1D(GL_TEXTURE_1D, 1, GL_RGBA32F, 11);
glTexSubImage1D(GL_TEXTURE_1D, 1, 0, 11, GL_RGBA, GL_FLOAT, props.transColors);
其中,
props.transColors
是一个浮点数组(可以在运行时从GUI更改这些值):

计划是使用
glTexSubImage1D()
将数组作为1D纹理每帧加载一次

函数
glTexSubImage1D()
将始终抛出GL\u无效值错误。从文档中可以看出,错误可能是由以下原因之一引起的:

如果级别小于0,则生成GL_无效_值

如果级别大于log2 max,则可能会生成GL_无效值, 其中max是GL_max_TEXTURE_SIZE的返回值

如果xoffset(w−b) ,其中w是GL_纹理_宽度,b是 正在修改的纹理图像的GL_纹理_边框的宽度。 请注意,w包括两倍的边框宽度

如果宽度小于0,则生成GL_无效_值

我认为上面列出的任何一点都不适用于我的情况。所以我想知道,是什么导致了这个问题?

第二个参数(在
GL\u TEXTURE\u 1D
之后)是mipmap级别。级别0是最大的mipmap级别。您的图像分配了一个级别(这是glTexStorage1D的第二个参数),但您正在尝试上载第二个级别(因为它们从0开始)。将0传递给
glTexSubImage1d
作为级别编号,而不是1


即使您的纹理有多个mipmap级别,您上载的数据对于第二个级别来说也太大。

谢谢,错误现在消失了。请允许我再问一个问题。我计划在渲染循环中调用
glTexSubImage1D()
,以更新纹理值(以及
glUniform1i(位置,0)
glActiveTexture(GL\u TEXTURE0)
,和
glBindTexture(GL\u texture\u 1D,transfer)
)。这是更新数据的正确方法吗?@RolandDeschain是的。必须设置为纹理采样器均匀的值是纹理单元的编号(0表示
GL\u TEXTURE0
,1表示
GL\u TEXTURE1
,…)。统一默认初始化为0,因此无需显式设置0。
float transColors[4 * 11] = 
{
    1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f,
    1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f,
    1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f,
    1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f
};