Не в состоянии отображаться в SFML после рендеринга в кадровый буфер opengl - PullRequest
0 голосов
/ 12 октября 2019

Моя цель - создать шум, сделать рендеринг с помощью шейдера на кадровом буфере и вытянуть данные на CPU. Мне не нужно делать дальнейший рендеринг с opengl в цикле, он мне нужен только один раз, в начале.

Я загружаю рад после инициализации моего окна SFML, и мой код opengl работает нормально и работает как положено.

Проблема заключается в том, чтобы снова рисовать вещи с помощью SFML после выполнения вызовов opengl.

Я прочитал пример и учебное пособие, но не понимаю, что происходит не так ...

Я использую свою собственную копию gladc / glad.h для инициализации opengl.

    window->setActive(true);
    {
        if (!gladLoadGLLoader(reinterpret_cast<GLADloadproc>(sf::Context::getFunction)))
        //if (!gladLoadGL())
        {
            std::cout << "Failed to initialize GLAD" << std::endl;
            return -1;
        }
        ourShader = gl_things::Shader("shaders/quad.vs", "shaders/perlin2.fs");

        init_geom();
        init_framebuffer();
        pull();
    }
    window->setActive(false);

    window->resetGLStates();

Когда я рисую прямоугольник SFML, возникает исключение

void draw() {
    window->pushGLStates();
    window->draw(dadaism);
    window->popGLStates();
}

IМне интересно, возможно ли на самом деле использовать OpenGL, как я делаю. Важной деталью является то, что я использую opengl, потому что мне нужно объявить текстуру как GL_FLOAT, чтобы ее можно было потом вернуть. SFML не может сделать это самостоятельно.

image

...