charcoal/OpenGLEngine/TextureFactory.h
elipzer b7456401e0 Almost able to render the image
Added image scene to render an image in a scene. There is also now
a testing image that is an uber meme. Currently the problem is
that the spritebatch cannot use the offsetof macro because it is a
templated class. Possible solutions to this are changing it to be
specifyable or implemented per vertex type as the other batches
have been.
2018-10-09 11:42:17 -04:00

59 lines
1.4 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;
};
std::vector<Texture> TextureFactory::m_textures;
std::vector<Sampler> TextureFactory::m_samplers;
}