From fb371390737dae683b775efbf7d296c37494c31c Mon Sep 17 00:00:00 2001 From: Dan Paulat Date: Thu, 6 Oct 2022 00:32:15 -0500 Subject: [PATCH] Manage texture atlas in GL context --- scwx-qt/source/scwx/qt/gl/gl_context.cpp | 15 +++++++++++++++ scwx-qt/source/scwx/qt/gl/gl_context.hpp | 1 + 2 files changed, 16 insertions(+) diff --git a/scwx-qt/source/scwx/qt/gl/gl_context.cpp b/scwx-qt/source/scwx/qt/gl/gl_context.cpp index 31f65de3..e7657b03 100644 --- a/scwx-qt/source/scwx/qt/gl/gl_context.cpp +++ b/scwx-qt/source/scwx/qt/gl/gl_context.cpp @@ -1,5 +1,6 @@ #include #include +#include #include #include @@ -29,6 +30,7 @@ public: shaderProgramMap_ {}, shaderProgramMutex_ {}, textureMap_ {}, + textureAtlas_ {GL_INVALID_INDEX}, textureMutex_ {} { } @@ -45,6 +47,7 @@ public: std::mutex shaderProgramMutex_; std::unordered_map textureMap_; + GLuint textureAtlas_; std::mutex textureMutex_; }; @@ -84,6 +87,18 @@ GlContext::GetShaderProgram(const std::string& vertexPath, return shaderProgram; } +GLuint GlContext::GetTextureAtlas() +{ + std::unique_lock lock(p->textureMutex_); + + if (p->textureAtlas_ == GL_INVALID_INDEX) + { + p->textureAtlas_ = util::TextureAtlas::Instance().BufferAtlas(p->gl_); + } + + return p->textureAtlas_; +} + GLuint GlContext::GetTexture(const std::string& texturePath) { GLuint texture = GL_INVALID_INDEX; diff --git a/scwx-qt/source/scwx/qt/gl/gl_context.hpp b/scwx-qt/source/scwx/qt/gl/gl_context.hpp index d1fb6645..69802534 100644 --- a/scwx-qt/source/scwx/qt/gl/gl_context.hpp +++ b/scwx-qt/source/scwx/qt/gl/gl_context.hpp @@ -28,6 +28,7 @@ public: GetShaderProgram(const std::string& vertexPath, const std::string& fragmentPath); + GLuint GetTextureAtlas(); GLuint GetTexture(const std::string& texturePath); private: