2012-02-23 6 views
4

OpenGL ES 2.0.0とGLSL ES 1.0.0を使用して開発しています。GLSL 1.0.0 - 頂点シェーダとフラグメントシェーダで "Varying"を使用するときの問題

現在、スクリーンに画面を表示していて、テクスチャを適用するために を試しています。私は、ドキュメントを読んでいると私は「何を把握することはできません

- Failed to compile vertex shader - 
0(3) : error C5060: out can't be used with non-varying tex_varying 

in vec4 texture_coord ; 
in vec4 position ; 
out vec2 tex_varying ; 
uniform mat4 translate ; 
void main () 
{ 
    gl_Position = translate * position ; 
    tex_varying = texture_coord . xy ; 
} 

:私は、トラブルのエラーメッセージを受信し、頂点およびフラグメントシェーダで「を変える」 を使用してのことだ

私は間違っている。

ここにコードがあります。

頂点:

attribute vec4 position; 
attribute vec4 texture_coord; 
varying vec2 tex_varying; 
uniform mat4 translate; 

void main() 
{ 
    gl_Position = translate * position; 
    tex_varying = texture_coord.xy; 
} 

フラグメント:RESOLVED

varying vec2 tex_varying; 
uniform sampler2D texture; 

void main() 
{ 
    gl_FragColor = texture2D(texture, tex_varying); 
} 

これは返事が遅れているが、私は長い時間前にこの問題を解決することになった - 誰つまずく場合問題を横断してそれは "tex_varying"がNvidiaによって予約されていることが判明しました!単にtex_varyingの名前を変更するだけで問題は解決しました。

乾杯。

+3

で動作するはずのように見えてきたようなので、あなたの第二/第三のシェーダが見えます。 "tex_varying = texture_coord.xy;" – djmj

+0

申し訳ありませんが、コードのように、私はちょうどここで間違ってそれをコピーしました。 – Ben

+3

"にエラーメッセージ"どのシェーダがありますか?それは何の行ですか?エラーメッセージ全体を投稿できますか? –

答えて

4

inoutのキーワードは、GLSL v3以降のものです。 v1の場合は、inattributeに、outvaryingに置き換えて頂点シェーダーに配置する必要があります。フラグメントシェーダーでinvaryingに置き換えて、outを使用することはできません。あなたが行っているようにgl_FragColorに出力する必要があります。

あなたは正しくGLSL V1に最初のシェーダでGLSL v3のコードを翻訳して、彼らはあなたがVEC2にvec4を割り当てるES2/GLSL v1の

+0

最初の投稿は受信したエラーメッセージです。私が使用しているシェーダ。 2番目と3番目のシェーダは、私が使用しているシェーダで、 "変化する"ものです。 これは私が使用しているバージョンです。 OpenGL ES 2.0.0 OpenGL ES GLSL ES 1.0.0デスクトップ。シェーディング言語ベンダー(NVIDIA Corporation)バージョン(3.30 NVIDIA via Cgコンパイラ)レンダラー(GeForce 9600 GT/PCI/SSE2) – Ben

+0

最初のブロックにエラーメッセージとそのエラーを生成するv3頂点シェーダーの両方があるようです。 2番目のブロックはGLSL v1に変換された同じシェーダを持っています。これはうまくいくはずです。あるいは、私はあなたが上に投稿したことを理解していないでしょう。もう一つ明確でない点は、「 - 頂点シェーダのコンパイルに失敗しました」という行が –

+0

から来るところです。また、そのベンダー文字列はデスクトップGL v3.30のように見え、GL/ESではまったく見えません。 –

関連する問題