mirror of
https://github.com/MaSzyna-EU07/maszyna.git
synced 2026-10-17 15:39:20 +02:00
59 lines
2.1 KiB
C++
59 lines
2.1 KiB
C++
#include "stdafx.h"
|
|
#include "cubemap.h"
|
|
|
|
gl::cubemap::cubemap()
|
|
{
|
|
glGenTextures(1, *this);
|
|
|
|
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
|
|
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
|
|
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE);
|
|
}
|
|
|
|
gl::cubemap::~cubemap()
|
|
{
|
|
glDeleteTextures(1, *this);
|
|
}
|
|
|
|
void gl::cubemap::alloc(GLint format, int width, int height, GLenum components, GLenum type) const
|
|
{
|
|
glBindTexture(GL_TEXTURE_CUBE_MAP, *this);
|
|
for (GLuint tgt = GL_TEXTURE_CUBE_MAP_POSITIVE_X; tgt <= GL_TEXTURE_CUBE_MAP_NEGATIVE_Z; tgt++)
|
|
glTexImage2D(tgt, 0, format, width, height, 0, components, type, nullptr);
|
|
|
|
// make the cubemap sample-complete with no mipmaps required.
|
|
// generate_mipmaps() will later override MIN_FILTER once mips actually exist.
|
|
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
|
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
|
|
|
glBindTexture(GL_TEXTURE_CUBE_MAP, 0);
|
|
}
|
|
|
|
void gl::cubemap::alloc_levels(GLenum format, int size, int levels) const
|
|
{
|
|
glBindTexture(GL_TEXTURE_CUBE_MAP, *this);
|
|
glTexStorage2D(GL_TEXTURE_CUBE_MAP, levels, format, size, size);
|
|
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
|
|
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
|
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
|
|
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
|
|
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE);
|
|
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAX_LEVEL, levels - 1);
|
|
glBindTexture(GL_TEXTURE_CUBE_MAP, 0);
|
|
}
|
|
|
|
void gl::cubemap::bind(int unit) const
|
|
{
|
|
glActiveTexture(unit);
|
|
glBindTexture(GL_TEXTURE_CUBE_MAP, *this);
|
|
}
|
|
|
|
void gl::cubemap::generate_mipmaps() const
|
|
{
|
|
glBindTexture(GL_TEXTURE_CUBE_MAP, *this);
|
|
glGenerateMipmap(GL_TEXTURE_CUBE_MAP);
|
|
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
|
|
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
|
glBindTexture(GL_TEXTURE_CUBE_MAP, 0);
|
|
}
|