私は本当に奇妙なバグに遭遇しています。いくつかの OpenGL コードベースを MacOS X 10.7.5 に移植しています。OpenGL コードは GL3.2 バージョンに適しています。元のバージョン (Windows/Linux" 上) は正常に動作します。GLSL または OpenGL 側にエラーはありません。しかし、Mac では、uniforms にアクセスしようとすると、すべての場所が「-1」になります。コード全体がフレームワークにラップされているため、ここにコード全体を配置するのは問題があります (また、テストされたように 100% 正しく記述されていると確信しています)。他のプラットフォームでは大部分)、GLSL コードの一部を次に示します。
#version 150 core
uniform sampler2D tex;
uniform vec2 dir;
uniform float cont;
noperspective in vec2 uv;
out vec4 colorOut;
void main(){
...
すべてのユニフォームはシェーダーによって使用されているため、GLSLcompiler がそれらを最適化する可能性は低いです。
アップデート:
わかりました、問題を突き止めるのにいくらかの進歩があります.どういうわけか、文字列、私が均一な場所を取得するメソッドに渡すように見えますが、切り捨てられます.ここにテストがあります:
への明示的な呼び出し:
GLuint loc1 = glGetUniformLocation(shaderEmboss->getHandle(), "dir");
正しい場所を返します。
しかし、場所の名前を param "const GLchar* name" として渡すと、XCode デバッガーで文字列の最初の文字だけを確認できます。