#include #include #include #include #include #include "Renderer.h" #include "Input.h" float pos[3] = {0.0f, 0.0f, 0.0f}; int main(int argc, char *argv[]) { GLFWwindow* window; window = initOpenGL(); glfwSetKeyCallback(window, &key_pressed); const float triangle[] = { //pos // ColorIndecies //Texture coordnites -0.5f, -0.5f, 0.0f, 1.0f, 1.0f, 1.0f, 0.0f, 0.0f, 0.5f, -0.5f, 0.0f, 1.0f, 1.0f, 1.0f, 1.0f, 0.0f, 0.0f, 0.5f, 0.0f, 1.0f, 1.0f, 1.0f, 0.5f, 1.0f }; const float square[] = { -0.5f, -0.5f, 0.0f, 1.0f, 1.0f, 1.0f, 0.0f, 0.0f, 0.5f, -0.5f, 0.0f, 1.0f, 1.0f, 1.0f, 1.0f, 0.0f, 0.5f, 0.5f, 0.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, -0.5f, 0.5f, 0.0f, 1.0f, 1.0f, 1.0f, 0.0f, 1.0f, }; const unsigned int indices[] = { 0, 1 ,2, 0, 2, 3 }; // CreateShader char* vertex1 = "assets/shaders/vertex4.glsl\0"; char* fragment1 = "assets/shaders/fragment4.glsl\0"; unsigned int shader1; shader1 = createShader(vertex1, fragment1); // Initialise VBO and VAO unsigned int VAO, VBO, EBO; glGenVertexArrays(1, &VAO); glGenBuffers(1, &VBO); glGenBuffers(1, &EBO); glBindVertexArray(VAO); glBindBuffer(GL_ARRAY_BUFFER, VBO); glBufferData(GL_ARRAY_BUFFER, sizeof(square), NULL, GL_STATIC_DRAW); glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 8 * sizeof(float), (void*)0 ); glEnableVertexAttribArray(0); glVertexAttribPointer(1, 3,GL_FLOAT, GL_FALSE, 8 * sizeof(float), (void*)(3*sizeof(float))); glEnableVertexAttribArray(1); glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, 8 * sizeof(float), (void*)(6 * sizeof(float))); glEnableVertexAttribArray(2); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO); glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_DYNAMIC_DRAW); float *buffer = glMapBuffer(GL_ARRAY_BUFFER, GL_READ_WRITE); memcpy(buffer, triangle, sizeof(triangle)); glUnmapBuffer(GL_ARRAY_BUFFER); // Create Texture unsigned int texture; texture = createTexture("assets/textures/wall.jpg"); unsigned int transformLoc = glGetUniformLocation(shader1, "transform"); mat4x4 transform; mat4x4_identity(transform); bool toogle=false; float prev_time=0, dt=0, timer=0, time=0; while(!glfwWindowShouldClose(window)) { time = glfwGetTime(); dt = time - prev_time; prev_time = time; // printf("dt: %f \n",dt*1000); timer += dt; if(timer>= 1.5f){ timer=0; buffer = glMapBuffer(GL_ARRAY_BUFFER, GL_READ_WRITE); if (toogle){ memcpy(buffer, triangle,sizeof(triangle)); buffer[16]=0.5f; } else { memcpy(buffer, square, sizeof(square)); buffer[16]=0.0f; } printf("%f ", buffer[16]); glUnmapBuffer(GL_ARRAY_BUFFER); toogle = !toogle; } glClearColor(0.6f, 0.0f, 0.7f, 0.0f); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glUseProgram(shader1); glBindTexture(GL_TEXTURE_2D, texture); glBindVertexArray(VAO); mat4x4_translate(transform, pos[0], pos[1], pos[2]); glUniformMatrix4fv(transformLoc, 1, GL_FALSE, *transform); if(toogle){ glDrawArrays(GL_TRIANGLES, 0, 3); } else { glDrawElements(GL_TRIANGLES, 6,GL_UNSIGNED_INT, 0); } glfwSwapBuffers(window); glfwPollEvents(); processInput(); } glDeleteVertexArrays(1, &VAO); glDeleteBuffers(1, &VBO); glfwTerminate(); return 0; }