2012-01-09 9 views
7

私は本のLearning Modern 3D Graphics Programmingで3Dプログラミングについて学んでいますが、iOSのシェーダとGLES 2.0では不運です。私はxcode 4のopenglゲームテンプレートから作業していますが、本の最初の例を理解するために変更が加えられています。iOS上のシェーダの相違

本の最初のシェーダは、さまざまなエラーでコンパイルされません。最初の頂点シェーダ

#version 330 

layout(location = 0) in vec4 position; 
void main() 
{ 
    gl_Position = position; 
} 

バージョンステートメントについて不満を持ち、レイアウトを指定子として使用することを拒否します。私は最終的にこれを構築することができた。

attribute vec4 position; 
void main() 
{ 
    gl_Position = position; 
} 

は、再び第1フラグメントシェーダが原因バージョンに構築することを拒否し、私はエラーでグローバルセグメント

#version 330 
out vec4 outputColor; 
void main() 
{ 
    outputColor = vec4(1.0f, 1.0f, 1.0f, 1.0f); 
} 

ERROR: 0:10: Invalid qualifiers 'out' in global variable context 

オーケー出力を許可しません。以下のシェーダで動作する最初の例(単純な三角形)を得ることができました。

頂点シェーダ

#version 100 
void main() 
{ 
    gl_FragColor = vec4(1.0,1.0,1.0,1.0); 
} 

フラグメントシェーダ

attribute vec4 position; 
void main() 
{ 
    gl_Position = position; 
} 

ので、それらが働いて、私は次の章で第1着色例を試みました。

#version 330 
out vec4 outputColor; 
void main() { 
    float lerpValue = gl_FragCoord.y/500.0f; 
    outputColor = mix(vec4(1.0f, 1.0f, 1.0f, 1.0f), 
     vec4(0.2f, 0.2f, 0.2f, 1.0f), lerpValue); 
} 

がさえeariler、バージョンから修正された問題を回避作業、Fの中には許可されていない浮かぶ、シェーダはまだ効果的にそれがフロート文句を言っているこのエラー

ERROR: 0:13: 'float' : declaration must include a precision qualifier for type 

でビルドすることを拒否します。

私は、違いの説明を見つけるためにグーグルで試してみましたが、これらのどれも上がっていません。私はまた、リンゴのドキュメントを読んでアドバイスを探していて、助けが見つかりませんでした。私はどこを見るべきか、あるいは私が本当に間違っていることは分かりません。

答えて

13

は、シェーダの先頭にこれを追加します。precision mediump float;

またはprecision highp float;

は、あなたのニーズによって異なります。