OpenGL程序失效的原因是什么?

时间:2014-06-10 21:58:06

标签: android opengl-es-2.0

我目前正在搜索基于OpenGL程序无效的错误。但是,如果不知道问题的来源,很难找到问题的根源。

当我创建程序时,它是有效的。此外,我不会使用glDeleteProgram()

为了确定我的程序是否有效,我使用glIsProgram()

1 个答案:

答案 0 :(得分:2)

通常在OpenGL中,在第一次绑定对象之前不会创建对象。

例如,

glGenTextures (...)为纹理对象保留并返回一个或多个 名称 ,但这些名称在绑定到类似{{{}之前不会成为实际纹理1}}。换句话说,名称是保留的,但它们引用的内容尚未实例化/初始化。

glBindTexture (GL_TEXUTRE_2D, ...)实际返回的是您传递的名称是否是创建对象的名称。因此,如果您从未绑定对象,则永远不会创建它,此函数将返回glIs* (...)

GL_FALSE是OpenGL用于绑定GLSL程序对象的函数。即使GLSL程序和着色器对象与所有其他类型的OpenGL对象的工作方式不同,glUseProgram (...) 很可能会返回glIsProgram (...)直到你在其上至少调用一次GL_TRUE之后的某个时间。


顺便说一下,为了验证程序,我建议您改用glUseProgram (...)

以下是一些C伪代码,演示了如何使用glValidateProgram (...)

glValidateProgram

如果此后GLint valid = GL_FALSE; glValidateProgram (program); glGetProgramiv (program, GL_VALIDATE_STATUS, &valid); valid,则您的计划有效(例如已成功关联)。