Я программирую игру в C++ и sdl, opengl, но буфер трафарета, похоже, не запускается. Я включил трафарет биты с этим параметром:Буфер трафарета SDL2 и OpenGL не работает
SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE, 1);
Вот код:
glColorMask(0,0,0,0);
_stencil.EnableStencil();
_stencil.StencilFunc(GL_ALWAYS,2,1);
_stencil.StencilOp(GL_REPLACE,GL_REPLACE,GL_REPLACE);
glBegin(GL_QUADS);
glColor3f(0,0,0);
glVertex2f(_size.x,_size.y);
glVertex2f(_size.x,_size.y + _size.h);
glVertex2f(_size.x + _size.w,_size.y + _size.h);
glVertex2f(_size.x + _size.w,_size.y);
glColor3f(1,1,1);
glEnd();
glColorMask(1,1,1,1);
_stencil.StencilFunc(GL_EQUAL,2,1);
_stencil.StencilOp(GL_KEEP,GL_KEEP,GL_KEEP);
for(int i = 0; i < _list.size(); i++)
{
_name.SetFontData(_fdata);
_name.SetLabelText(_list[i].name);
_name.SetLabelColor(255,255,255,255);
_icon.BindTexture(_list[i].data.ID, _list[i].data.width , _list[i].data.height);
/*if(_offsety + (_listGui.GetTextureInfo().height*i) + (_spacing_y*i) >= _size.y && _offsety + ((_listGui.GetTextureInfo().height*i)+_listGui.GetTextureInfo().height) + (_spacing_y*i) <= (_size.y + _size.h))
{*/
if(i == 0)
{
_listGui.Render(_size.x + _spacing_x, _offsety);
_name.RenderText(_size.x + _spacing_x + _label.x,_offsety + _label.y);
_icon.Render(_size.x + (_iconPos.y + _spacing_x) , _offsety + _iconPos.y);
}
else
{
_listGui.Render(_size.x + _spacing_x, (_offsety + ((_listGui.GetTextureInfo().height*i) + (_spacing_y*i))));
_name.RenderText(
_size.x + (_label.x + _spacing_x),
_offsety + ((_listGui.GetTextureInfo().height*i) + (_spacing_y*i)) + _label.y
);
_icon.Render(
_size.x + (_iconPos.x + _spacing_x),
_offsety + _iconPos.y + (_listGui.GetTextureInfo().height*i) + (_spacing_y*i)
);
}
/*}*/
}_stencil.DisableStencil();
_stencil.EnableStencil() равно glEnable (GL_STENCIL_TEST); для _stencil.DisableStecil();
SDL_GL_STENCIL_SIZE принимает размер буфера трафарета в битах (типичный значение равно 8, по умолчанию 0). – Entalpi