Модераторы: Rickert, Alexeis, BorisVorontsov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [OpenGL] Бинд нулевой текстуры 
V
    Опции темы
Jeka178RUS
Дата 7.3.2013, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 85
Регистрация: 3.9.2012

Репутация: нет
Всего: нет



Добрый день!

В моем приложении используется две текстуры:
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 текстуры?
Какое значение "нулевой" текстуры у Вас?
PM MAIL   Вверх
Jeka178RUS
Дата 11.3.2013, 17:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 85
Регистрация: 3.9.2012

Репутация: нет
Всего: нет



Разобрался: оказывается в спецификации сказано что текстура по-умолчанию (та что биндится 0) должна иметь значения (0,0,0,1). Как видно старая версия драйвера не следовала спецификации и возвращала 4 нуля, на чем я и попался. RTFM smile
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Вы можете найти полезным что...
Alexeis
Rickert
  • Английская документация по DirectX лежит где-то здесь.
  • Английская документация по OpenGL лежит где-то там.
  • Гейм-дев у нас обсуждают где-то тут

Ждём вас! С уважением, Alexeis, Rickert.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема »


 




[ Время генерации скрипта: 0.0625 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.