2017-06-20 5 views
-4

EDIT:GLSLはコンパイルしますがリンクしません

NVM ...この2000ラインシェーダの行単位スキャン後にエラーが見つかりました。これはコンパイル中に破損していたはずですが、それは合格...なぜですか?

uv2.xy -= (someVec3Var.x * someFloatScale) + (anotherVec3Var2* anotherFloatScal); 

だから、基本的にエラーが最初のものはフロートを生成し、それがvec3に追加され、それがVEC2に割り当てられているということです....このコードはで動作します。それは文字通り、このようなものだラインでありますHSLSL :(

私はそれが私のフラグメントシェーダのための苦情、...私のGLSLのコンパイルが、それはリンクしたときに本当に奇妙な何かを見ている:

0(1805) : error C7011: implicit cast from "vec3" to "vec2" 
0(1805) : error C7011: implicit cast from "vec4" to "vec3" 
0(1808) : error C7011: implicit cast from "vec3" to "vec2" 
0(1808) : error C7011: implicit cast from "vec4" to "vec3" 

私はコンパイル時にこれらのエラーを持っていたと私それらのすべてを固定して、それはすべていいです...しかし、なぜ彼らはリンクに現れますか? heseは私の修正に先立って起こっていたコンパイルエラーとは異なる行でも起こります。これはリンク時にのみ発生する理由は何ですか?これは、私がユニフォームの頂点とフラグメントで同じ名前を持っているという事実のためかもしれませんか?私はOpenGL ESで何かを読んで、同じメモリにマップします...私はそれらを同じ変数にしたいので、どちらも問題ありません。

ありがとうございます!

+1

コードはどこですか? –

+0

これは2000ラインのシェーダです...本当にここに置くべきでしょうか? – ChaoSXDemon

+4

いいえ、 "lol"。代わりに問題の[MCVE]を作成する必要があります。それらのエラーを再現するコードの最小量に減らしてください。 –

答えて

1

多くのGLSL実装では、LinkProgramを呼び出すまで実際にシェーダをコンパイルしません。 CompileShaderを呼び出すと、基本的な構文健全性チェックが行われます。ほとんどのGPUで妥当なパフォーマンスを得るためには、プログラム全体の最適化が必要です。したがって、あなたがリンクするときだけ、通常は「コンパイル」エラーとみなされるものを見ることができます。

関連する問題