Include mipmaps in texture memory usage
This commit is contained in:
parent
d824159c2f
commit
0b0be3539f
1 changed files with 29 additions and 1 deletions
|
|
@ -82,10 +82,13 @@ namespace psemek::gfx
|
|||
void mirrored_repeat();
|
||||
void clamp();
|
||||
|
||||
bool uses_mipmaps() const { return uses_mipmaps_; }
|
||||
|
||||
protected:
|
||||
GLuint id_ = 0;
|
||||
GLint format_ = 0;
|
||||
geom::vector<std::size_t, D> size_ = geom::vector<std::size_t, D>::zero();
|
||||
bool uses_mipmaps_ = true;
|
||||
|
||||
explicit basic_texture(std::nullptr_t);
|
||||
};
|
||||
|
|
@ -454,6 +457,7 @@ namespace psemek::gfx
|
|||
bind();
|
||||
gl::TexParameteri(Target, gl::TEXTURE_MIN_FILTER, gl::NEAREST);
|
||||
gl::TexParameteri(Target, gl::TEXTURE_MAG_FILTER, gl::NEAREST);
|
||||
uses_mipmaps_ = false;
|
||||
}
|
||||
|
||||
template <std::size_t D, GLenum Target>
|
||||
|
|
@ -462,6 +466,7 @@ namespace psemek::gfx
|
|||
bind();
|
||||
gl::TexParameteri(Target, gl::TEXTURE_MIN_FILTER, gl::LINEAR);
|
||||
gl::TexParameteri(Target, gl::TEXTURE_MAG_FILTER, gl::LINEAR);
|
||||
uses_mipmaps_ = false;
|
||||
}
|
||||
|
||||
template <std::size_t D, GLenum Target>
|
||||
|
|
@ -470,6 +475,7 @@ namespace psemek::gfx
|
|||
bind();
|
||||
gl::TexParameteri(Target, gl::TEXTURE_MIN_FILTER, gl::LINEAR_MIPMAP_LINEAR);
|
||||
gl::TexParameteri(Target, gl::TEXTURE_MAG_FILTER, gl::LINEAR);
|
||||
uses_mipmaps_ = true;
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -613,7 +619,29 @@ namespace psemek::gfx
|
|||
auto size = texture.width() * texture.height() * texture.depth();
|
||||
if (size == 0)
|
||||
return 0;
|
||||
return size * pixel_size(texture.internal_format());
|
||||
|
||||
float mipmap_factor = 1.f;
|
||||
if (texture.uses_mipmaps())
|
||||
{
|
||||
switch (Target)
|
||||
{
|
||||
case gl::TEXTURE_1D:
|
||||
case gl::TEXTURE_1D_ARRAY:
|
||||
mipmap_factor = 2.f;
|
||||
break;
|
||||
case gl::TEXTURE_2D:
|
||||
case gl::TEXTURE_2D_ARRAY:
|
||||
mipmap_factor = 4.f / 3.f;
|
||||
break;
|
||||
case gl::TEXTURE_3D:
|
||||
mipmap_factor = 8.f / 7.f;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return std::ceil(mipmap_factor * size * pixel_size(texture.internal_format()));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue