17 #include "CubeMapTexture.h" 18 #include "glutil/glutil.h" 20 #include <stb_image.h> 24 CubeMapTexture::CubeMapTexture(
const std::string &posXFilename,
const std::string &negXFilename,
25 const std::string &posYFilename,
const std::string &negYFilename,
26 const std::string &posZFilename,
const std::string &negZFilename) {
32 glGenTextures(1, &textureID);
37 glBindTexture(GL_TEXTURE_CUBE_MAP, textureID);
39 loadCubeMapFace(posXFilename, GL_TEXTURE_CUBE_MAP_POSITIVE_X);
40 loadCubeMapFace(negXFilename, GL_TEXTURE_CUBE_MAP_NEGATIVE_X);
41 loadCubeMapFace(posYFilename, GL_TEXTURE_CUBE_MAP_POSITIVE_Y);
42 loadCubeMapFace(negYFilename, GL_TEXTURE_CUBE_MAP_NEGATIVE_Y);
43 loadCubeMapFace(posZFilename, GL_TEXTURE_CUBE_MAP_POSITIVE_Z);
44 loadCubeMapFace(negZFilename, GL_TEXTURE_CUBE_MAP_NEGATIVE_Z);
50 glGenerateMipmap(GL_TEXTURE_CUBE_MAP);
58 glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
59 glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
60 glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, GL_REPEAT);
61 glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T, GL_REPEAT);
62 glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_R, GL_REPEAT);
71 m_texture = textureID;
75 CubeMapTexture::~CubeMapTexture()
79 void CubeMapTexture::loadCubeMapFace(std::string filename, GLenum face)
82 stbi_set_flip_vertically_on_load(
true);
87 unsigned char* image = stbi_load(filename.c_str(), &width, &height, &comp, 0);
89 if (image ==
nullptr) {
90 Logger::logError(
"Couldnt load image "+ filename);
93 GLenum format = comp == 3 ? GL_RGB : GL_RGBA;
95 glTexImage2D(face, 0, GL_SRGB_ALPHA_EXT, width, height, 0, format, GL_UNSIGNED_BYTE, image);
97 stbi_image_free(image);
100 void CubeMapTexture::bind(GLenum textureUnit) {
101 glActiveTexture(textureUnit);
103 glBindTexture(GL_TEXTURE_CUBE_MAP, m_texture);