2016-08-05 9 views
1

私は何か興味深いものを見つけました。私はそれを理解したいと思います。明示的または暗黙的vec4 in glsl

使用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に何を意味するのでしょうか?

EDIT:

コンパイル:

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

構文エラー:作成あなたがcomma operator使用

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

答えて

3

、1 vec2し、別vec2であり、式の結果であるのは最後のvec2です。

+0

どうしてですか?この標準ですか?これが許される理由は何ですか? –

+1

@DombiSzabolcs [コンマ演算子](https://en.wikipedia.org/wiki/Comma_o​​perator)は、GLSLを含むすべてのCベース言語の標準演算子です。これは、式の順序付けに使用されます。 –

+2

お楽しみくださいhttps://www.opengl.org/registry/doc/GLSLangSpec.4.50.pdf :) – Mars

関連する問題