[英]OpenGLES 3.0: “Only consts can be used in a global initializer ”
我是本書 <OpenGL ES 3.0 cookbook> 第 2 章的新手,但在安裝演示 APP 時遇到此錯誤:
2020-12-06 16:16:10.888 7549-7578/com.demo.hellosquare E/glOpenGLES3Native: Could not compile shader 35633:
ERROR: 0:6: 'RadianAngle' : Only consts can be used in a global initializer
ERROR: 0:6: 'RadianAngle' : Only consts can be used in a global initializer
ERROR: 0:6: 'RadianAngle' : Only consts can be used in a global initializer
ERROR: 0:6: 'RadianAngle' : Only consts can be used in a global initializer
ERROR: 4 compilation errors. No code generated.
問題是,我不明白該消息試圖告訴我什么(谷歌沒有相關結果)。
代碼中涉及“RadianAngle”的地方如下:
在我的單個 CPP 文件的頂部,我聲明:
GLuint radianAngle;
然后我的着色器也在同一個文件的頂部:
static const char vertexShader[] =
"#version 300 es \n"
"in vec4 VertexPosition; \n"
"in vec4 VertexColor; \n"
"uniform float RadianAngle; \n"
"out vec4 TriangleColor; \n"
"mat2 rotation = mat2(cos(RadianAngle),sin(RadianAngle), \
-sin(RadianAngle),cos(RadianAngle)); \n"
"void main() { \n"
" gl_Position = mat4(rotation)*VertexPosition; \n"
" TriangleColor = VertexColor; \n"
"}\n";
最后在我的渲染函數中(將通過 JNI 調用)在同一個文件中:
radianAngle = glGetUniformLocation(programID, "RadianAngle");
glUniform1f(radianAngle, radian);
奇怪的是,我完全從書中復制,嘆息..
該問題與該行有關:
mat2 rotation = mat2(cos(RadianAngle),sin(RadianAngle),
-sin(RadianAngle),cos(RadianAngle));
rotation
是全局 scope 中的一個變量。 全局變量只能用常量表達式初始化。 RadianAngle
不是常數,因為它是一個統一變量。 這會導致錯誤:
錯誤:0:6:“RadianAngle”:全局初始化程序中只能使用常量
錯誤發生 4 次,因為RadianAngle
在rotation
的初始化程序中使用了 4 次。
您必須在main
中設置rotation
值:
mat2 rotation;
void main()
{
rotation = mat2(cos(RadianAngle),sin(RadianAngle),
-sin(RadianAngle),cos(RadianAngle));
// [...]
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.