From 3ef74d6e1d7278b0fecfaaee0019b4f92d0e6734 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Leclercq?= Date: Sat, 20 Feb 2021 19:14:13 +0100 Subject: [PATCH] OpenGLRenderer: Use glTexStorage2D instead of glTexImage2D --- include/Nazara/OpenGLRenderer/Wrapper/Texture.hpp | 1 + include/Nazara/OpenGLRenderer/Wrapper/Texture.inl | 9 +++++++++ src/Nazara/OpenGLRenderer/OpenGLTexture.cpp | 3 +-- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/include/Nazara/OpenGLRenderer/Wrapper/Texture.hpp b/include/Nazara/OpenGLRenderer/Wrapper/Texture.hpp index 0b04a5e4a..a8288d62e 100644 --- a/include/Nazara/OpenGLRenderer/Wrapper/Texture.hpp +++ b/include/Nazara/OpenGLRenderer/Wrapper/Texture.hpp @@ -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; diff --git a/include/Nazara/OpenGLRenderer/Wrapper/Texture.inl b/include/Nazara/OpenGLRenderer/Wrapper/Texture.inl index a345ac6f4..ecf5288b2 100644 --- a/include/Nazara/OpenGLRenderer/Wrapper/Texture.inl +++ b/include/Nazara/OpenGLRenderer/Wrapper/Texture.inl @@ -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(); diff --git a/src/Nazara/OpenGLRenderer/OpenGLTexture.cpp b/src/Nazara/OpenGLRenderer/OpenGLTexture.cpp index 53cb0bfbb..abd49e4a8 100644 --- a/src/Nazara/OpenGLRenderer/OpenGLTexture.cpp +++ b/src/Nazara/OpenGLRenderer/OpenGLTexture.cpp @@ -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: