2018-09-16 00:43:29 +00:00
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include <vector>
|
|
|
|
|
|
|
|
#include "Texture.h"
|
|
|
|
#include "Sampler.h"
|
|
|
|
|
|
|
|
namespace charcoal
|
|
|
|
{
|
|
|
|
class TextureFactory
|
|
|
|
{
|
|
|
|
private:
|
|
|
|
TextureFactory() {}
|
2018-09-17 00:50:51 +00:00
|
|
|
virtual ~TextureFactory() {}
|
2018-09-16 00:43:29 +00:00
|
|
|
|
|
|
|
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 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;
|
|
|
|
};
|
2018-09-17 00:50:51 +00:00
|
|
|
|
|
|
|
std::vector<Texture> TextureFactory::m_textures;
|
|
|
|
std::vector<Sampler> TextureFactory::m_samplers;
|
2018-09-16 00:43:29 +00:00
|
|
|
}
|