SFML community forums

Help => Graphics => Topic started by: Xemerau on September 10, 2016, 10:41:23 pm

Title: Using OpenGL 4.5 and the SFML graphics module
Post by: Xemerau on September 10, 2016, 10:41:23 pm
I'm trying to build a program that utilises both OpenGL 4.5 and SFML graphics module. I've been following along with the tutorial (http://www.sfml-dev.org/tutorials/2.4/window-opengl.php#using-opengl-together-with-the-graphics-module) but I can't seem to get any of the graphics module code rendering too.

I'm not sure if it's a profile related issue or not, but any help would be greatly appreciated. I'll post the Shader class as an attatchment, since I'm sure the issue is in this example:

#include <GL/glew.h>
#include <SFML/OpenGL.hpp>
#include "Shader.h"
#include <SFML/Window/Event.hpp>
#include <SFML/Graphics/RenderWindow.hpp>
#include <SFML/Graphics/RectangleShape.hpp>

int main()
{
        sf::RenderWindow window(sf::VideoMode(500,500), "sfOpengl", sf::Style::Default);
        sf::RectangleShape rect(sf::Vector2f(50, 50));
        rect.setFillColor(sf::Color::Magenta);

        GLuint VBO;
        GLuint VAO;
        Shader* shader = NULL;
        shader = new Shader("shaders/triangle.vs", "shaders/triangle.fs");
        GLfloat vertices[9] = {
                -0.5f, -0.5, 0.f,
                0.5f, -0.5f, 0.f,
                0.f, 0.5f, 0.f };

        glewInit();
        glewExperimental = GL_TRUE;
        bool running = true;


        glGenVertexArrays(1, &VAO);
        glGenBuffers(1, &VBO);
        glBindVertexArray(VAO);
        glBindBuffer(GL_ARRAY_BUFFER, VBO);
        glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);

        // Position attribute
        glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(GLfloat), (GLvoid*)0);
        glEnableVertexAttribArray(0);

        // Colour attribute
        glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(GLfloat), (GLvoid*)(3 * sizeof(GLfloat)));
        glEnableVertexAttribArray(1);

        glBindVertexArray(0);

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

                window.pushGLStates();

                glClearColor(0.2f, 0.3f, 0.3f, 0.1f);
                glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

                // Drawing the triangle
                shader->use();
                glBindVertexArray(VAO);
                glDrawArrays(GL_TRIANGLES, 0, 3);
                glBindVertexArray(0);
                glDisableVertexAttribArray(0);

                window.popGLStates();
                window.resetGLStates();
                window.draw(rect);
                window.display();
        }

        glDeleteVertexArrays(1, &VAO);
        glDeleteBuffers(1, &VBO);
        delete shader;
        return 0;
}
 
Title: Re: Using OpenGL 4.5 and the SFML graphics module
Post by: binary1248 on September 10, 2016, 11:32:00 pm
SFML is not aware of non-legacy OpenGL state. Try to comment out your own OpenGL lines one by one until sfml-graphics rendering functions properly. This way you can find out which line is the source of the problems.
Title: Re: Using OpenGL 4.5 and the SFML graphics module
Post by: Xemerau on September 11, 2016, 12:00:06 am
The sf::RectangleShape seems to be rendering properly until the VAO and VBO are bound, only calling
glGenVertexArrays
and
glGenBuffers
results in it being rendered correctly.

Is there any way to bind the buffer and vertex array while still having SFML graphics rendering correctly?