Advertisement
Darkwater

Untitled

Dec 31st, 2012
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.95 KB | None | 0 0
  1. // Link statically with GLEW
  2. #define GLEW_STATIC
  3.  
  4. // Headers
  5. #include <GL/glew.h>
  6. #include <SFML/Window.hpp>
  7. #include <iostream>
  8. #include <stdio.h>
  9.  
  10. // Shader sources
  11. const char* vertexSource =
  12.     "#version 150\n"
  13.     "in vec2 position;"
  14.     "void main() {"
  15.     "   gl_Position = vec4( position, 0.0, 1.0 );"
  16.     "}";
  17. const char* fragmentSource =
  18.     "#version 150\n"
  19.     "out vec4 outColor;"
  20.     "void main() {"
  21.     "   outColor = vec4( 1.0, 1.0, 1.0, 1.0 );"
  22.     "}";
  23.  
  24. int main()
  25. {
  26.     sf::Window window( sf::VideoMode( 800, 600 ), "OpenGL", sf::Style::Titlebar | sf::Style::Close );
  27.    
  28.     // Initialize GLEW
  29.     glewExperimental = GL_TRUE;
  30.     glewInit();
  31.  
  32.     // Create Vertex Array Object
  33.     GLuint vao;
  34.     glGenVertexArrays( 1, &vao );
  35.     glBindVertexArray( vao );
  36.  
  37.     // Create a Vertex Buffer Object and copy the vertex data to it
  38.     GLuint vbo;
  39.     glGenBuffers( 1, &vbo );
  40.  
  41.     float vertices[] = {
  42.         0.0f, 0.5f,
  43.         0.5f, -0.5f,
  44.         -0.5f, -0.5f
  45.     };
  46.  
  47.     glBindBuffer( GL_ARRAY_BUFFER, vbo );
  48.     glBufferData( GL_ARRAY_BUFFER, sizeof( vertices ), vertices, GL_STATIC_DRAW );
  49.  
  50.     // Create and compile the vertex shader
  51.     GLuint vertexShader = glCreateShader( GL_VERTEX_SHADER );
  52.     glShaderSource( vertexShader, 1, &vertexSource, NULL );
  53.     glCompileShader( vertexShader );
  54.  
  55.     // Create and compile the fragment shader
  56.     GLuint fragmentShader = glCreateShader( GL_FRAGMENT_SHADER );
  57.     glShaderSource( fragmentShader, 1, &fragmentSource, NULL );
  58.     glCompileShader( fragmentShader );
  59.  
  60.     // Link the vertex and fragment shader into a shader program
  61.     GLuint shaderProgram = glCreateProgram();
  62.     glAttachShader( shaderProgram, vertexShader );
  63.     glAttachShader( shaderProgram, fragmentShader );
  64.     glBindFragDataLocation( shaderProgram, 0, "outColor" );
  65.     glLinkProgram( shaderProgram );
  66.     glUseProgram( shaderProgram );
  67.  
  68.     // Specify the layout of the vertex data
  69.     GLint posAttrib = glGetAttribLocation( shaderProgram, "position" );
  70.     glEnableVertexAttribArray( posAttrib );
  71.     glVertexAttribPointer( posAttrib, 2, GL_FLOAT, GL_FALSE, 0, 0 );
  72.  
  73.     printf("%d\n", glGetError());
  74.  
  75.     while ( window.IsOpened() )
  76.     {
  77.         sf::Event windowEvent;
  78.         while ( window.GetEvent( windowEvent ) )
  79.         {
  80.             switch ( windowEvent.Type )
  81.             {
  82.             case sf::Event::Closed:
  83.                 window.Close();
  84.                 break;
  85.             }
  86.         }
  87.  
  88.         // Clear the screen to black
  89.         glClearColor( 0.0f, 0.0f, 0.0f, 1.0f );
  90.         glClear( GL_COLOR_BUFFER_BIT );
  91.        
  92.         // Draw a triangle from the 3 vertices
  93.         glDrawArrays( GL_TRIANGLES, 0, 3 );
  94.  
  95.         // Swap buffers
  96.         window.Display();
  97.     }
  98.  
  99.     glDeleteProgram( shaderProgram );
  100.     glDeleteShader( fragmentShader );
  101.     glDeleteShader( vertexShader );
  102.  
  103.     glDeleteBuffers( 1, &vbo );
  104.  
  105.     glDeleteVertexArrays( 1, &vao );
  106. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement