Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // like prev color picker hotkeys are same,
- #include <iostream>
- #include <glad\glad.h>
- #include <GLFW\glfw3.h>
- const char *vertexShader_source =
- "#version 330 core\n"
- "layout(location = 0) in vec3 aPos;\n"
- "void main()\n"
- "{\n"
- " gl_Position = vec4(aPos.x, aPos.y, aPos.z, 1.0);\n"
- "}\0";
- const char *fragmentShader_source =
- "#version 330 core\n"
- "out vec4 FragColor;\n"
- "uniform vec4 ourColor; "
- "void main()\n"
- "{\n"
- " FragColor = ourColor;\n"
- "}\0";
- /* -- [ Varribles ] -- */
- float red = 0.0f, green = 0.0f, blue = 0.0f;
- bool pressedOnce = false;
- void Resizer(GLFWwindow* window, int width, int height)
- {
- glViewport(0, 0, width, height);
- }
- void GLAD_Check()
- {
- if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
- std::cout << "Failed to initialize GLAD" << std::endl;
- }
- void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods)
- {
- if (glfwGetKey(window, GLFW_KEY_ENTER) == GLFW_PRESS)
- pressedOnce = true;
- if (pressedOnce == true && glfwGetKey(window, GLFW_KEY_ENTER) == GLFW_RELEASE)
- glfwSetWindowShouldClose(window, true);
- if (glfwGetKey(window, GLFW_KEY_Q) == GLFW_PRESS && red < 255)
- red++;
- if (glfwGetKey(window, GLFW_KEY_A) == GLFW_PRESS && red > 0)
- red--;
- if (glfwGetKey(window, GLFW_KEY_W) == GLFW_PRESS && green < 255)
- green++;
- if (glfwGetKey(window, GLFW_KEY_S) == GLFW_PRESS && green > 0)
- green--;
- if (glfwGetKey(window, GLFW_KEY_E) == GLFW_PRESS && blue < 255)
- blue++;
- if (glfwGetKey(window, GLFW_KEY_D) == GLFW_PRESS && blue > 0)
- blue--;
- std::cout << "rgb(" << red << ',' << green << ',' << blue << ")\n";
- }
- int main()
- {
- /* --- [ SETUP ] --- */
- glfwInit();
- glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
- glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
- glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
- GLFWwindow *myWindow = glfwCreateWindow(800, 600, "I'm learning OpenGL", NULL, NULL); // creating a window
- glfwMakeContextCurrent(myWindow);
- GLAD_Check();
- glViewport(0, 0, 800, 600);
- glfwSetFramebufferSizeCallback(myWindow, Resizer);
- /* --- [ SETUP ] --- */
- float vertcies[] = // vertcies
- {
- 0.0f, 0.2f, 1.0f, //bottom
- -0.2f, 0.8, 1.0f, //top left
- 0.2f, 0.8f, 1.0f, //top right
- -0.3f, 0.2f, 1.0f, //bottom
- -0.8f, 0.6, 1.0f, //top left
- -0.4f, 0.8f, 1.0f, //top right
- 0.3f, 0.2f, 1.0f, //bottom
- 0.8f, 0.6, 1.0f, //top left
- 0.4f, 0.8f, 1.0f, //top right
- 0.0f, -0.1, 1.0f, //top
- -0.4f, -0.8, 1.0f, //bottom left
- 0.4f, -0.8, 1.0f //bottom right
- };
- /* === [ VBO & VAO ] === */
- unsigned int VBO;
- glGenBuffers(1, &VBO);
- glBindBuffer(GL_ARRAY_BUFFER, VBO);
- glBufferData(GL_ARRAY_BUFFER, sizeof(vertcies), vertcies, GL_STATIC_DRAW);
- glCompileShader(VBO);
- unsigned int VAO;
- glGenVertexArrays(1, &VAO);
- glBindVertexArray(VBO);
- glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), (void*)0);
- glEnableVertexAttribArray(0);
- /* === [ VBO & VAO ] === */
- /* ===== [ vertex_shader & fragment_shader ] ===== */
- unsigned int vertexShader = glCreateShader(GL_VERTEX_SHADER);
- glShaderSource(vertexShader, 1, &vertexShader_source, NULL);
- glCompileShader(vertexShader);
- unsigned int fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
- glShaderSource(fragmentShader, 1, &fragmentShader_source, NULL);
- glCompileShader(fragmentShader);
- /* ===== [ vertex_shader & fragment_shader ] ===== */
- /* -- [ shader_program ] -- */
- unsigned int shaderProgram = glCreateProgram();
- glAttachShader(shaderProgram, vertexShader);
- glAttachShader(shaderProgram, fragmentShader);
- glLinkProgram(shaderProgram);
- glUseProgram(shaderProgram);
- int vertexColorLocation = glGetUniformLocation(shaderProgram, "ourColor");
- while (!glfwWindowShouldClose(myWindow))
- {
- /* --[ INPUT ]-- */
- glfwSetKeyCallback(myWindow, key_callback);
- glClearColor(0.2, 0.3, 0.4, 1.0f);
- glClear(GL_COLOR_BUFFER_BIT);
- glUniform4f(vertexColorLocation, 0, green / 255, 0, 1.0f);
- glDrawArrays(GL_TRIANGLES, 0, 3);
- glUniform4f(vertexColorLocation, red / 255, 0, 0, 1.0f);
- glDrawArrays(GL_TRIANGLES, 3, 3);
- glUniform4f(vertexColorLocation, 0, 0, blue / 255, 1.0f);
- glDrawArrays(GL_TRIANGLES, 6, 3);
- glUniform4f(vertexColorLocation, red / 255, green / 255, blue / 255, 1.0f);
- glDrawArrays(GL_TRIANGLES, 9, 3);
- glfwPollEvents();
- glfwSwapBuffers(myWindow);
- }
- glfwTerminate();
- return 0;
- }
Add Comment
Please, Sign In to add comment