首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么SFML Shader会导致分段错误?

为什么SFML Shader会导致分段错误?
EN

Stack Overflow用户
提问于 2015-02-13 22:08:58
回答 1查看 362关注 0票数 0

为什么sf::Shader会导致分段错误。我将显示代码,我会告诉那些看代码的人,我使用了一个引擎,它工作正常,除了使用sf::Shader.And之外,它不会导致崩溃。当我加载着色器时,代码停止。

main.cpp

代码语言:javascript
复制
#include <iostream>
#include "CoreEngine.h"
#include "maingame.h"

int main()
{
//CoreEngine e(new MainGame(new Vector2i(800, 600), "Mama"));
//e.start();
Window::createWindow(800, 600, "Mama");
Window::clearColor(124, 32, 125);

bool running = true;

while(running){
    if(Window::isWindowClosed())
        running = false;


sf::RectangleShape shape(sf::Vector2f(20, 20));
shape.setPosition(10, 10);
sf::Shader shader;
if(!shader.loadFromFile("fragment.fs", sf::Shader::Fragment))
    std::cout << "dfsfsdf";
    Window::clear();
    Window::getDrawer()->draw(shape, &shader);
    Window::render();
}
}

以下是代码的编译版本。

代码语言:javascript
复制
#include <iostream>
#include <SFML/Graphics.hpp>

int main()
{
//CoreEngine e(new MainGame(new Vector2i(800, 600), "Mama"));
//e.start();
sf::RenderWindow window(sf::VideoMode(800, 600), "Msadama");

sf::Shader shader;
if(!shader.loadFromFile("fragment.fs", sf::Shader::Fragment)){
    std::cerr << "Shader failed to load" << std::endl;
    return 0;
}
sf::RectangleShape shape(sf::Vector2f(20, 20));
shape.setPosition(10, 10);
while(window.isOpen()){
   sf::Event event;

   while(window.pollEvent(event)){
    if(event.type == sf::Event::Closed)
        window.close();
   }




    window.clear();
    window.draw(shape);
    window.display();
}
}
EN

回答 1

Stack Overflow用户

发布于 2015-02-13 23:07:29

您对sf::Shader::loadFromFile的调用正在失败,这将触发if语句,因为您正在检查错误的条件。你真正想要的是:

代码语言:javascript
复制
sf::Shader shader;
if(!shader.loadFromFile("fragment.fs", sf::Shader::Fragment))
    std::cerr << "Shader failed to load" << std::endl; 
    return 0;
}

std::cout << "dfsfsdf";
Window::clear();
Window::getDrawer()->draw(shape, &shader);
Window::render();

无论如何,您不应该在每一帧都从文件加载着色器。做一次,检查错误,然后进入主循环。类似于以下内容(未经测试):

代码语言:javascript
复制
int main()
{
    Window::createWindow(800, 600, "Mama");
    Window::clearColor(124, 32, 125);

    sf::Shader shader;
    if(!shader.loadFromFile("fragment.fs", sf::Shader::Fragment))
    {
        std::cerr << "Failed to load shader" << std::endl;
        return 0;
    }

    bool running = true;

    while(running){
        if(Window::isWindowClosed())
            running = false;

        sf::RectangleShape shape(sf::Vector2f(20, 20));
        shape.setPosition(10, 10);

        Window::clear();
        Window::getDrawer()->draw(shape, &shader);
        Window::render();
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28501452

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档