Итак, я работаю над своим игровым проектом, используя SFML, и я попытался реализовать шейдер размытия. Я понятия не имею, почему, но этот блок кода заставляет программу показывать белый экран, а затем закрывать. Я даже не использовал шейдер, чтобы что-то нарисовать, просто тот факт, что я пытаюсь его загрузить, дает неожиданный результат :( .
void button::setText(std::string _text)
{
text.setString(_text);
text.setFont(font);
text.setCharacterSize(80);
text.move(0,-(text.getLocalBounds().top));
text.setColor(sf::Color(255,255,255,255));
width=text.getLocalBounds().width+text.getLocalBounds().left;
height=text.getLocalBounds().height+text.getLocalBounds().top;
rndtexture.create(width, height);
rndtexture.setSmooth(true);
rndtexture.clear(sf::Color::Transparent);
rndtexture.draw(text);
rndtexture.display();
rTexture=rndtexture.getTexture();
spriteR.setTexture(rTexture);
rndtexture.clear(sf::Color::Transparent);
text.setColor(sf::Color(0,0,0,100));
rndtexture.draw(text);
rndtexture.display();
pTexture=rndtexture.getTexture();
spriteP.setTexture(pTexture);
//commenting this out will make it work just fine
if (!shader.loadFromFile("shader.frag", sf::Shader::Type::Fragment))
{
std::cout<<"lol";
}
//
shader.setParameter("texture", sf::Shader::CurrentTexture);
shader.setParameter("blur_radius", 5.0);
}
Это мой файл шейдера:
uniform sampler2D texture;
uniform float blur_radius;
void main()
{
vec2 offx = vec2(blur_radius, 0.0);
vec2 offy = vec2(0.0, blur_radius);
vec4 pixel = texture2D(texture, gl_TexCoord[0].xy) * 4.0 +
texture2D(texture, gl_TexCoord[0].xy - offx) * 2.0 +
texture2D(texture, gl_TexCoord[0].xy + offx) * 2.0 +
texture2D(texture, gl_TexCoord[0].xy - offy) * 2.0 +
texture2D(texture, gl_TexCoord[0].xy + offy) * 2.0 +
texture2D(texture, gl_TexCoord[0].xy - offx - offy) * 1.0 +
texture2D(texture, gl_TexCoord[0].xy - offx + offy) * 1.0 +
texture2D(texture, gl_TexCoord[0].xy + offx - offy) * 1.0 +
texture2D(texture, gl_TexCoord[0].xy + offx + offy) * 1.0;
gl_FragColor = gl_Color * (pixel / 16.0);
}
Что в этом плохого..?