charcoal/OpenGLEngine/TextureFactory.h
Elipzer 5a9765b111 Image Rendering almost works!
There is an OpenGL error (1282) invalid operation that is getting
caught when switching to the imagescene. This needs to get fixed
and then hopefully the whole thing will work.
2018-10-09 19:58:26 -04:00

56 lines
1.3 KiB
C++

#pragma once
#include <vector>
#include "ImageLoader.h"
#include "Texture.h"
#include "Sampler.h"
namespace charcoal
{
class TextureFactory
{
private:
TextureFactory() {}
virtual ~TextureFactory() {}
public:
template <typename T>
static Texture* gen_texture(
Texture::Format data_format,
Texture::Type data_type,
unsigned long width,
unsigned long height,
const std::vector<T>& data,
Texture::InternalFormat internal_format,
unsigned short mipmap_level = 0,
Texture::Target texture_target = Texture::Target::TEXTURE_2D
)
{
m_textures.emplace_back(data_format, data_type, width, height, data, internal_format, mipmap_level, texture_target);
return &m_textures.back();
}
static Texture* gen_image_texture(const image_loader::ImageRGBA& image)
{
return gen_texture(Texture::Format::RGBA, Texture::Type::UNSIGNED_BYTE, image.width, image.height, image.data, Texture::InternalFormat::RGBA);
}
static Sampler* gen_sampler(
Sampler::Wrap wrap_s,
Sampler::Wrap wrap_t,
Sampler::MagFilter magnification_filter,
Sampler::MinFilter minification_filter
)
{
m_samplers.emplace_back(wrap_s, wrap_t, magnification_filter, minification_filter);
return &m_samplers.back();
}
private:
static std::vector<Texture> m_textures;
static std::vector<Sampler> m_samplers;
};
}