Bonjour,
Je suis en train d'apprendre OpenGL avec la superbible d'OpenGL. Etant donné que mon but final est de faire un appli, je test les codes d'exemples du bouquin avec SFML, cependant je n'arrive pas à affiché un stupide triangle.
Avec les samples du bouquin c'est sensé donner ça :
Cependant quand je test avec SFML je n'ai que le fond vert.
Voici mon code :
#include <SFML/Window.hpp>
#include <GL/glew.h>
#include <iostream>
using namespace std;
int main(int argc, char* argv[])
{
sf::VideoMode videoMode(1280,720,32);
sf::Window window(videoMode, "OpenGL", sf::Style::Default, sf::ContextSettings());
window.setVerticalSyncEnabled(true);
cout << window.getSettings().majorVersion << " " << window.getSettings().minorVersion << endl;
glewExperimental=true;
GLenum err = glewInit();
cout << err << endl;
//============<Sample>==============
GLuint program;
GLuint vao;
static const char * vs_source[] =
{
"#version 420 core \n"
" \n"
"void main(void) \n"
"{ \n"
" const vec4 vertices[] = vec4[](vec4( 0.25, -0.25, 0.5, 1.0), \n"
" vec4(-0.25, -0.25, 0.5, 1.0), \n"
" vec4( 0.25, 0.25, 0.5, 1.0)); \n"
" \n"
" gl_Position = vertices[gl_VertexID]; \n"
"} \n"
};
static const char * fs_source[] =
{
"#version 420 core \n"
" \n"
"out vec4 color; \n"
" \n"
"void main(void) \n"
"{ \n"
" color = vec4(0.0, 0.8, 1.0, 1.0); \n"
"} \n"
};
program = glCreateProgram();
GLuint fs = glCreateShader(GL_FRAGMENT_SHADER);
glShaderSource(fs, 1, fs_source, NULL);
glCompileShader(fs);
GLuint vs = glCreateShader(GL_VERTEX_SHADER);
glShaderSource(vs, 1, vs_source, NULL);
glCompileShader(vs);
glAttachShader(program, vs);
glAttachShader(program, fs);
glLinkProgram(program);
glGenVertexArrays(1, &vao);
glBindVertexArray(vao);
//============</Sample>==============
// la boucle principale
bool running = true;
while (running)
{
sf::Event event;
while (window.pollEvent(event))
{
if (event.type == sf::Event::Closed)
{
running = false;
}
else if (event.type == sf::Event::Resized)
{
glViewport(0, 0, event.size.width, event.size.height);
}
}
//============<Sample>==============
static const GLfloat green[] = { 0.0f, 0.25f, 0.0f, 1.0f };
glClearBufferfv(GL_COLOR, 0, green);
glUseProgram(program);
glDrawArrays(GL_TRIANGLES, 0, 3);
//============</Sample>==============
window.display();
}
return 0;
}
Ce qui vient des samples du bouquin sont entourés de //============<Sample>==============
Mon glew s'est bien initialisé (err = 0). SFML et glew sont compiler en dynamique (j'ai essayé en statique mais ça ne change rien).
Quand j'affiche la version d'OpenGL j'ai bien la 4.2
Au début j'utilisais une RenderWindow parce que j'affichais un HUD grâce à SFML mais je suis passé avec un code minimaliste pour faire marcher le tout.
J'ai cherché un peu partout mais je n'ai rien trouvé qui m'aide.
Du coup je me demandais si quelqu'un pouvais m'aider, ou a déjà eu ce problème ?
Merci d'avance,