c++ - glsl 中的显式或隐式 vec4

标签 c++ opengl glsl opengl-3

我发现了一些有趣的东西,我想了解它。

使用GLSL #version 330

gl_Position 的类型是 vec4

这些行编译得很好:

gl_Position = vec4(0, 0, 0, 0);
gl_Position = vec4(vec3(0, 0, 0), 0);
gl_Position = vec4(vec2(0, 0), vec2(0, 0));
...

不知何故:

gl_Position = (vec2(0, 0), vec2(0, 0));

加注:

error C1035: assignment of incompatible types

编译器能够解析 (vec2(0, 0), vec2(0, 0)) 而不会引发语法错误。我想知道这个语句是什么意思,我相信它是正确的并且与 vec4 有不同的类型。

问题(vec2(0, 0), vec2(0, 0))GLSL中是什么意思?

编辑:

编译:

 float x = (0.0, 1.0, 1.0, 2.0, 3.0, 5.0, 8.0);

语法错误:

 float x = 0.0, 1.0, 1.0, 2.0, 3.0, 5.0, 8.0;

最佳答案

您使用 comma operator ,创建一个 vec2,然后创建另一个 vec2,最后一个 vec2 是表达式的结果。

关于c++ - glsl 中的显式或隐式 vec4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38789052/

相关文章:

c++ - 无法在 Linux Mint 上找到软件包 GLFW

c++ - GLM 角度轴错误?

opengl - GLSL 曲面分割控制着色器索引 gl_TessLevelOuter 与 gl_InvocationID

c++ - 三元运算符可以抛出异常吗?

c++ - 我的自动指针即使在所有权转移后也能正常工作

c++ - 为什么boost::locale::date_time中的std::bad_cast异常适用于全局而不是本地对象?

macos - Qt 和 OpenGL OS X : GLSL shader version only 120 on Mountain Lion

c++ - 解析 C/C++ 源代码 : How are token boundaries/interactions specified in lex/yacc?

c++ - 将投影转换为正交光线转换

opengl - 全屏纹理采样的最佳方法