2016-08-17 4 views
-1

フラグメントシェーダに2D(長方形)テクスチャを渡す必要があります。テクスチャ内のデータは、サンプラ内でユニフォームとして読み取られなければなりません。テクスチャで読み取られる値に応じて、ピクセルの色が変更されるか、変更されません。ここテクスチャデータがフラグメントシェーダのサンプラに渡されない

は、テクスチャやサンプラーをバインドするためのAPIで私のコードです:

//create texture and sampler 
glEnable(GL_TEXTURE_2D); 
GLuint CosineTexture; 
glGenTextures(1,&CosineTexture); 
glTexStorage2D(GL_TEXTURE_RECTANGLE,1,GL_RGBA,1440,1080); 

glTexSubImage2D(GL_TEXTURE_RECTANGLE,0,0,0,1440,1080,GL_RGBA,GL_FLOAT,dataCosines1); 

GLuint SensorCosines; 
glGenSamplers(1,&SensorCosines); 

glActiveTexture(GL_TEXTURE0 + 0); 
glBindTexture(GL_TEXTURE_RECTANGLE,CosineTexture); 
glBindSampler(0,SensorCosines); 

、ここでは、テクスチャから受信して読むためのシェーダでは私のコードです:

uniform samplerRect SensorCosines; 
... 

float textureValue; 
textureValue = texture(SensorCosines, Bin).r; 

何も起こりません。だから、テクスチャがシェーダに渡されていないと思います。私の気持ちは、APIのサンプラーにバインディングテクスチャのレベルであることですが、エラーは何か分かりません。

+0

私はシェイダーの詳細をいくつか表示しました。それで、ここにあります:uniform samplerRect SensorCosines; .... vec2ビン; ... Bin [0] = float(XCosines)+0.5; \t Bin [1] = float(YCosines)+0.5;ごめんなさい。ロバート – RobertB

答えて

0
glTexStorage2D(GL_TEXTURE_RECTANGLE,1,GL_RGBA,1440,1080); 

この呼び出しは、OpenGLエラーが発生します。具体的には、GL_INVALID_ENUMは、glTexStorage機能を使用する場合、を使用する必要があります。sized image formatsを使用してください。 GL_RGBAはサイズの大きい画像フォーマットではありません。

表示されていないコードには他の問題があるかもしれませんが、これは確かに問題の1つです。

+0

ヒントをありがとう。私はそれを探します。 – RobertB

+0

私はコードを変更し、代わりに1024 X 1024サイズのテクスチャを使用してTEXTURE_2Dを使用しました。依然としてsampler2Dに渡されるデータはありません。エラーのためにOpenGLをquerryし、関数gluErrorString(err)は常に "no error"を返します。私の問題はテクスチャデータの作成方法に関連すると思いますか?ここにあります:float *** dataCosines; \t //メモリを割り当てます。 \t dataCosines = new GLfloat ** [1024];\t for(int i = 0; i <1024; ++ i){ \t \t dataCosines [i] = new GLfloat * [1024];\t \t for(int j = 0; j <1024; ++ j) \t \t dataCosines [i] [j] = new GLfloat [4]; \t} – RobertB

+0

@RobertB:良い答えが得られると思われる場合は、[MCVE]を提供する必要があります。 –

関連する問題