diff --git a/src/main.c b/src/main.c index 333d503..38bf7b6 100644 --- a/src/main.c +++ b/src/main.c @@ -8,13 +8,10 @@ #include "Input.h" - float pos[3] = {0.0f, 0.0f, 0.0f}; int main(int argc, char *argv[]) { - GLFWwindow* window; - window = initOpenGL(); - + GLFWwindow* window = initOpenGL(); glfwSetKeyCallback(window, &key_pressed); const float triangle[] = { @@ -36,10 +33,7 @@ int main(int argc, char *argv[]) { }; // CreateShader - char* vertex1 = "assets/shaders/vertex4.glsl\0"; - char* fragment1 = "assets/shaders/fragment4.glsl\0"; - unsigned int shader1; - shader1 = createShader(vertex1, fragment1); + unsigned int shader1 = createShader("assets/shaders/vertex4.glsl\0", "assets/shaders/fragment4.glsl\0"); // Initialise VBO and VAO unsigned int VAO, VBO, EBO; @@ -49,7 +43,7 @@ int main(int argc, char *argv[]) { glBindVertexArray(VAO); glBindBuffer(GL_ARRAY_BUFFER, VBO); - glBufferData(GL_ARRAY_BUFFER, sizeof(square), NULL, GL_STATIC_DRAW); + glBufferData(GL_ARRAY_BUFFER, sizeof(square), NULL, GL_DYNAMIC_DRAW); glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 8 * sizeof(float), (void*)0 ); glEnableVertexAttribArray(0); @@ -60,19 +54,36 @@ int main(int argc, char *argv[]) { glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO); glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_DYNAMIC_DRAW); + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); float *buffer = glMapBuffer(GL_ARRAY_BUFFER, GL_READ_WRITE); - memcpy(buffer, triangle, sizeof(triangle)); + memcpy(buffer, square, sizeof(square)); glUnmapBuffer(GL_ARRAY_BUFFER); + + + unsigned int VAO1, VBO1; + glGenVertexArrays(1, &VAO1); + glGenBuffers(1, &VBO1); + + glBindVertexArray(VAO1); + glBindBuffer(GL_ARRAY_BUFFER, VBO1); + glBufferData(GL_ARRAY_BUFFER, sizeof(square), square, GL_DYNAMIC_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); + // Create Texture - unsigned int texture; - texture = createTexture("assets/textures/wall.jpg"); + unsigned int 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)) { @@ -80,40 +91,47 @@ int main(int argc, char *argv[]) { dt = time - prev_time; prev_time = time; -// printf("dt: %f \n",dt*1000); + //printf("dt: %f", dt); + glBindVertexArray(VAO); + glBindBuffer(GL_ARRAY_BUFFER, VBO); timer += dt; if(timer>= 1.5f){ timer=0; buffer = glMapBuffer(GL_ARRAY_BUFFER, GL_READ_WRITE); if (toogle){ + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); memcpy(buffer, triangle,sizeof(triangle)); - buffer[16]=0.5f; } else { + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO); 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); + glClearColor(0.0f, 0.0f, 0.0f, 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){ + glBindVertexArray(VAO); + if(!toogle){ glDrawArrays(GL_TRIANGLES, 0, 3); } else { - glDrawElements(GL_TRIANGLES, 6,GL_UNSIGNED_INT, 0); + glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0); } + + glBindVertexArray(VAO1); + glBindBuffer(GL_ARRAY_BUFFER, VBO1); + mat4x4_translate(transform, 0, 0, 0); + glUniformMatrix4fv(transformLoc, 1, GL_FALSE, *transform); + glDrawArrays(GL_POINTS, 0, 4); glfwSwapBuffers(window); glfwPollEvents();