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 !