Last active
August 29, 2015 14:11
-
-
Save josmithua/1fb4571aed04414d0102 to your computer and use it in GitHub Desktop.
Basic Procedure of Drawing Something in OpenGL 3.3
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <gl/glew.h> | |
#include <glm/glm.hpp> | |
#include <glm/gtc/matrix_transform.hpp> | |
GLuint vao; | |
GLuint vbo; | |
GLuint shader_program; | |
GLint uniform_color; | |
GLint uniform_MVP; | |
struct point { | |
GLdouble x; | |
GLdouble y; | |
}; | |
void main() { | |
//////////////// Create buffer objects //////////////////// | |
glGenVertexArrays(1, &vao); | |
glGenBuffers(1, &vbo); | |
/////////////// Create shader program ////////////////////// | |
static const GLchar * vertex_shader_source[] = | |
{ | |
"#version 330 core \n" | |
" \n" | |
"layout(location = 0) in vec2 position; \n" | |
" \n" | |
"uniform mat4 MVP; \n" | |
" \n" | |
"void main(){ \n" | |
" gl_Position = MVP * vec4(position.xy, 0, 1); \n" | |
"} \n" | |
} | |
static const GLchar * fragment_shader_source[] = | |
{ | |
"#version 330 core \n" | |
" \n" | |
"uniform vec4 vertexColor; \n" | |
" \n" | |
"out vec4 color; \n" | |
" \n" | |
"void main(){ \n" | |
" color = vertexColor; \n" | |
"} \n" | |
} | |
GLuint vertex_shader = glCreateShader(GL_VERTEX_SHADER); | |
glShaderSource(vertex_shader, 1, vertex_shader_source, NULL); | |
glCompileShader(vertex_shader); | |
GLuint fragment_shader = glCreateShader(GL_FRAGMENT_SHADER; | |
glShaderSource(fragment_shader, 1, fragment_shader_source, NULL); | |
glCompileShader(fragment_shader); | |
shader_program = glCreateProgram(); | |
glAttachShader(shader_program, vertex_shader); | |
glAttachShader(shader_program, fragment_shader); | |
glLinkProgram(shader_program); | |
glDeleteShader(vertex_shader); | |
glDeleteShader(fragment_shader); | |
glUseProgram(shader_program); | |
uniform_MVP = glGetUniformLocation(shader_program, "MVP"); | |
uniform_color = glGetUniformLocation(shader_program, "vertexColor"); | |
/////////////// Set up data and automatic vertex attribute filling //////////////////// | |
static const point border[4] = {{-1.0f, -1.0f}, {1.0f, -1.0f}, {1.0f, 1.0f}, {-1.0f, 1.0f}}; | |
glBindVertexArray(vao); | |
glBindBuffer(GL_ARRAY_BUFFER, vbo); | |
glBufferData(GL_ARRAY_BUFFER, sizeof(border), border, GL_STATIC_DRAW); | |
glVertexAttribPointer(0, 2, GL_DOUBLE, GL_FALSE, 0, (void*)0); | |
/////////////// Send data to uniforms /////////////////////////// | |
glm::mat4 MVP = glm::mat4(1.0f); | |
MVP = glm::scale(MVP, glm::vec3(0.9f, 0.9f, 1.0f)); | |
glUniformMatrix4fv(uniform_MVP, 1, GL_FALSE, &MVP[0][0]); | |
GLfloat color[4] = {1.0f, 0.0f, 0.0f, 1.0f}; // Red | |
glUniform4fv(uniform_color, 1, color); | |
/////////////// Finally draw! /////////////////// | |
glDrawArrays(GL_LINE_LOOP, 0, 4); | |
////////////// Delete stuff after you're done /////////////// | |
glDeleteBuffers(1, &vbo); | |
glDeleteVertexArrays(1, &vao); | |
glDeleteProgram(shader_program); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment