我的问题就像标题所说的那样.显然,第一个参数用于这个指针,有点像c ++.第二个怎么样?谢谢你
在我使用GLSL程序进行纹理处理时,只有一个纹理绑定到纹理单元0.如下所示:
.......................
glActiveTexture(GL_TEXTURE0);
GLuint tid;
glGenTextures(1, &tid);
glBindTexture(GL_TEXTURE_2D, tid);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, img.width, img.height, 0,
img.format, GL_UNSIGNED_BYTE, img.data);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
Run Code Online (Sandbox Code Playgroud)
然后通过统一变量通知frag着色器(如setUniform所做),这里的名称是"texture0",对应于我的frag着色器:
void CShader::setUniform( const char *name, int val )
{
int loc = getUniformLocation(name);
glAssert(); //note!,my own assertion wrapping around glGetError.
if( loc >= 0 )
{
glUniform1i(loc, val);
} else {
printf("Uniform: %s not found.\n",name);
}
glAssert(); //note!,my own assertion wrapping around glGetError.
}
Run Code Online (Sandbox Code Playgroud)
这超出了我的期望,它在最后glAssert()一行声称失败,并且给了我GL_INVALID_OPERATION.有什么不对,我的显卡不支持这个操作吗?,它不可能,我的OpenGL版本是3.x. 经过几个小时的挣扎,尝试评论了最后一次glAssert(),但另一个断言在我的gldrawelements电话中失败了.显然,我绝对认为gldrawelements …