Removing unused texture loading routines from GL context

This commit is contained in:
Dan Paulat 2022-10-06 00:40:36 -05:00
parent 0fa6ef01f0
commit 507b2c4f59
2 changed files with 2 additions and 109 deletions

View file

@ -1,17 +1,8 @@
#include <scwx/qt/gl/gl_context.hpp>
#include <scwx/qt/util/streams.hpp>
#include <scwx/qt/util/texture_atlas.hpp>
#include <scwx/util/hash.hpp>
#include <scwx/util/logger.hpp>
#pragma warning(push, 0)
#pragma warning(disable : 4714)
#include <boost/gil.hpp>
#include <boost/gil/extension/io/png.hpp>
#include <boost/iostreams/stream.hpp>
#include <QFile>
#pragma warning(pop)
namespace scwx
{
namespace qt
@ -20,7 +11,6 @@ namespace gl
{
static const std::string logPrefix_ = "scwx::qt::gl::gl_context";
static const auto logger_ = scwx::util::Logger::Create(logPrefix_);
class GlContext::Impl
{
@ -29,15 +19,12 @@ public:
gl_ {},
shaderProgramMap_ {},
shaderProgramMutex_ {},
textureMap_ {},
textureAtlas_ {GL_INVALID_INDEX},
textureMutex_ {}
{
}
~Impl() {}
GLuint CreateTexture(const std::string& texturePath);
gl::OpenGLFunctions gl_;
std::unordered_map<std::pair<std::string, std::string>,
@ -46,9 +33,8 @@ public:
shaderProgramMap_;
std::mutex shaderProgramMutex_;
std::unordered_map<std::string, GLuint> textureMap_;
GLuint textureAtlas_;
std::mutex textureMutex_;
GLuint textureAtlas_;
std::mutex textureMutex_;
};
GlContext::GlContext() : p(std::make_unique<Impl>()) {}
@ -99,98 +85,6 @@ GLuint GlContext::GetTextureAtlas()
return p->textureAtlas_;
}
GLuint GlContext::GetTexture(const std::string& texturePath)
{
GLuint texture = GL_INVALID_INDEX;
std::unique_lock lock(p->textureMutex_);
auto it = p->textureMap_.find(texturePath);
if (it == p->textureMap_.end())
{
texture = p->CreateTexture(texturePath);
p->textureMap_[texturePath] = texture;
}
else
{
texture = it->second;
}
return texture;
}
// TODO: Move to dedicated file
GLuint GlContext::Impl::CreateTexture(const std::string& texturePath)
{
logger_->warn("Create Texture: {}", texturePath);
GLuint texture;
QFile textureFile(texturePath.c_str());
textureFile.open(QIODevice::ReadOnly);
if (!textureFile.isOpen())
{
logger_->error("Could not load texture: {}", texturePath);
return GL_INVALID_INDEX;
}
boost::iostreams::stream<util::IoDeviceSource> dataStream(textureFile);
boost::gil::rgba8_image_t image;
try
{
boost::gil::read_and_convert_image(
dataStream, image, boost::gil::png_tag());
}
catch (const std::exception& ex)
{
logger_->error("Error reading texture: {}", ex.what());
return GL_INVALID_INDEX;
}
boost::gil::rgba8_view_t view = boost::gil::view(image);
std::vector<boost::gil::rgba8_pixel_t> pixelData(view.width() *
view.height());
boost::gil::copy_pixels(
view,
boost::gil::interleaved_view(view.width(),
view.height(),
pixelData.data(),
view.width() *
sizeof(boost::gil::rgba8_pixel_t)));
OpenGLFunctions& gl = gl_;
gl.glGenTextures(1, &texture);
gl.glBindTexture(GL_TEXTURE_2D, texture);
// TODO: Change to GL_REPEAT once a texture atlas is used
gl.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
gl.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
gl.glTexParameteri(
GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
gl.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
gl.glTexImage2D(GL_TEXTURE_2D,
0,
GL_RGBA,
view.width(),
view.height(),
0,
GL_RGBA,
GL_UNSIGNED_BYTE,
pixelData.data());
gl.glGenerateMipmap(GL_TEXTURE_2D);
return texture;
}
} // namespace gl
} // namespace qt
} // namespace scwx

View file

@ -29,7 +29,6 @@ public:
const std::string& fragmentPath);
GLuint GetTextureAtlas();
GLuint GetTexture(const std::string& texturePath);
private:
class Impl;