// Значение, которым будет заполняться буфер стенсила при его очистке
glClearStencil(0);//значение фона буфера стенсила фона
glStencilMask(0xFF);//Определяем, какие биты могут писаться в стенсил буфер
//Очищаем экран перед рисованием и буфер стенсила
glClear( GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);// Очищаем все буферы
рисуем задник
glEnable(GL_STENCIL_TEST);//включаем трафарет
//мы в любом случае будем писать в трафарет
glStencilFunc(GL_ALWAYS, 1, 255); //!!!!!!!!!!! не 0 а 1
//в том месте где рисуется трафарет значение буфера заменяем на 1
glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE);
level_draw();//уровень является трафаретом-только на нем видна тень
// тень будет рисоваться только в тех местах,где значение в буфере 1
glStencilFunc(GL_EQUAL, 1, 255);
glStencilOp(GL_KEEP, GL_KEEP, GL_ZERO);
player_shadow_draw();
enemy_air_shadow_draw();
glDisable(GL_STENCIL_TEST);//отключаем трафарет
заработало так, причем цвета теней больше не смешиваются ура
спасибо)
А как сделать чтобы тени еще не выводились на дырах(альфа канал) в спрайтах?