2023-06-13 06:46:56 +00:00
# ifndef TEXTURE_H
# define TEXTURE_H
# include <glad/glad.h>
# include <map>
# include <string>
enum TexType {
2023-06-13 09:24:52 +00:00
TEX_ALBEDO ,
TEX_ROUGHNESS ,
TEX_METALLIC ,
2023-06-13 06:46:56 +00:00
TEX_SPECULAR ,
2023-06-13 09:24:52 +00:00
TEX_EMITTED ,
2023-06-13 06:46:56 +00:00
TEX_HEIGHTS ,
TEX_NORMAL ,
TEX_AVAILABLE_COUNT
} ;
// Абстрактный класс базовой текстуры
class BaseTexture
{
public :
~ BaseTexture ( ) ;
virtual void use ( ) = 0 ; // Привязка текстуры
static void disable ( GLuint type ) ; // Отвязка текстуры по типу
GLuint getType ( ) ; // Возвращает тип текстуры
void setType ( GLuint type ) ; // Задает тип текстуры
protected :
GLuint handler ; // Дескриптор текстуры
GLuint type ; // Тип текстуры, соответствует её слоту
static std : : map < std : : string , int > filename_handler ; // Получение дескриптора текстуры по её имени
static std : : map < int , int > handler_count ; // Получение количества использований по дескриптору текстуры (Shared pointer)
} ;
// Класс 2D текстуры
class Texture : public BaseTexture
{
public :
Texture ( GLuint type = TEX_AVAILABLE_COUNT , const std : : string & filename = " " ) ; // Загрузка текстуры с диска или использование "пустой"
2023-06-13 09:24:52 +00:00
Texture ( GLuint width , GLuint height , GLuint attachment , GLuint texType = TEX_ALBEDO , GLint internalformat = GL_RGBA , GLint format = GL_RGBA , GLenum dataType = GL_FLOAT ) ; // Конструктор текстуры заданного размера для использования в буфере
Texture ( GLuint width , GLuint height , void * data , GLuint texType = TEX_ALBEDO , GLint internalformat = GL_RGBA , GLint format = GL_RGBA , GLenum dataType = GL_FLOAT ) ; // Конструктор текстуры заданного размера без привязки к буферу с загрузкой пикселей по указателю
2023-06-13 06:46:56 +00:00
Texture ( const Texture & other ) ; // Конструктор копирования
Texture & operator = ( const Texture & other ) ; // Оператор присваивания
2023-06-13 09:24:52 +00:00
void reallocate ( GLuint width , GLuint height , GLuint texType = TEX_ALBEDO , GLint internalformat = GL_RGBA , GLint format = GL_RGBA , GLenum dataType = GL_FLOAT ) ; // Пересоздает текстуру для имеющегося дескриптора
2023-06-13 06:46:56 +00:00
virtual void use ( ) ; // Привязка текстуры
} ;
// Класс 3D текстуры
class TextureArray : public BaseTexture
{
public :
2023-06-13 09:24:52 +00:00
TextureArray ( GLuint levels , GLuint width , GLuint height , GLuint attachment , GLuint texType = TEX_ALBEDO , GLint internalformat = GL_RGBA , GLint format = GL_RGBA , GLenum dataType = GL_FLOAT ) ; // Конструктор текстуры заданного размера для использования в буфере
2023-06-13 06:46:56 +00:00
TextureArray ( const TextureArray & other ) ; // Конструктор копирования
TextureArray & operator = ( const TextureArray & other ) ; // Оператор присваивания
2023-06-13 09:24:52 +00:00
void reallocate ( GLuint levels , GLuint width , GLuint height , GLuint texType = TEX_ALBEDO , GLint internalformat = GL_RGBA , GLint format = GL_RGBA , GLenum dataType = GL_FLOAT ) ; // Пересоздает текстуру для имеющегося дескриптора
2023-06-13 06:46:56 +00:00
virtual void use ( ) ; // Привязка текстуры
} ;
// Класс кубической текстуры
class TextureCube : public BaseTexture
{
public :
TextureCube ( GLuint type = TEX_AVAILABLE_COUNT , const std : : string ( & filename ) [ 6 ] = { " " } ) ; // Загрузка текстуры с диска или использование "пустой"
2023-06-13 09:24:52 +00:00
TextureCube ( GLuint width , GLuint height , GLuint attachment , GLuint texType = TEX_ALBEDO , GLint internalformat = GL_RGBA , GLint format = GL_RGBA , GLenum dataType = GL_FLOAT ) ; // Конструктор текстуры заданного размера для использования в буфере
2023-06-13 06:46:56 +00:00
TextureCube ( const TextureCube & other ) ; // Конструктор копирования
TextureCube & operator = ( const TextureCube & other ) ; // Оператор присваивания
2023-06-13 09:24:52 +00:00
void reallocate ( GLuint width , GLuint height , GLuint texType = TEX_ALBEDO , GLint internalformat = GL_RGBA , GLint format = GL_RGBA , GLenum dataType = GL_FLOAT ) ; // Пересоздает текстуру для имеющегося дескриптора
2023-06-13 06:46:56 +00:00
virtual void use ( ) ; // Привязка текстуры
} ;
// Класс 3D кубической текстуры
class TextureCubeArray : public BaseTexture
{
public :
2023-06-13 09:24:52 +00:00
TextureCubeArray ( GLuint levels , GLuint width , GLuint height , GLuint attachment , GLuint texType = TEX_ALBEDO , GLint internalformat = GL_RGBA , GLint format = GL_RGBA , GLenum dataType = GL_FLOAT ) ; // Конструктор текстуры заданного размера для использования в буфере
2023-06-13 06:46:56 +00:00
TextureCubeArray ( const TextureCubeArray & other ) ; // Конструктор копирования
TextureCubeArray & operator = ( const TextureCubeArray & other ) ; // Оператор присваивания
2023-06-13 09:24:52 +00:00
void reallocate ( GLuint levels , GLuint width , GLuint height , GLuint texType = TEX_ALBEDO , GLint internalformat = GL_RGBA , GLint format = GL_RGBA , GLenum dataType = GL_FLOAT ) ; // Пересоздает текстуру для имеющегося дескриптора
2023-06-13 06:46:56 +00:00
virtual void use ( ) ; // Привязка текстуры
} ;
# endif // TEXTURE_H