我有一个可以成功渲染的程序对象。
但有时在我的应用程序运行时,当我修改并编译它的顶点&片段着色器源,再次通过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
答案 0 :(得分:2)
在OpenGL中做任何事情的一般规则,即使是ES版本,也是这样的:不要做任何事情,除非你知道它通常已经完成。你离开的路径越远,就越有可能遇到驾驶员的错误。
通常,程序的使用模式是链接它们,然后使用它们,然后在关闭应用程序时删除它们。你应该坚持下去。如果您需要新程序,请创建新程序。
无论如何,重新连接会破坏你所有的统一状态。因此,通过在旧程序中重新链接而不是创建新程序来保存某些东西并不像。的确,这样做更好;如果新链接失败,您仍然拥有旧程序。然而,如果您重新链接程序并且它失败,那么旧数据将被销毁。