From 557033f840bc9e9a1b8a3db7e0ecf9f866632b83 Mon Sep 17 00:00:00 2001 From: MichaelFisher1997 Date: Mon, 6 Jan 2025 20:30:18 +0000 Subject: [PATCH] added a index buffer to draw a triangle without duplications data for the positions of the 2 tringles that make up a squere --- src/sdl.cpp | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/src/sdl.cpp b/src/sdl.cpp index 4ead8be..616f500 100644 --- a/src/sdl.cpp +++ b/src/sdl.cpp @@ -65,20 +65,31 @@ SdlWindow::SdlWindow(const char* title, int width, int height) // 6. Mark as running m_isRunning = true; - float positions[6] = { // vertex for a triangle + float positions[] = { // vertex for a triangle //x,y - -0.5f, -0.5f, - 0.0f, 0.5f, - 0.5f, -0.5f + -0.5f, -0.5f, // 0 + 0.5f, -0.5f, // 1 + 0.5f, 0.5f, //2 + -0.5f, 0.5f // 3 }; + + unsigned int indices[] = { + 0, 1, 2, + 2, 3, 0 + }; //vertex buffer unsigned int buffer; glGenBuffers(1, &buffer); glBindBuffer(GL_ARRAY_BUFFER, buffer); //select buffer called 'buffer' - glBufferData(GL_ARRAY_BUFFER, 6 * sizeof(float), positions, GL_STATIC_DRAW); // assigne buffer size, static as we use many times, but does not change + glBufferData(GL_ARRAY_BUFFER, 6 * 2 * sizeof(float), positions, GL_STATIC_DRAW); // assigne buffer size, static as we use many times, but does not change //vertext attributes / layout glEnableVertexAttribArray(0); glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, sizeof(float) * 2, 0); + //indext beffer + unsigned int ibo; //indext buffer object + glGenBuffers(1, &ibo); + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ibo); //select buffer called 'buffer' + glBufferData(GL_ELEMENT_ARRAY_BUFFER, 6 * sizeof(unsigned int), indices, GL_STATIC_DRAW); // assigne buffer size, static as we use many times, but does not change ShaderProgramSource source = parseShader("res/shaders/Basic.shader"); unsigned int shader = createShader(source.VertexSource, source.FragmentSource); @@ -173,8 +184,7 @@ void SdlWindow::render() { glClear(GL_COLOR_BUFFER_BIT); // TODO: Draw with OpenGL here (shaders, triangles, etc.) - glDrawArrays(GL_TRIANGLES, 0, 3); - + glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, nullptr); // Swap buffers SDL_GL_SwapWindow(m_window); }