我目前正在搜索基于OpenGL程序无效的错误。但是,如果不知道问题的来源,很难找到问题的根源。
当我创建程序时,它是有效的。此外,我不会使用glDeleteProgram()
。
为了确定我的程序是否有效,我使用glIsProgram()
。
答案 0 :(得分:2)
glGenTextures (...)
为纹理对象保留并返回一个或多个 名称 ,但这些名称在绑定到类似{{{}之前不会成为实际纹理1}}。换句话说,名称是保留的,但它们引用的内容尚未实例化/初始化。
glBindTexture (GL_TEXUTRE_2D, ...)
实际返回的是您传递的名称是否是创建对象的名称。因此,如果您从未绑定对象,则永远不会创建它,此函数将返回glIs* (...)
。
GL_FALSE
是OpenGL用于绑定GLSL程序对象的函数。即使GLSL程序和着色器对象与所有其他类型的OpenGL对象的工作方式不同,glUseProgram (...)
很可能会返回glIsProgram (...)
直到你在其上至少调用一次GL_TRUE
之后的某个时间。
顺便说一下,为了验证程序,我建议您改用glUseProgram (...)
。
glValidateProgram (...)
:glValidateProgram
如果此后GLint valid = GL_FALSE;
glValidateProgram (program);
glGetProgramiv (program, GL_VALIDATE_STATUS, &valid);
为valid
,则您的计划有效(例如已成功关联)。