Класс 3D кубической текстуры
This commit is contained in:
parent
64f9a9de34
commit
2564aabc0c
|
@ -73,4 +73,18 @@ class TextureCube : public BaseTexture
|
||||||
virtual void use(); // Привязка текстуры
|
virtual void use(); // Привязка текстуры
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Класс 3D кубической текстуры
|
||||||
|
class TextureCubeArray : public BaseTexture
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
TextureCubeArray(GLuint levels, GLuint width, GLuint height, GLuint attachment, GLuint texType = TEX_DIFFUSE, GLint internalformat = GL_RGBA, GLint format = GL_RGBA, GLenum dataType = GL_FLOAT); // Конструктор текстуры заданного размера для использования в буфере
|
||||||
|
TextureCubeArray(const TextureCubeArray& other); // Конструктор копирования
|
||||||
|
|
||||||
|
TextureCubeArray& operator=(const TextureCubeArray& other); // Оператор присваивания
|
||||||
|
|
||||||
|
void reallocate(GLuint levels, GLuint width, GLuint height, GLuint texType = TEX_DIFFUSE, GLint internalformat = GL_RGBA, GLint format = GL_RGBA, GLenum dataType = GL_FLOAT); // Пересоздает текстуру для имеющегося дескриптора
|
||||||
|
|
||||||
|
virtual void use(); // Привязка текстуры
|
||||||
|
};
|
||||||
|
|
||||||
#endif // TEXTURE_H
|
#endif // TEXTURE_H
|
||||||
|
|
|
@ -327,3 +327,63 @@ void TextureCube::use()
|
||||||
glActiveTexture(type + GL_TEXTURE0);
|
glActiveTexture(type + GL_TEXTURE0);
|
||||||
glBindTexture(GL_TEXTURE_CUBE_MAP, handler); // Привязка текстуры как активной
|
glBindTexture(GL_TEXTURE_CUBE_MAP, handler); // Привязка текстуры как активной
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Конструктор текстуры заданного размера для использования в буфере
|
||||||
|
TextureCubeArray::TextureCubeArray(GLuint levels, GLuint width, GLuint height, GLuint attachment, GLuint texType, GLint internalformat, GLint format, GLenum dataType)
|
||||||
|
{
|
||||||
|
type = texType;
|
||||||
|
// Генерация текстуры заданного размера
|
||||||
|
glGenTextures(1, &handler);
|
||||||
|
glBindTexture(GL_TEXTURE_CUBE_MAP_ARRAY, handler);
|
||||||
|
glTexImage3D(
|
||||||
|
GL_TEXTURE_CUBE_MAP_ARRAY, 0, internalformat, width, height, 6*levels, 0, format, dataType, 0);
|
||||||
|
|
||||||
|
glTexParameteri(GL_TEXTURE_CUBE_MAP_ARRAY, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
|
||||||
|
glTexParameteri(GL_TEXTURE_CUBE_MAP_ARRAY, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
|
||||||
|
|
||||||
|
// Привязка к буферу кадра
|
||||||
|
glFramebufferTexture(GL_FRAMEBUFFER, attachment, handler, 0);
|
||||||
|
|
||||||
|
// Создаем счетчик использований дескриптора
|
||||||
|
handler_count[handler] = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Конструктор копирования
|
||||||
|
TextureCubeArray::TextureCubeArray(const TextureCubeArray& other)
|
||||||
|
{
|
||||||
|
handler = other.handler;
|
||||||
|
type = other.type;
|
||||||
|
// Делаем копию и увеличиваем счетчик
|
||||||
|
handler_count[handler]++;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Оператор присваивания
|
||||||
|
TextureCubeArray& TextureCubeArray::operator=(const TextureCubeArray& other)
|
||||||
|
{
|
||||||
|
// Если это разные текстуры
|
||||||
|
if (handler != other.handler)
|
||||||
|
{
|
||||||
|
this->~TextureCubeArray(); // Уничтожаем имеющуюся
|
||||||
|
// Заменяем новой
|
||||||
|
handler = other.handler;
|
||||||
|
handler_count[handler]++;
|
||||||
|
}
|
||||||
|
type = other.type;
|
||||||
|
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Пересоздает текстуру для имеющегося дескриптора
|
||||||
|
void TextureCubeArray::reallocate(GLuint levels, GLuint width, GLuint height, GLuint texType, GLint internalformat, GLint format, GLenum dataType)
|
||||||
|
{
|
||||||
|
use();
|
||||||
|
glTexImage3D(
|
||||||
|
GL_TEXTURE_CUBE_MAP_ARRAY, 0, internalformat, width, height, 6*levels, 0, format, dataType, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Привязка текстуры
|
||||||
|
void TextureCubeArray::use()
|
||||||
|
{
|
||||||
|
glActiveTexture(type + GL_TEXTURE0);
|
||||||
|
glBindTexture(GL_TEXTURE_CUBE_MAP_ARRAY, handler); // Привязка текстуры как активной
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue