Est ce normal que mon seul affichage soit une fenêtre noire avec ce code ? (Pas de triangle blanc ?) ^^
#include <iostream>
#ifdef WIN32
#include <GL/glew.h>
#else
#define GL3_PROTOTYPES 1
#include <GL3/gl3.h>
#endif
#include <SFML_2.0/Window.hpp>
#include <SFML_2.0/OpenGL.hpp>
int main()
{
// crée la fenêtre
sf::Window MainWindow(sf::VideoMode(800, 600), "OpenGL", sf::Style::Default, sf::ContextSettings(24, 0, 0, 3, 1));
MainWindow.setVerticalSyncEnabled(true);
#ifdef WIN32
GLenum InitialisationGLEW(glewInit());
if(InitialisationGLEW != GLEW_OK)
{
// On affiche l'erreur grâce à la fonction : glewGetErrorString(GLenum code)
std::cout << "Erreur d'initialisation de GLEW : " << glewGetErrorString(InitialisationGLEW) << std::endl;
exit(-1);
}
#endif
int vertices[] = {-0.5, -0.5, 0.0, 0.5, 0.5, -0.5};
// la boucle principale
while(MainWindow.isOpen())
{
// gestion des évènements
sf::Event event;
while (MainWindow.pollEvent(event))
{
if (event.type == sf::Event::Closed)
{
// on stoppe le programme
MainWindow.close();
}
}
glClear(GL_COLOR_BUFFER_BIT);
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, vertices);
glEnableVertexAttribArray(0);
glDrawArrays(GL_TRIANGLES, 0, 3);
glDisableVertexAttribArray(0);
MainWindow.display();
}
return 0;
}
Toute aide est bien venue !
Finalement les shaders ne changent rien... (A moins que je ne les utilise mal !)
Toujours aucun résultat :
#include <iostream>
#ifdef WIN32
#include <GL/glew.h>
#else
#define GL3_PROTOTYPES 1
#include <GL3/gl3.h>
#endif
#include <SFML_2.0/Window.hpp>
#include <SFML_2.0/Graphics.hpp>
#include <SFML_2.0/OpenGL.hpp>
int main()
{
// Crée la fenêtre
sf::Window MainWindow(sf::VideoMode(800, 600), "OpenGL", sf::Style::Default, sf::ContextSettings(24, 0, 0, 3, 1));
MainWindow.setVerticalSyncEnabled(true);
// Chargement de Glew
#ifdef WIN32
GLenum InitialisationGLEW(glewInit());
if(InitialisationGLEW != GLEW_OK)
{
// On affiche l'erreur grâce à la fonction : glewGetErrorString(GLenum code)
std::cout << "Erreur d'initialisation de GLEW : " << glewGetErrorString(InitialisationGLEW) << std::endl;
exit(-1);
}
#endif
// Initialisation des tableaux
int vertices[] = {-0.5, -0.5, 0.0, 0.5, 0.5, -0.5};
float couleurs[] = {1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0};
// Chargement des shaders
sf::Shader Shader;
Shader.loadFromFile("Shaders/couleurs_2D.vert", "Shaders/couleurs.frag");
// La boucle principale
while(MainWindow.isOpen())
{
// Gestion des évènements
sf::Event event;
while (MainWindow.pollEvent(event))
{
if (event.type == sf::Event::Closed)
{
// On stoppe le programme
MainWindow.close();
}
}
// On netoie l'écran
glClear(GL_COLOR_BUFFER_BIT);
// On rentre les valeurs de position (2D) dans le tableau Vertex Attrib 1
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, vertices);
glEnableVertexAttribArray(0);
// On rentre les valeurs de couleur (3D) dans le tableau Vertex Attrib 1
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 0, couleurs);
glEnableVertexAttribArray(1);
// On affiche le triangle grâce au shader
Shader.bind();
glDrawArrays(GL_TRIANGLES, 0, 3);
Shader.unbind();
// On désactive les tableaux Vertex Attrib
glDisableVertexAttribArray(1);
glDisableVertexAttribArray(0);
// On affiche le résultat
MainWindow.display();
}
return 0;
}
Avec les shaders tirés directement de la doc d'OpenGL :
// Vertex Shader
#version 140
in vec3 in_Position;
in vec3 in_Color;
out vec3 ex_Color;
void main(void)
{
gl_Position = vec4(in_Position, 1.0);
ex_Color = in_Color;
}
// Fragment Shader
#version 140
in vec3 ex_Color;
out vec4 out_Color;
void main(void)
{
out_Color = vec4(ex_Color,1.0);
}
En espérant que mon code soit clair et concis, et que l'erreur soit mienne (que je ne doive pas me tourner vers autre chose qu'SFML :-\).
Merci d'avance pour toute aide qui pourra m'être apportée !