2016-08-17 3 views
-1

Мне нужно передать текстуру 2D (Rectangle) в мой шейдер фрагмента. Данные в текстуре должны быть считаны в пробоотборнике как однородные. В зависимости от значения, считанного в текстуре, цвет пикселя будет изменен или не будет изменен.Данные текстуры не передаются в пробоотборник в фрагментном шейдере

вот мой код в 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

Я должен показать некоторые детали в шейдере. Итак, вот он: единый samplerRect SensorCosines; .... vec2 Bin; ... 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. Вы должен использовать sized image formats при использовании glTexStorage функции. GL_RGBA - не размерный формат изображения.

Возможно, у вас есть другие проблемы с неотображаемым кодом, но это, безусловно, одна из проблем.

+0

Спасибо за подсказку. Я буду искать это. – RobertB

+0

Я внес изменения в код и вместо этого использовал TEXTURE_2D с размером 1024 X 1024. По-прежнему нет данных, переданных в sampler2D. Я querry OpenGL для ошибок, и функция gluErrorString (err) всегда возвращает «no error». Как вы думаете, моя проблема может быть связана с тем, как я создаю данные текстуры? Вот он: float *** dataCosines; \t // Выделить память \t dataCosines = new GLfloat ** [1024]; \t для (int i = 0; i <1024; ++ i) { \t \t dataCosines [i] = new GLfloat * [1024]; \t \t для (int j = 0; j <1024; ++ j) \t \t dataCosines [i] [j] = new GLfloat [4]; \t} – RobertB

+0

@RobertB: Вот почему вы должны предоставить [MCVE], если вы ожидаете получить хороший ответ. –

Смежные вопросы