defaults and mipmap

main
Brett 2023-12-17 20:15:12 -05:00
parent cd5f25e923
commit 68fd994119
2 changed files with 11 additions and 12 deletions

View File

@ -137,6 +137,13 @@ namespace blt::gfx
glGenTextures(1, &textureID);
}
protected:
void setDefaults() const;
inline void generateMipmaps() const
{
glGenerateMipmap(textureBindType);
}
public:
inline void bind() const
{
@ -148,16 +155,6 @@ namespace blt::gfx
glBindTexture(textureBindType, 0);
}
void setDefaults() const;
inline void generateMipmaps() const
{
// it's a little inefficient binding and unbinding for these small calls, they really should be done in the constructor or data upload
bind();
glGenerateMipmap(textureBindType);
unbind();
}
[[nodiscard]] inline unsigned int getTextureID() const
{
return textureID;
@ -176,6 +173,7 @@ namespace blt::gfx
texture_gl(width, height, GL_TEXTURE_2D, colorMode)
{
bind();
setDefaults();
// TODO:
const int MIPMAP_LEVELS = 4;
glTexStorage2D(
@ -196,6 +194,7 @@ namespace blt::gfx
textureBindType, level, x_offset, y_offset, sub_width, sub_height,
dataColorMode, GL_UNSIGNED_BYTE, data
);
generateMipmaps();
unbind();
}
@ -226,6 +225,7 @@ namespace blt::gfx
texture_gl(width, height, GL_TEXTURE_2D_ARRAY, colorMode), m_layers(layers)
{
bind();
setDefaults();
// 6+ mipmaps is about where I stop noticing any difference (size is 4x4 pixels, so that makes sense)
glTexStorage3D(textureBindType, 6, colorMode, width, height, layers);
BLT_DEBUG("Creating 2D Texture Array with ID: %d", textureID);
@ -243,6 +243,7 @@ namespace blt::gfx
textureBindType, level, x_offset, y_offset, index, sub_width, sub_height, 1,
dataColorMode, GL_UNSIGNED_BYTE, data
);
generateMipmaps();
unbind();
}
};

View File

@ -70,7 +70,6 @@ blt::gfx::texture_file& blt::gfx::texture_file::resize(int target_width, int tar
void blt::gfx::texture_gl::setDefaults() const
{
bind();
glTexParameteri(textureBindType, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(textureBindType, GL_TEXTURE_WRAP_T, GL_REPEAT);
// nearest preserves the pixely look
@ -82,5 +81,4 @@ void blt::gfx::texture_gl::setDefaults() const
glGetFloatv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &a);
glTexParameterf(textureBindType, GL_TEXTURE_MAX_ANISOTROPY_EXT, a);
#endif
unbind();
}