Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #ifndef SB6_H
- #define SB6_H
- #include <sb6.h>
- #endif
- #include <cmath>
- GLuint compile_shaders(void)
- {
- GLuint vertex_shader;
- GLuint fragment_shader;
- GLuint program;
- // Source code for vertex shader
- static const GLchar * vertex_shader_source[] =
- {
- "#version 430 core \n"
- "layout (location = 0) in vec4 offset; \n"
- "void main(void) \n"
- "{ \n"
- " const vec4 vertices[3] = vec4[3](vec4( 0.25, -0.25, 0.5, 1.0),\n"
- " vec4(-0.25, -0.25, 0.5, 1.0), \n"
- " vec4( 0.25, 0.25, 0.5, 1.0)); \n"
- " gl_Position = vertices[gl_VertexID] + offset; \n"
- "} \n"
- };
- // Source code for fragment shader
- static const GLchar * fragment_shader_source[] =
- {
- "#version 430 core \n"
- " \n"
- "out vec4 color; \n"
- " \n"
- "void main(void) \n"
- "{ \n"
- " color = vec4(0.0, 0.8, 1.0, 1.0); \n"
- "} \n"
- };
- // Create and compile vertex shader
- vertex_shader = glCreateShader(GL_VERTEX_SHADER);
- glShaderSource(vertex_shader, 1, vertex_shader_source, NULL);
- glCompileShader(vertex_shader);
- // Create and compile fragment shader
- fragment_shader = glCreateShader(GL_FRAGMENT_SHADER);
- glShaderSource(fragment_shader, 1, fragment_shader_source, NULL);
- glCompileShader(fragment_shader);
- // Create program, attach shaders to it, and link it
- program = glCreateProgram();
- glAttachShader(program, vertex_shader);
- glAttachShader(program, fragment_shader);
- glLinkProgram(program);
- // Delete the shaders as the program has them now
- glDeleteShader(vertex_shader);
- glDeleteShader(fragment_shader);
- return program;
- }
- // Derive my_application from sb6::application
- class my_application : public sb6::application
- {
- public:
- // <snip>
- void startup()
- {
- rendering_program = compile_shaders();
- glGenVertexArrays(1, &vertex_array_object);
- glBindVertexArray(vertex_array_object);
- }
- void shutdown()
- {
- glDeleteVertexArrays(1, &vertex_array_object);
- glDeleteProgram(rendering_program);
- glDeleteVertexArrays(1, &vertex_array_object);
- }
- virtual void render(double currentTime)
- {
- const GLfloat color[] = { (float)sin(currentTime) * 0.5f + 0.5f,
- (float)cos(currentTime) * 0.5f + 0.5f,
- 0.0f, 1.0f };
- glClearBufferfv(GL_COLOR, 0, color);
- // Use the program object we created earlier for rendering
- glUseProgram(rendering_program);
- GLfloat attrib[] = { (float)sin(currentTime) * 0.5f,
- (float)cos(currentTime) * 0.6f,
- 0.0f, 0.0f };
- // Update the value of input attribute 0
- glVertexAttrib4fv(0, attrib);
- // Draw one triangle
- glDrawArrays(GL_TRIANGLES, 0, 3);
- }
- private:
- GLuint rendering_program;
- GLuint vertex_array_object;
- };
- // Our one and only instance of DECLARE_MAIN
- DECLARE_MAIN(my_application);
Advertisement
Add Comment
Please, Sign In to add comment