Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Link statically with GLEW
- #define GLEW_STATIC
- // Headers
- #include <GL/glew.h>
- #include <SFML/Window.hpp>
- #include <iostream>
- #include <stdio.h>
- // Shader sources
- const char* vertexSource =
- "#version 150\n"
- "in vec2 position;"
- "void main() {"
- " gl_Position = vec4( position, 0.0, 1.0 );"
- "}";
- const char* fragmentSource =
- "#version 150\n"
- "out vec4 outColor;"
- "void main() {"
- " outColor = vec4( 1.0, 1.0, 1.0, 1.0 );"
- "}";
- int main()
- {
- sf::Window window( sf::VideoMode( 800, 600 ), "OpenGL", sf::Style::Titlebar | sf::Style::Close );
- // Initialize GLEW
- glewExperimental = GL_TRUE;
- glewInit();
- // Create Vertex Array Object
- GLuint vao;
- glGenVertexArrays( 1, &vao );
- glBindVertexArray( vao );
- // Create a Vertex Buffer Object and copy the vertex data to it
- GLuint vbo;
- glGenBuffers( 1, &vbo );
- float vertices[] = {
- 0.0f, 0.5f,
- 0.5f, -0.5f,
- -0.5f, -0.5f
- };
- glBindBuffer( GL_ARRAY_BUFFER, vbo );
- glBufferData( GL_ARRAY_BUFFER, sizeof( vertices ), vertices, GL_STATIC_DRAW );
- // Create and compile the vertex shader
- GLuint vertexShader = glCreateShader( GL_VERTEX_SHADER );
- glShaderSource( vertexShader, 1, &vertexSource, NULL );
- glCompileShader( vertexShader );
- // Create and compile the fragment shader
- GLuint fragmentShader = glCreateShader( GL_FRAGMENT_SHADER );
- glShaderSource( fragmentShader, 1, &fragmentSource, NULL );
- glCompileShader( fragmentShader );
- // Link the vertex and fragment shader into a shader program
- GLuint shaderProgram = glCreateProgram();
- glAttachShader( shaderProgram, vertexShader );
- glAttachShader( shaderProgram, fragmentShader );
- glBindFragDataLocation( shaderProgram, 0, "outColor" );
- glLinkProgram( shaderProgram );
- glUseProgram( shaderProgram );
- // Specify the layout of the vertex data
- GLint posAttrib = glGetAttribLocation( shaderProgram, "position" );
- glEnableVertexAttribArray( posAttrib );
- glVertexAttribPointer( posAttrib, 2, GL_FLOAT, GL_FALSE, 0, 0 );
- printf("%d\n", glGetError());
- while ( window.IsOpened() )
- {
- sf::Event windowEvent;
- while ( window.GetEvent( windowEvent ) )
- {
- switch ( windowEvent.Type )
- {
- case sf::Event::Closed:
- window.Close();
- break;
- }
- }
- // Clear the screen to black
- glClearColor( 0.0f, 0.0f, 0.0f, 1.0f );
- glClear( GL_COLOR_BUFFER_BIT );
- // Draw a triangle from the 3 vertices
- glDrawArrays( GL_TRIANGLES, 0, 3 );
- // Swap buffers
- window.Display();
- }
- glDeleteProgram( shaderProgram );
- glDeleteShader( fragmentShader );
- glDeleteShader( vertexShader );
- glDeleteBuffers( 1, &vbo );
- glDeleteVertexArrays( 1, &vao );
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement