Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string>
- #define GLEW_STATIC
- #include <GL/glew.h>
- #include <GLFW/glfw3.h>
- #include <glm/glm.hpp>
- #include <glm/gtx/transform.hpp>
- #include "../common/shader.h"
- const GLfloat reticle_vertices[] =
- {
- -1.0f, -1.0f, 0.0f,
- 1.0f, -1.0f, 0.0f,
- 0.0f, 1.0f, 0.0f
- };
- glm::mat4 MVP;
- glm::mat4 vp;
- const char *vertexSource =
- "#version 150\n"
- "layout(location = 0) in vec3 position;"
- "layout(location = 1) in vec3 color;"
- "out vec3 fragColor;"
- "uniform mat4 MVP;"
- "void main() {"
- "gl_Position = MVP * vec4(position, 1.0);"
- "fragColor = color;"
- "}";
- const char *fragmentSource =
- "#version 150\n"
- "in vec3 fragColor;"
- "out vec4 outColor;"
- "void main() {"
- "outColor = vec4(fragColor, 1.0);"
- "}";
- // Key callback: exit on ESCAPE
- static void key_callback(GLFWwindow *window, int key, int scancode, int action, int mods)
- {
- if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS)
- glfwSetWindowShouldClose(window, GL_TRUE);
- }
- // Initialize and return a window with GLFW
- GLFWwindow *initGLWindow(int width, int height, int samples, const char *title, GLFWkeyfun keycb)
- {
- if (!glfwInit())
- {
- fprintf(stderr, "Failed to initialize GLFW\n");
- return NULL;
- }
- glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
- glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
- glfwWindowHint(GLFW_SAMPLES, samples);
- glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
- GLFWwindow *w = glfwCreateWindow(width, height, title, NULL, NULL);
- if (!w)
- {
- glfwTerminate();
- return NULL;
- }
- glfwMakeContextCurrent(w);
- glfwSetKeyCallback(w, keycb);
- glewExperimental = true;
- if (glewInit() != GLEW_OK)
- {
- fprintf(stderr, "Failed to initialize GLEW\n");
- return NULL;
- }
- return w;
- }
- int main()
- {
- // Initialize the OpenGL window
- GLFWwindow *window = initGLWindow(1024, 768, 2, "Schnuff", key_callback);
- // Load and use the shaders
- GLuint programID = LoadShaders(vertexSource, fragmentSource);
- glUseProgram(programID);
- // Get the attribute locations
- GLuint posAttrib = glGetAttribLocation(programID, "position");
- printf("posAttrib = %d\n", posAttrib);
- GLuint colAttrib = glGetAttribLocation(programID, "color");
- printf("colAttrib = %d\n", colAttrib);
- //GLint normAttrib = glGetAttribLocation(programID, "normal");
- //printf("normAttrib = %d\n", normAttrib);
- GLuint mvpID = glGetUniformLocation(programID, "MVP");
- // Vertex array object
- GLuint vao;
- glGenVertexArrays(1, &vao);
- glBindVertexArray(vao);
- // Vertex buffer object
- GLuint vbo;
- glGenBuffers(1, &vbo);
- glBindBuffer(GL_ARRAY_BUFFER, vbo);
- glBufferData(GL_ARRAY_BUFFER, sizeof(reticle_vertices), reticle_vertices, GL_STATIC_DRAW);
- glEnableVertexAttribArray(posAttrib);
- glVertexAttribPointer(posAttrib, 3, GL_FLOAT, GL_FALSE, 0, (void*)0);
- // Hide the cursor
- glfwSetInputMode(window, GLFW_CURSOR, GLFW_CURSOR_HIDDEN);
- glEnable(GL_DEPTH_TEST);
- glDepthFunc(GL_LESS);
- glEnable(GL_CULL_FACE);
- glClearColor(0.0f, 0.0f, 0.2f, 1.0f);
- glm::mat4 m = glm::mat4(1.0f);
- // Main loop
- do
- {
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
- glUniformMatrix4fv(mvpID, 1, GL_FALSE, &m[0][0]);
- glVertexAttrib3f(colAttrib, 1.0f, 0.0f, 0.0f);
- glDrawArrays(GL_TRIANGLES, 0, 3);
- glfwSwapBuffers(window);
- glfwPollEvents();
- }
- while (!glfwWindowShouldClose(window));
- glDeleteProgram(programID);
- glfwDestroyWindow(window);
- glfwTerminate();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment