0

我有一个可以成功渲染的程序对象。

但是有时在我的应用程序运行时,当我修改和编译它的顶点和片段着色器源时,再次重新链接它glLinkProgram(),我看到程序无法渲染。

请注意:着色器和程序已成功重新编译/重新链接。

我只是检查他们的状态

glGetShaderiv(fsId, GL_COMPILE_STATUS, &compileStatus); 
and glGetProgramiv(progId, GL_LINK_STATUS, &linkStatus); 
the result is compileStatus = linkStatus = 1

我想知道我们是否可以在 OpenGL ES 2.0 中重新链接程序对象?

我的 GPU 信息:

GL_RENDERER: PowerVR SGX 530
GL_VENDOR: Imagination Technologies
GL_VERSION: OpenGL ES 2.0
4

1 回答 1

2

你可以吗?根据 OpenGL ES 规范,是的。你应该吗?不。

在 OpenGL(甚至 ES 版本)中做任何事情时的一般规则是:除非您知道它通常会做,否则不要做任何事情。你走得越远,你就越有可能遇到驱动程序错误。

一般来说,程序的使用模式是链接它们,然后使用它们,然后在关闭应用程序时删除它们。你应该坚持这一点。如果你需要一个新程序,你就创建一个新程序

无论如何,重新链接都会破坏您所有的统一状态。因此,这并不是说您通过在旧程序中重新链接而不是创建新程序来保留某些内容。确实,这样更好;如果新链接失败,您仍然拥有旧程序。然而,如果您重新链接某个程序并且它失败了,那么旧数据就会被破坏

于 2013-03-22T10:53:39.127 回答