Advertisement
Guest User

glFuckColors

a guest
May 7th, 2016
328
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.23 KB | None | 0 0
  1. #include <GL/glew.h>
  2. #include <GL/gl.h>
  3. #include <GL/freeglut.h>
  4.  
  5. #include <iostream>
  6. #include <vector>
  7. #include <functional>
  8.  
  9. // shaders
  10. GLchar vertShader[] = "#version 330\n"
  11.     "layout(location = 0) in vec4 vPosition;\n"
  12.         "void main() {\n"
  13.         "gl_Position = vPosition;\n"
  14.     "}\n";
  15.  
  16. GLchar fragShader[] = "#version 330\n"
  17.     "out vec4 fColor;\n"
  18.     "void main() {\n"
  19.         "fColor = vec4(1.0, 0.0, 1.0, 1.0);\n"
  20.     "}\n";
  21.  
  22. // vertex array
  23. GLuint vertArray;
  24. GLuint program;
  25.  
  26.  
  27. // display function
  28. void display() {
  29.     glClearColor(0.3f, 0.3f, 0.3f, 1);
  30.     glClear(GL_COLOR_BUFFER_BIT);
  31.  
  32.     glBindVertexArray(vertArray);
  33.     glDrawArrays(GL_TRIANGLES, 0, 3);
  34.  
  35.     glFlush();
  36.     // wait for gl ready
  37.     glFinish();
  38. }
  39.  
  40.  
  41. void compilerLog(GLuint shader) {
  42.     GLint blen = 0;
  43.     GLsizei slen = 0;
  44.  
  45.     glGetShaderiv(shader, GL_INFO_LOG_LENGTH , &blen);
  46.     if (blen > 1)
  47.     {
  48.         GLchar* compiler_log = (GLchar*)malloc(blen);
  49.         glGetInfoLogARB(shader, blen, &slen, compiler_log);
  50.         std::cout << "compiler_log for" << shader << "\n" << compiler_log;
  51.         free (compiler_log);
  52.     }
  53. }
  54.  
  55. // init function
  56. void init() {
  57.     glGenVertexArrays(1, &vertArray);
  58.  
  59.     glBindVertexArray(vertArray);
  60.     GLfloat vertices[3][2] = {
  61.         {0, 1},
  62.         {1, 1},
  63.         {0, 0}
  64.     };
  65.  
  66.     GLuint buffer;
  67.     glGenBuffers(1, &buffer);
  68.     glBindBuffer(GL_ARRAY_BUFFER, buffer);
  69.     glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), &vertices, GL_STATIC_DRAW);
  70.  
  71.     const GLchar *vertShaderChar = vertShader;
  72.     const GLint vertShaderSize = sizeof(vertShader);
  73.     const GLchar *fragShaderChar = fragShader;
  74.     const GLint fragShaderSize = sizeof(fragShader);
  75.  
  76.     GLuint vertexShader = glCreateShader(GL_VERTEX_SHADER);
  77.     GLuint fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
  78.  
  79.     glShaderSource(vertexShader, 1, &vertShaderChar, &vertShaderSize);
  80.     glShaderSource(fragmentShader, 1, &fragShaderChar, &fragShaderSize);
  81.     glCompileShaderARB(vertexShader);
  82.     glCompileShaderARB(fragmentShader);
  83.  
  84.     GLint compiled;
  85.     glGetObjectParameterivARB(vertexShader, GL_COMPILE_STATUS, &compiled);
  86.     if (compiled) {
  87.         std::cout << "Vertex shader compiled" << std::endl;
  88.     }
  89.  
  90.     glGetObjectParameterivARB(fragmentShader, GL_COMPILE_STATUS, &compiled);
  91.     if (compiled) {
  92.         std::cout << "Fragment shader compiled" << std::endl;
  93.     }
  94.  
  95.     compilerLog(vertexShader);
  96.     compilerLog(fragmentShader);
  97.  
  98.     program = glCreateProgram();
  99.     glAttachShader(program, vertexShader);
  100.     glAttachShader(program, fragmentShader);
  101.     glLinkProgram(program);
  102.     glUseProgram(program);
  103.  
  104.     glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, ((void *) 0));
  105.     glEnableVertexAttribArray(vertArray);
  106. }
  107.  
  108.  
  109. // core
  110. int main(int argc, char **argv) {
  111.     glutInit(&argc, argv);
  112.     glutInitDisplayMode(GLUT_RGBA);
  113.     glutInitWindowSize(512, 512);
  114.     glutInitContextVersion(3, 0);
  115.     glutInitContextProfile(GLUT_CORE_PROFILE);
  116.     glutCreateWindow("OpenGL");
  117.  
  118.     if (glewInit()) {
  119.         std::cerr << "Unable to init glew" << std::endl;
  120.         exit(EXIT_FAILURE);
  121.     }
  122.    
  123.     init();
  124.     glutDisplayFunc(display);
  125.  
  126.     glutMainLoop();
  127. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement