Guest User

Untitled

a guest
Oct 29th, 2013
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.21 KB | None | 0 0
  1. #ifndef SB6_H
  2. #define SB6_H
  3. #include <sb6.h>
  4. #endif
  5. #include <cmath>
  6. GLuint compile_shaders(void)
  7. {
  8.     GLuint vertex_shader;
  9.     GLuint fragment_shader;
  10.     GLuint program;
  11.  
  12.     // Source code for vertex shader
  13.     static const GLchar * vertex_shader_source[] =
  14.     {
  15.         "#version 430 core                                  \n"
  16.         "layout (location = 0) in vec4 offset;              \n"
  17.         "void main(void)                                    \n"
  18.         "{                                                  \n"
  19.         "   const vec4 vertices[3] = vec4[3](vec4( 0.25, -0.25, 0.5, 1.0),\n"
  20.         "   vec4(-0.25, -0.25, 0.5, 1.0),                   \n"
  21.         "   vec4( 0.25,  0.25, 0.5, 1.0));                  \n"
  22.         "   gl_Position = vertices[gl_VertexID] + offset;   \n"
  23.         "}                                                  \n"
  24.     };
  25.  
  26.     // Source code for fragment shader
  27.     static const GLchar * fragment_shader_source[] =
  28.     {
  29.         "#version 430 core                                  \n"
  30.         "                                                   \n"
  31.         "out vec4 color;                                    \n"
  32.         "                                                   \n"
  33.         "void main(void)                                    \n"
  34.         "{                                                  \n"
  35.         "    color = vec4(0.0, 0.8, 1.0, 1.0);              \n"
  36.         "}                                                  \n"
  37.     };
  38.  
  39.     // Create and compile vertex shader
  40.     vertex_shader = glCreateShader(GL_VERTEX_SHADER);
  41.     glShaderSource(vertex_shader, 1, vertex_shader_source, NULL);
  42.     glCompileShader(vertex_shader);
  43.  
  44.     // Create and compile fragment shader
  45.     fragment_shader = glCreateShader(GL_FRAGMENT_SHADER);
  46.     glShaderSource(fragment_shader, 1, fragment_shader_source, NULL);
  47.     glCompileShader(fragment_shader);
  48.  
  49.     // Create program, attach shaders to it, and link it
  50.     program = glCreateProgram();
  51.     glAttachShader(program, vertex_shader);
  52.     glAttachShader(program, fragment_shader);
  53.     glLinkProgram(program);
  54.  
  55.     // Delete the shaders as the program has them now
  56.     glDeleteShader(vertex_shader);
  57.     glDeleteShader(fragment_shader);
  58.  
  59.     return program;
  60. }
  61.  
  62. // Derive my_application from sb6::application
  63. class my_application : public sb6::application
  64. {
  65. public:
  66.     // <snip>
  67.  
  68.     void startup()
  69.     {
  70.         rendering_program = compile_shaders();
  71.         glGenVertexArrays(1, &vertex_array_object);
  72.         glBindVertexArray(vertex_array_object);
  73.     }
  74.  
  75.     void shutdown()
  76.     {
  77.         glDeleteVertexArrays(1, &vertex_array_object);
  78.         glDeleteProgram(rendering_program);
  79.         glDeleteVertexArrays(1, &vertex_array_object);
  80.     }
  81.     virtual void render(double currentTime)
  82.     {
  83.         const GLfloat color[] = { (float)sin(currentTime) * 0.5f + 0.5f,
  84.             (float)cos(currentTime) * 0.5f + 0.5f,
  85.             0.0f, 1.0f };
  86.         glClearBufferfv(GL_COLOR, 0, color);
  87.  
  88.         // Use the program object we created earlier for rendering
  89.         glUseProgram(rendering_program);
  90.  
  91.         GLfloat attrib[] = { (float)sin(currentTime) * 0.5f,
  92.             (float)cos(currentTime) * 0.6f,
  93.             0.0f, 0.0f };
  94.  
  95.         // Update the value of input attribute 0
  96.         glVertexAttrib4fv(0, attrib);
  97.  
  98.         // Draw one triangle
  99.         glDrawArrays(GL_TRIANGLES, 0, 3);
  100.     }
  101. private:
  102.     GLuint  rendering_program;
  103.     GLuint  vertex_array_object;
  104. };
  105.  
  106. // Our one and only instance of DECLARE_MAIN
  107. DECLARE_MAIN(my_application);
Advertisement
Add Comment
Please, Sign In to add comment