#version 450
void main()
{
const vec4 vertices[3] = vec4[3](vec4(0.25, -0.25, 0.5, 1.0),
vec4(-0.25, -0.25, 0.5, 1.0),
vec4(0.25, 0.25, 0.5, 1.0));
gl_Position = vertices[gl_VertexID];
}
#version 450
out vec4 color;
void main()
{
color = vec4(0.0, 0.8, 1.0, 1.0);
}
#include "sb7.h"
#include <math.h>
GLint complie_shaders()
{
GLuint vertex_shader, fragment_shader, program;
static const char* vertex_shader_source[] =
{
"#version 450 \n"
" \n"
"void main() \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]; \n"
"}"
};
static const char* fragment_shader_source[] =
{
"#version 450 \n"
" \n"
"out vec4 color; \n"
" \n"
"void main() \n"
"{ \n"
" color = vec4(0.0, 0.8, 1.0, 1.0); \n"
"}"
};
vertex_shader = glCreateShader(GL_VERTEX_SHADER);
glShaderSource(vertex_shader, 1, vertex_shader_source, NULL);
glCompileShader(vertex_shader);
fragment_shader = glCreateShader(GL_FRAGMENT_SHADER);
glShaderSource(fragment_shader, 1, fragment_shader_source, NULL);
glCompileShader(fragment_shader);
program = glCreateProgram();
glAttachShader(program, vertex_shader);
glAttachShader(program, fragment_shader);
glLinkProgram(program);
glDeleteShader(vertex_shader);
glDeleteShader(fragment_shader);
return program;
}
class my_application : public sb7::application
{
public:
void startup()
{
rendering_program = complie_shaders();
glCreateVertexArrays(1, &vertex_array_object);
glBindVertexArray(vertex_array_object);
}
void shutdown()
{
glDeleteVertexArrays(1, &vertex_array_object);
glDeleteProgram(rendering_program);
glDeleteVertexArrays(1, &vertex_array_object);
}
void render(double currentTime)
{
const GLfloat color[] = {0.0f, 0.2f, 0.0f, 1.0f};
glClearBufferfv(GL_COLOR, 0, color);
glUseProgram(rendering_program);
glDrawArrays(GL_TRIANGLES, 0, 3);
}
private:
GLuint rendering_program;
GLuint vertex_array_object;
};
DECLARE_MAIN(my_application);