From de76f7182a87d5f77647d480437e8af588c8aa7e Mon Sep 17 00:00:00 2001 From: Anakin Date: Mon, 7 Nov 2016 16:00:57 +0100 Subject: [PATCH] still trying to fix the problem --- MshViewer/Source/OpenGlController.cpp | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/MshViewer/Source/OpenGlController.cpp b/MshViewer/Source/OpenGlController.cpp index 393f8bc..b93797e 100644 --- a/MshViewer/Source/OpenGlController.cpp +++ b/MshViewer/Source/OpenGlController.cpp @@ -113,9 +113,6 @@ void OpenGLController::processInit() glVertexAttribDivisor(4, 1); glVertexAttribDivisor(5, 1); - // set buffer size - glBufferData(GL_ARRAY_BUFFER, MAX_MODEL_COUNT * sizeof(glm::mat4), NULL, GL_STREAM_DRAW); - // get the painter ready try { @@ -382,14 +379,26 @@ void OpenGLController::loadMsh(const char * path) tempBufferData.data(), GL_STATIC_DRAW ); + glBindBuffer(GL_ARRAY_BUFFER, 0); - //TODO: limit to max model count + // set instance buffer data std::vector tempMVPs; for (int i = 0; i < vModels.size(); i++) tempMVPs.push_back(getMVPMatrix(i)); - glBindBuffer(GL_UNIFORM_BUFFER, gluiInstanceBufferID); - glBufferSubData(GL_UNIFORM_BUFFER, sizeof(glm::mat4) * vModels.size(), NULL, tempMVPs.data()); - glBindBuffer(GL_UNIFORM_BUFFER, 0); + glBindBuffer(GL_ARRAY_BUFFER, gluiInstanceBufferID); + glBufferData( + GL_ARRAY_BUFFER, + vModels.size() > MAX_MODEL_COUNT? MAX_MODEL_COUNT * sizeof(glm::mat4) : vModels.size() * sizeof(glm::mat4), + tempMVPs.data(), + GL_STREAM_DRAW + ); + glBindBuffer(GL_ARRAY_BUFFER, 0); + + + + //glBindBuffer(GL_UNIFORM_BUFFER, gluiInstanceBufferID); + //glBufferSubData(GL_UNIFORM_BUFFER, sizeof(glm::mat4) * vModels.size(), NULL, tempMVPs.data()); + //glBindBuffer(GL_UNIFORM_BUFFER, 0); }