我目前正在为我正在开发的一个项目创建纹理类,我试图从一开始就做好一切以防止未来的麻烦。
目前,我将纹理信息加载到GPU的方式如下:
我希望能够动态确定纹理单元。
例如,不是硬编码统一名称“text”,而是将字符串作为参数传递,并执行类似于
换句话说,我想要动态选择要绑定纹理的纹理单元,而不是硬编码它。
为此,我需要找到一个当前未使用的纹理单元,最好从最小的纹理单元到最大的纹理单元。
哪些OpenGL函数可以实现这种行为?
编辑:
我需要实现所需行为的重要工具是:
一旦将纹理单元绑定到采样器统一变量,我希望能够获取绑定到该统一变量的纹理单元。
因此,如果将纹理单元5绑定到统一变量“sampler2d texture_5”中,
我希望有一个函数,它接受统一标签并返回绑定到该标签的纹理单元。
目前,我将纹理信息加载到GPU的方式如下:
void Texture::load_to_GPU(GLuint program)
{
if(program == Rendering_Handler->shading_programs[1].programID)
exit(EXIT_FAILURE);
glUseProgram(program);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, textureID);
GLint loc = glGetUniformLocation(program, "text");
if(loc == GL_INVALID_VALUE || loc==GL_INVALID_OPERATION)
{
cerr << "Error returned when trying to find texture uniform."
<< "\nuniform: text"
<< "Error num: " << loc
<< endl;
return;
}
glUniform1i(loc,0);
}
我希望能够动态确定纹理单元。
例如,不是硬编码统一名称“text”,而是将字符串作为参数传递,并执行类似于
glGetUniformLocation()
的操作,但用于纹理单元。换句话说,我想要动态选择要绑定纹理的纹理单元,而不是硬编码它。
为此,我需要找到一个当前未使用的纹理单元,最好从最小的纹理单元到最大的纹理单元。
哪些OpenGL函数可以实现这种行为?
编辑:
我需要实现所需行为的重要工具是:
一旦将纹理单元绑定到采样器统一变量,我希望能够获取绑定到该统一变量的纹理单元。
因此,如果将纹理单元5绑定到统一变量“sampler2d texture_5”中,
我希望有一个函数,它接受统一标签并返回绑定到该标签的纹理单元。
glGet(GL_TEXTURE_BINDING_2D)
来检查一个单元是否空闲。 - HolyBlackCatglGetUniformLocation
在出现错误时返回-1
而不是错误代码。这些代码将由glGetError()
返回。 - HolyBlackCat