Guest User

Untitled

a guest
Jan 18th, 2018
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.27 KB | None | 0 0
  1. // like prev color picker hotkeys are same,
  2. #include <iostream>
  3. #include <glad\glad.h>
  4. #include <GLFW\glfw3.h>
  5. const char *vertexShader_source =
  6. "#version 330 core\n"
  7. "layout(location = 0) in vec3 aPos;\n"
  8. "void main()\n"
  9. "{\n"
  10. " gl_Position = vec4(aPos.x, aPos.y, aPos.z, 1.0);\n"
  11. "}\0";
  12. const char *fragmentShader_source =
  13. "#version 330 core\n"
  14. "out vec4 FragColor;\n"
  15. "uniform vec4 ourColor; "
  16. "void main()\n"
  17. "{\n"
  18. " FragColor = ourColor;\n"
  19. "}\0";
  20. /* -- [ Varribles ] -- */
  21.  
  22. float red = 0.0f, green = 0.0f, blue = 0.0f;
  23. bool pressedOnce = false;
  24.  
  25. void Resizer(GLFWwindow* window, int width, int height)
  26. {
  27. glViewport(0, 0, width, height);
  28. }
  29. void GLAD_Check()
  30. {
  31. if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
  32. std::cout << "Failed to initialize GLAD" << std::endl;
  33. }
  34. void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods)
  35. {
  36. if (glfwGetKey(window, GLFW_KEY_ENTER) == GLFW_PRESS)
  37. pressedOnce = true;
  38. if (pressedOnce == true && glfwGetKey(window, GLFW_KEY_ENTER) == GLFW_RELEASE)
  39. glfwSetWindowShouldClose(window, true);
  40.  
  41. if (glfwGetKey(window, GLFW_KEY_Q) == GLFW_PRESS && red < 255)
  42. red++;
  43. if (glfwGetKey(window, GLFW_KEY_A) == GLFW_PRESS && red > 0)
  44. red--;
  45. if (glfwGetKey(window, GLFW_KEY_W) == GLFW_PRESS && green < 255)
  46. green++;
  47. if (glfwGetKey(window, GLFW_KEY_S) == GLFW_PRESS && green > 0)
  48. green--;
  49. if (glfwGetKey(window, GLFW_KEY_E) == GLFW_PRESS && blue < 255)
  50. blue++;
  51. if (glfwGetKey(window, GLFW_KEY_D) == GLFW_PRESS && blue > 0)
  52. blue--;
  53.  
  54. std::cout << "rgb(" << red << ',' << green << ',' << blue << ")\n";
  55. }
  56.  
  57. int main()
  58. {
  59. /* --- [ SETUP ] --- */
  60. glfwInit();
  61. glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
  62. glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
  63. glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
  64. GLFWwindow *myWindow = glfwCreateWindow(800, 600, "I'm learning OpenGL", NULL, NULL); // creating a window
  65. glfwMakeContextCurrent(myWindow);
  66. GLAD_Check();
  67. glViewport(0, 0, 800, 600);
  68. glfwSetFramebufferSizeCallback(myWindow, Resizer);
  69. /* --- [ SETUP ] --- */
  70. float vertcies[] = // vertcies
  71. {
  72. 0.0f, 0.2f, 1.0f, //bottom
  73. -0.2f, 0.8, 1.0f, //top left
  74. 0.2f, 0.8f, 1.0f, //top right
  75.  
  76. -0.3f, 0.2f, 1.0f, //bottom
  77. -0.8f, 0.6, 1.0f, //top left
  78. -0.4f, 0.8f, 1.0f, //top right
  79.  
  80.  
  81. 0.3f, 0.2f, 1.0f, //bottom
  82. 0.8f, 0.6, 1.0f, //top left
  83. 0.4f, 0.8f, 1.0f, //top right
  84.  
  85. 0.0f, -0.1, 1.0f, //top
  86. -0.4f, -0.8, 1.0f, //bottom left
  87. 0.4f, -0.8, 1.0f //bottom right
  88. };
  89. /* === [ VBO & VAO ] === */
  90. unsigned int VBO;
  91. glGenBuffers(1, &VBO);
  92. glBindBuffer(GL_ARRAY_BUFFER, VBO);
  93. glBufferData(GL_ARRAY_BUFFER, sizeof(vertcies), vertcies, GL_STATIC_DRAW);
  94. glCompileShader(VBO);
  95. unsigned int VAO;
  96. glGenVertexArrays(1, &VAO);
  97. glBindVertexArray(VBO);
  98. glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), (void*)0);
  99. glEnableVertexAttribArray(0);
  100. /* === [ VBO & VAO ] === */
  101.  
  102. /* ===== [ vertex_shader & fragment_shader ] ===== */
  103. unsigned int vertexShader = glCreateShader(GL_VERTEX_SHADER);
  104. glShaderSource(vertexShader, 1, &vertexShader_source, NULL);
  105. glCompileShader(vertexShader);
  106.  
  107. unsigned int fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
  108. glShaderSource(fragmentShader, 1, &fragmentShader_source, NULL);
  109. glCompileShader(fragmentShader);
  110. /* ===== [ vertex_shader & fragment_shader ] ===== */
  111.  
  112. /* -- [ shader_program ] -- */
  113. unsigned int shaderProgram = glCreateProgram();
  114. glAttachShader(shaderProgram, vertexShader);
  115. glAttachShader(shaderProgram, fragmentShader);
  116. glLinkProgram(shaderProgram);
  117. glUseProgram(shaderProgram);
  118. int vertexColorLocation = glGetUniformLocation(shaderProgram, "ourColor");
  119.  
  120. while (!glfwWindowShouldClose(myWindow))
  121. {
  122. /* --[ INPUT ]-- */
  123. glfwSetKeyCallback(myWindow, key_callback);
  124.  
  125. glClearColor(0.2, 0.3, 0.4, 1.0f);
  126. glClear(GL_COLOR_BUFFER_BIT);
  127.  
  128. glUniform4f(vertexColorLocation, 0, green / 255, 0, 1.0f);
  129. glDrawArrays(GL_TRIANGLES, 0, 3);
  130. glUniform4f(vertexColorLocation, red / 255, 0, 0, 1.0f);
  131. glDrawArrays(GL_TRIANGLES, 3, 3);
  132. glUniform4f(vertexColorLocation, 0, 0, blue / 255, 1.0f);
  133. glDrawArrays(GL_TRIANGLES, 6, 3);
  134. glUniform4f(vertexColorLocation, red / 255, green / 255, blue / 255, 1.0f);
  135. glDrawArrays(GL_TRIANGLES, 9, 3);
  136.  
  137. glfwPollEvents();
  138. glfwSwapBuffers(myWindow);
  139. }
  140. glfwTerminate();
  141. return 0;
  142. }
Add Comment
Please, Sign In to add comment