SDLとOpenGLを組み合わせて実行する小さなエンジンを開発していましたが、そのエンジンを学校のプロジェクトに使用したいので、テストする必要がありました。学校のPCでパフォーマンスを確認します。これにより、シェーダーのコンパイルエラーが発生しました:

Shader compile ERROR
DEBUG INFO: ERROR: 0:12: "texture" : no matching overloaded function found (using implicit conversion)
ERROR 0:12: "=" : cannot convert from "const float" to "4-component vector of float"

Failed to load uniform

これはエラーが発生したフラグメントシェーダーです:

 #version 130 in vec4 fragmentColor; in vec2 fragmentUV; out vec4 color; uniform float time; uniform sampler2D mySampler; void main(){ vec4 textureColor = texture(mySampler, fragmentUV); color = textureColor * fragmentColor; } 

iv id =を使用して解決しましたtextureの代わりに “32139d2eef”>

関数。ただし、新しいコードでは古い関数は推奨されません。これは私に2つの質問を残します:

  1. なぜこれが起こったのですか?これらのPCに古いドライバーがインストールされていることが原因である可能性がありますか?

  2. 新しいガイドラインに従い、古いマシンで実行できるようにするにはどうすればよいですか? ? 2つの異なるシェーダーを使用して、プログラムにバージョンを決定させることを考えましたが、よくわかりません。

回答

マクロを使用できます:

#if __VERSION__ < 130 #define TEXTURE2D texture2D #else #define TEXTURE2D texture #endif ... vec4 textureColor = TEXTURE2D(mySampler, fragmentUV); 

この回答を見つけました。これには、。

回答

GPUを使用しているため、自宅のPCのシェーダーバージョンは学校のPCよりも高い可能性があります。古いです。古いバージョンのglslはtexture2d関数を使用していましたが、新しいバージョンは単にtextureを使用しています。

必要はありません。 2つの異なるシェーダーコードがある場合、プリプロセッサを使用して動的にすることができます。

#if __VERSION__ > 120 color = texture(sampler, texCoord); #else color = texture2D(sampler, texCoord); #endif 

コードがコンパイルされると、openglが使用するバージョンを決定します。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です