編集:申し訳ありませんが、スタックオーバーフローが、私は遅れています。 frac(tex_offset)
- >fract(tex_offset)
となり、ATIカードやnVidiaカードでも正しく動作します(#version
を指定した場合)。これは、私が知っているプログラマーのほとんどが髪が残っていない理由です。GLSL fragシェーダ - 非標準コードのnVidiaでのみ動作しますか?
-
私は学校プロジェクトのゲームに取り組んでいます。これは垂直スクロール機なので、必要な機能の1つはスクロールバックグラウンドでした。 (これは私はシェーダプログラミングに触れて初めてなので、本当に私がやっているかわからない)私はいくつかのアプローチを試みたが、私は最終的に、単純なフラグメントシェーダを書いた:
uniform sampler2D tex;
uniform float tex_offset;
void main()
{
vec2 coords = vec2(gl_TexCoord[0].s, gl_TexCoord[0].t - frac(tex_offset));
gl_FragColor = texture2D(tex, coords);
}
私が使用SFMLので、私は、舞台裏のものにはほとんど触れませんが、使用しているテクスチャはtex
変数に渡され、tex_offset
は、経過時間の合計にスクロール速度を制御するための合計経過秒数を掛けて生成されます。
これは想定されているとおりです。一方向にシームレスに繰り返すテクスチャを無期限にスクロールします。それは私のラップトップで動作し、両方のnVidiaカードを持っている私の家のコンピュータで動作します。しかし、ATIカードを搭載したグループメンバーのコンピュータで実行しようとしたとき、何もしなかっただけです。私はいくつかのグーグル・グーグルで、nVidiaカードは互換性に関する問題を説明するかもしれない「非標準」GLSLコードも受け入れているようです。私はGLSLに関する良いチュートリアル/説明を見つけるのが難しいと思います。私が掘り起こすものはバージョン1.2-1.4からであり、バージョン3(gl_FragColor、gl_TexCoord)では廃止された構文を使用しています。しかし、#version
を120または140などに設定しようとしたとき、シェーダもnVidiaコンピュータでの動作を停止しました。
これを質問形式にフレーズしようとすると、このシェーダコードについて何が間違っていますか?構文をデバッグする方法はありますか?これが可能な場合、nVidiaカードの「標準」モードを有効にする方法はありますか?
おそらくバージョン140はサポートされていません – SAKrisT
@SAKrisTとは思わない - バージョン110,120,130,140,150,330,400,410,420と体系的に試しました。実際は、 '#version'タグを完全に省略すると動作します。 –
あなた自身が正しい解決策を見つけ出し、既存の答えがすでに与えられていない場合は、自分の質問に対する回答を投稿(および受け入れ)することは完全に有効です。元の質問を編集するよりもはるかに優れています。 –