使用相同的着色器ID多次调用glCompileShader是否有任何负面影响?

问题描述 投票:0回答:1

我正在创建一些类来与 OpenGL 交互。其中之一是

GLSLShader
。我想在构造函数中
glCreateShader
并在名为
glCompileShader
的单独函数中调用
compile
。所以我想知道,如果我多次调用
glCompileShader
,会导致内存泄漏或任何负面影响吗?

c++ opengl memory glsl shader
1个回答
0
投票

在着色器对象上调用

glCompileShader
将根据该着色器中当前的字符串执行编译,在功能上替换着色器的有用内容。如果您编译着色器,请不要更改字符串,然后再次编译它,不会发生任何有意义的应该

但是,大多数程序不会这样做,因此就实际的 OpenGL 实现而言,这是很少经过测试的代码。所以这可能不仅仅是一个空操作。它可以重新运行着色器编译而不是什么都不做。如果实现中存在错误,它甚至可能泄漏内存。

一般来说,这种情况永远不应该出现。编译着色器的唯一原因是您是否设置了着色器的字符串。也就是说,操作顺序是always“设置字符串,编译”,按该顺序。如果你不做前者,就没有理由做后者。

所以不要让人们这样做。您的

compile
函数应该给出要作为参数进行编译的字符串。

© www.soinside.com 2019 - 2024. All rights reserved.