我正在创建一些类来与 OpenGL 交互。其中之一是
GLSLShader
。我想在构造函数中 glCreateShader
并在名为 glCompileShader
的单独函数中调用 compile
。所以我想知道,如果我多次调用glCompileShader
,会导致内存泄漏或任何负面影响吗?
在着色器对象上调用
glCompileShader
将根据该着色器中当前的字符串执行编译,在功能上替换着色器的有用内容。如果您编译着色器,请不要更改字符串,然后再次编译它,不会发生任何有意义的应该。
但是,大多数程序不会这样做,因此就实际的 OpenGL 实现而言,这是很少经过测试的代码。所以这可能不仅仅是一个空操作。它可以重新运行着色器编译而不是什么都不做。如果实现中存在错误,它甚至可能泄漏内存。
一般来说,这种情况永远不应该出现。编译着色器的唯一原因是您是否设置了着色器的字符串。也就是说,操作顺序是always“设置字符串,编译”,按该顺序。如果你不做前者,就没有理由做后者。
所以不要让人们这样做。您的
compile
函数应该给出要作为参数进行编译的字符串。