OpenGLRenderer: Use glTexStorage2D instead of glTexImage2D

This commit is contained in:
Jérôme Leclercq 2021-02-20 19:14:13 +01:00
parent f7442982a4
commit 3ef74d6e1d
3 changed files with 11 additions and 2 deletions

View File

@ -31,6 +31,7 @@ namespace Nz::GL
inline void TexImage2D(GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type);
inline void TexImage2D(GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void* data);
inline void TexStorage2D(GLint levels, GLint internalFormat, GLsizei width, GLsizei height);
inline void TexSubImage2D(GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void* data);
Texture& operator=(const Texture&) = delete;

View File

@ -58,6 +58,15 @@ namespace Nz::GL
context.glTexImage2D(ToOpenGL(m_target), level, internalFormat, width, height, border, format, type, data);
}
inline void Texture::TexStorage2D(GLint levels, GLint internalFormat, GLsizei width, GLsizei height)
{
m_target = TextureTarget::Target2D;
const Context& context = EnsureDeviceContext();
context.BindTexture(m_target, m_objectId);
context.glTexStorage2D(ToOpenGL(m_target), levels, internalFormat, width, height);
}
inline void Texture::TexSubImage2D(GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void* data)
{
const Context& context = EnsureDeviceContext();

View File

@ -29,8 +29,7 @@ namespace Nz
break;
case ImageType_2D:
for (unsigned int level = 0; level < m_params.mipmapLevel; ++level)
m_texture.TexImage2D(0, format->internalFormat, GetLevelSize(params.width, level), GetLevelSize(params.height, level), 0, format->format, format->type);
m_texture.TexStorage2D(params.mipmapLevel, format->internalFormat, params.width, params.height);
break;
case ImageType_2D_Array: