От новичка до гуру: Курсы программирования на CyberDuff

Ошибка загрузки шейдера SFML

Итак, я работаю над своим игровым проектом, используя 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);
}

Что в этом плохого..?

22.03.2014

  • Почему, почему вы рисуете вне своей функции рисования? Никогда не делай этого. настроить основной цикл, который обновляет, рисует и опрашивает события. Все это должно быть ОТДЕЛЬНО. После этого вернитесь со своими функциями рисования и обновления. 23.03.2014
  • Я рисую в sf::RenderTexture, так что я могу использовать эту текстуру для рисования фактической кнопки с помощью шейдера. Во всяком случае, я ничего не рисовал на экране. Я не думаю, что это проблема. 23.03.2014
  • Это, наверное, все. Серьезно, сначала настройте стандартный цикл. 23.03.2014
  • Серьезно, чувак, я не новичок в SFML и/или C++. Забудь об этом. 23.03.2014

Ответы:


1

Какое значение возвращается при вызове:

sf::Shader::isAvailable()

Убедитесь, что вы можете использовать шейдерную программу, прежде чем вызывать ее. Кроме того, шейдер не может привести к сбою программы, так что это точно не ваш шейдер. Если с вашим шейдером что-то не так, он не скомпилируется. Если ваш шейдер не скомпилировался, SFML автоматически переключается на встроенный шейдер.

21.05.2014
Новые материалы

5 простых концепций Python, ставших сложными
#заранее извините 1) Переменные x = 4 y = 5 Переменная в Python — это символическое представление объекта. После присвоения некоторого объекта переменной Python мы приобретаем..

«Освоение вероятности: изучение совместной, предельной, условной вероятности и теоремы Байеса —…
Виды вероятности: Совместная вероятность Предельная вероятность Условная вероятность Диаграмма Венна в вероятностях: В “Set Theory” мы создаем диаграмму Венна...

Основы Spring: Bean-компоненты, контейнер и внедрение зависимостей
Как лего может помочь нашему пониманию Когда мы начинаем использовать Spring, нам бросают много терминов, и может быть трудно понять, что они все означают. Итак, мы разберем основы и будем..

Отслеживание состояния с течением времени с дифференцированием снимков
Время от времени что-то происходит и революционизирует часть моего рабочего процесса разработки. Что-то более забавное вместо типичного утомительного и утомительного процесса разработки. В..

Я предполагаю, что вы имеете в виду методы обработки категориальных данных.
Я предполагаю, что вы имеете в виду методы обработки категориальных данных. Пожалуйста, проверьте мой пост Инструментарий специалиста по данным для кодирования категориальных переменных в..

Игра в прятки с данными
Игра в прятки с данными Я хотел бы, чтобы вы сделали мне одолжение и ответили на следующие вопросы. Гуглить можно в любое время, здесь никто не забивается. Сколько регионов в Гане? А как..

«Раскрытие математических рассуждений с помощью Microsoft MathPrompter и моделей больших языков»
TL;DR: MathPrompter от Microsoft показывает, как использовать математические рассуждения с большими языковыми моделями; 4-этапный процесс для улучшения доверия и рассуждений в математических..