Created
September 15, 2014 07:38
-
-
Save madbence/eafa46ae234dd5e9d5c1 to your computer and use it in GitHub Desktop.
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
#define GLEW_STATIC | |
#include <GL/glew.h> | |
#include <GLFW/glfw3.h> | |
#include <thread> | |
#include <cmath> | |
#define GLSL(src) "#version 150 core\n" #src | |
const char* vertex = GLSL( | |
in vec2 position; | |
void main() { | |
gl_Position = vec4(position, 0.0, 1.0); | |
} | |
); | |
const char* fragment = GLSL( | |
uniform vec3 triangleColor; | |
out vec4 outColor; | |
void main() { | |
outColor = vec4(triangleColor, 1.0); | |
} | |
); | |
int main() { | |
glewExperimental = GL_TRUE; | |
glfwInit(); | |
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); | |
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 2); | |
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); | |
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); | |
glfwWindowHint(GLFW_RESIZABLE, GL_FALSE); | |
GLFWwindow* window = glfwCreateWindow(1366, 768, "OpenGL", glfwGetPrimaryMonitor(), nullptr); // Fullscreen | |
glfwMakeContextCurrent(window); | |
GLenum err = glewInit(); | |
if (GLEW_OK != err) { | |
fprintf(stderr, "Error: %s\n", glewGetErrorString(err)); | |
return 1; | |
} | |
float verts[] = { | |
0.0f, 0.5f, | |
0.5f, -0.5f, | |
-0.5f, -0.5f | |
}; | |
GLuint vbo; | |
glGenBuffers(1, &vbo); | |
glBindBuffer(GL_ARRAY_BUFFER, vbo); | |
glBufferData(GL_ARRAY_BUFFER, sizeof(verts), verts, GL_STATIC_DRAW); | |
GLuint vao; | |
glGenVertexArrays(1, &vao); | |
glBindVertexArray(vao); | |
GLuint vertexShader = glCreateShader(GL_VERTEX_SHADER); | |
glShaderSource(vertexShader, 1, &vertex, NULL); | |
glCompileShader(vertexShader); | |
GLint status; | |
glGetShaderiv(vertexShader, GL_COMPILE_STATUS, &status); | |
if (status != GL_TRUE) { | |
char buffer[512]; | |
glGetShaderInfoLog(vertexShader, 512, NULL, buffer); | |
printf(buffer); | |
} | |
GLuint fragmentShader = glCreateShader(GL_FRAGMENT_SHADER); | |
glShaderSource(fragmentShader, 1, &fragment, NULL); | |
glCompileShader(fragmentShader); | |
glGetShaderiv(fragmentShader, GL_COMPILE_STATUS, &status); | |
if (status != GL_TRUE) { | |
char buffer[512]; | |
glGetShaderInfoLog(fragmentShader, 512, NULL, buffer); | |
printf(buffer); | |
} | |
GLuint shaderProgram = glCreateProgram(); | |
glAttachShader(shaderProgram, vertexShader); | |
glAttachShader(shaderProgram, fragmentShader); | |
glBindFragDataLocation(shaderProgram, 0, "outColor"); | |
glLinkProgram(shaderProgram); | |
glUseProgram(shaderProgram); | |
GLint posAttrib = glGetAttribLocation(shaderProgram, "position"); | |
glEnableVertexAttribArray(posAttrib); | |
glVertexAttribPointer(posAttrib, 2, GL_FLOAT, GL_FALSE, 0, 0); | |
GLint uniColor = glGetUniformLocation(shaderProgram, "triangleColor"); | |
while (!glfwWindowShouldClose(window)) { | |
if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS) | |
glfwSetWindowShouldClose(window, GL_TRUE); | |
glClearColor(0.0f, 0.0f, 0.0f, 1.0f); | |
glClear(GL_COLOR_BUFFER_BIT); | |
float time = glfwGetTime(); | |
glUniform3f(uniColor, sin(time * 3.1415 * 5) / 2 +.5, 0.0f, 0.0f); | |
glDrawArrays(GL_TRIANGLES, 0, 3); | |
glfwSwapBuffers(window); | |
glfwPollEvents(); | |
} | |
glDeleteProgram(shaderProgram); | |
glDeleteShader(fragmentShader); | |
glDeleteShader(vertexShader); | |
glDeleteBuffers(1, &vbo); | |
glfwTerminate(); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment