Advertisement
Guest User

Minimal C++ OpenGL Example

a guest
Jul 10th, 2016
429
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.11 KB | None | 0 0
  1. #include <GL/glew.h>
  2. #include <GLFW/glfw3.h>
  3.  
  4. #include <stdexcept>
  5.  
  6. GLFWwindow* gWindow = NULL;
  7.  
  8. GLint gProgram = 0;
  9.  
  10. GLuint gVertexShader = 0;
  11. GLuint gFragmentShader = 0;
  12.  
  13. GLuint gVAO = 0;
  14. GLuint gVBO = 0;
  15.  
  16. int main() {
  17.     /** Initialise GLFW **/
  18.     glfwInit();
  19.     glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
  20.     glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_COMPAT_PROFILE);
  21.     glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
  22.     glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 2);
  23.     glfwWindowHint(GLFW_RESIZABLE, GL_FALSE);
  24.     gWindow = glfwCreateWindow(800, 600, "OpenGL 3.2", NULL, NULL);
  25.     glfwMakeContextCurrent(gWindow);
  26.  
  27.     /** Initialise GLEW **/
  28.     glewInit();
  29.  
  30.     /** Set up shaders **/
  31.     gVertexShader = glCreateShader(GL_VERTEX_SHADER);
  32.     gFragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
  33.  
  34.     const char* vertexShaderStrings = R"(
  35.        #version 150
  36.        in vec3 vertexPos;
  37.        in vec3 vertexColour;
  38.        out vec3 colour;
  39.        void main() {
  40.            colour = vertexColour;
  41.            gl_Position = vec4(vertexPos, 1);
  42.        })";
  43.     const char* fragmentShaderStrings = R"(
  44.        #version 150
  45.        in vec3 colour;
  46.        out vec4 fragColour;
  47.        void main() {
  48.            fragColour = vec4(colour,1);
  49.        })";
  50.     glShaderSource(gVertexShader, 1, (const GLchar**)&vertexShaderStrings, NULL);
  51.     glShaderSource(gFragmentShader, 1, (const GLchar**)&fragmentShaderStrings, NULL);
  52.  
  53.     glCompileShader(gVertexShader);
  54.     glCompileShader(gFragmentShader);
  55.  
  56.     /** Set up program **/
  57.     gProgram = glCreateProgram();
  58.  
  59.     glAttachShader(gProgram, gVertexShader);
  60.     glAttachShader(gProgram, gFragmentShader);
  61.  
  62.     glLinkProgram(gProgram);
  63.     glUseProgram(gProgram);
  64.  
  65.     glDetachShader(gProgram, gVertexShader);
  66.     glDetachShader(gProgram, gFragmentShader);
  67.  
  68.     glDeleteShader(gVertexShader);
  69.     glDeleteShader(gFragmentShader);
  70.  
  71.  
  72.     /** Set up VAO and VBO **/
  73.     GLfloat vertexData[] = {
  74.         //  X,    Y,    Z,    R,    G,    B,
  75.          0.0f, 0.8f, 0.0f, 1.0f, 0.0f, 0.0f,
  76.         -0.8f,-0.8f, 0.0f, 0.0f, 1.0f, 0.0f,
  77.          0.8f,-0.8f, 0.0f, 0.0f, 0.0f, 1.0f,
  78.     };
  79.  
  80.     glGenVertexArrays(1, &gVAO);
  81.     glBindVertexArray(gVAO);
  82.  
  83.     glGenBuffers(1, &gVBO);
  84.     glBindBuffer(GL_ARRAY_BUFFER, gVBO);
  85.     glBufferData(GL_ARRAY_BUFFER, sizeof(vertexData), vertexData, GL_STATIC_DRAW);
  86.  
  87.     GLuint vertexPos = glGetAttribLocation(gProgram, "vertexPos");
  88.     glEnableVertexAttribArray(vertexPos);
  89.     glVertexAttribPointer(vertexPos, 3, GL_FLOAT, GL_FALSE, 6*sizeof(GL_FLOAT), NULL);
  90.  
  91.     GLuint vertexColour = glGetAttribLocation(gProgram, "vertexColour");
  92.     glEnableVertexAttribArray(vertexColour);
  93.     glVertexAttribPointer(vertexColour, 3, GL_FLOAT, GL_FALSE, 6*sizeof(GL_FLOAT), (const void*)(3*sizeof(GL_FLOAT)));
  94.  
  95.     /** Main Loop **/
  96.     while (!glfwWindowShouldClose(gWindow)) {
  97.         glfwPollEvents();
  98.  
  99.         glClearColor(0, 0, 0, 1);
  100.         glClear(GL_COLOR_BUFFER_BIT);
  101.  
  102.         glDrawArrays(GL_TRIANGLES, 0, 3);
  103.         glfwSwapBuffers(gWindow);
  104.     }
  105.  
  106.     return 0;
  107. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement