diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/render/modernopenglgraphics.cpp | 32 | ||||
-rw-r--r-- | src/render/modernopenglgraphics.h | 4 |
2 files changed, 34 insertions, 2 deletions
diff --git a/src/render/modernopenglgraphics.cpp b/src/render/modernopenglgraphics.cpp index de3bba76a..a166f64b9 100644 --- a/src/render/modernopenglgraphics.cpp +++ b/src/render/modernopenglgraphics.cpp @@ -97,7 +97,9 @@ ModernOpenGLGraphics::ModernOpenGLGraphics() : mDrawTypeUniform(0U), mVao(0U), mVbo(0U), + mEbo(0U), mVboCached(0U), + mEboCached(0U), mAttributesCached(0U), mColorAlpha(false), mTextureDraw(false), @@ -118,9 +120,14 @@ ModernOpenGLGraphics::~ModernOpenGLGraphics() mProgram->decRef(); if (mVbo) { -// logger->log("delete buffer: %u", mVbo); +// logger->log("delete buffer vbo: %u", mVbo); mglDeleteBuffers(1, &mVbo); } + if (mEbo) + { +// logger->log("delete buffer ebo: %u", mEbo); + mglDeleteBuffers(1, &mEbo); + } if (mVao) mglDeleteVertexArrays(1, &mVao); } @@ -147,8 +154,11 @@ void ModernOpenGLGraphics::postInit() mglGenVertexArrays(1, &mVao); mglBindVertexArray(mVao); mglGenBuffers(1, &mVbo); - //logger->log("gen buffer: %u", mVbo); + //logger->log("gen vbo buffer: %u", mVbo); bindArrayBuffer(mVbo); + mglGenBuffers(1, &mEbo); + //logger->log("gen ebo buffer: %u", mEbo); + bindElementBuffer(mEbo); logger->log("Compiling shaders"); mProgram = shaders.getSimpleProgram(); @@ -338,12 +348,16 @@ void ModernOpenGLGraphics::testDraw() }; //logger->log("allocate: %d, %ld", mVboCached, sizeof(vertices)); + //logger->log("allocate ebo: %d, %ld", mEboCached, sizeof(elements)); mglBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STREAM_DRAW); +// mglBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(elements), +// elements, GL_STREAM_DRAW); #ifdef DEBUG_DRAW_CALLS mDrawCalls ++; #endif glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); +// glDrawElements(GL_TRIANGLE_STRIP, 4, GL_UNSIGNED_INT, 0); } void ModernOpenGLGraphics::drawImageCached(const Image *const image A_UNUSED, @@ -1148,6 +1162,20 @@ void ModernOpenGLGraphics::bindArrayBuffer(const GLuint vbo) } } +void ModernOpenGLGraphics::bindElementBuffer(const GLuint ebo) +{ + if (mEboCached != ebo) + { + mEboCached = ebo; + logger->log("bind element: %u", ebo); + mglBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ebo); +/* + if (mglIsBuffer(ebo) != GL_TRUE) + logger->log("bind wrong buffer: %u", vbo); +*/ + } +} + void ModernOpenGLGraphics::bindArrayBufferAndAttributes(const GLuint vbo) { if (mVboCached != vbo) diff --git a/src/render/modernopenglgraphics.h b/src/render/modernopenglgraphics.h index b5f7fdd3a..28a7f8bbb 100644 --- a/src/render/modernopenglgraphics.h +++ b/src/render/modernopenglgraphics.h @@ -107,6 +107,8 @@ class ModernOpenGLGraphics final : public Graphics inline void bindAttributes(); + inline void bindElementBuffer(const GLuint ebo); + GLint *mIntArray; GLint *mIntArrayCached; ShaderProgram *mProgram; @@ -123,7 +125,9 @@ class ModernOpenGLGraphics final : public Graphics GLuint mDrawTypeUniform; GLuint mVao; GLuint mVbo; + GLuint mEbo; GLuint mVboCached; + GLuint mEboCached; GLuint mAttributesCached; bool mColorAlpha; bool mTextureDraw; |