Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Мультимедия, OpenGL/DirectX > [OpenGL] Бинд нулевой текстуры


Автор: Jeka178RUS 7.3.2013, 16:44
Добрый день!

В моем приложении используется две текстуры:
t0 - основная, t1 - дополнительная, используется в некоторых случаях.

Код

glActiveTexture ( GL_TEXTURE1 );
if ( mDisplayMode == EDM_DEFAULT ){
    glBindTexture( GL_TEXTURE_2D, 0 ); // В этом случае t1 мне не нужна
}else{
    glBindTexture( GL_TEXTURE_2D, mglDegreeTexture ); // В этом случае t1 накладывается поверх t0
}
shader->setUniformValue( "textureId1", 1 );


Шейдер GLSL:
Код

.....
vec4 c1 = texture( textureId0, uv );
vec4 c2 = texture( textureId1, gridUV );
float a = c2.a;
gl_FragColor = ( 1.0 - a )*c1 + a*c2;


И все вроде прекрасно работает, на моем рабочем компе с GeForce210 на драйвере 306.97, но на втором компе я обновил дрова до версии 314.07 и внезапно мой код начал выдавать черный экран. 

Я провел небольшой эксперимент и выяснил что на машине с 314 glBindTexture( GL_TEXTURE_2D, 0 ) вернет черную НЕпрозрачную текстуру (0,0,0,1), которая и ложится поверх основной, а на машине с 306 и ниже создавалась черная прозрачная (0,0,0,0)

Шейдер для эксперимента:
Код

....
vec4 c1 = texture( textureId0, uv );
vec4 c2 = texture( textureId1, gridUV );
float a = c2.a;
if (a == 1){
    gl_FragColor = vec4(1,0,0,0);
    return;
}

if ( a == 0){
    gl_FragColor = vec4(0,1,0,0);
    return;
}

gl_FragColor = ( 1.0 - a )*c1 + a*c2;


На старой машине зеленый экран, на новой красный smile 

Хотел узнать насколько корректно использование бинда 0 текстуры?
Какое значение "нулевой" текстуры у Вас?

Автор: Jeka178RUS 11.3.2013, 17:52
Разобрался: оказывается в спецификации сказано что текстура по-умолчанию (та что биндится 0) должна иметь значения (0,0,0,1). Как видно старая версия драйвера не следовала спецификации и возвращала 4 нуля, на чем я и попался. RTFM smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)