From df8449c13ec3cfd99fcda3339824ec44e14f2e16 Mon Sep 17 00:00:00 2001 From: Lynix Date: Wed, 28 Aug 2013 03:05:46 +0200 Subject: [PATCH] Added HDR texture formats Former-commit-id: affa3c0842d3918977c48483bf485ac17e218448 --- include/Nazara/Utility/Enums.hpp | 18 ++++---- include/Nazara/Utility/PixelFormat.inl | 60 ++++++++++++++++++-------- src/Nazara/Renderer/OpenGL.cpp | 48 +++++++++++++++++++++ src/Nazara/Renderer/Texture.cpp | 11 +++++ 4 files changed, 109 insertions(+), 28 deletions(-) diff --git a/include/Nazara/Utility/Enums.hpp b/include/Nazara/Utility/Enums.hpp index af0a6dda5..74fc5fa13 100644 --- a/include/Nazara/Utility/Enums.hpp +++ b/include/Nazara/Utility/Enums.hpp @@ -159,20 +159,18 @@ enum nzPixelFormat nzPixelFormat_DXT5, nzPixelFormat_L8, // 1*nzUInt8 nzPixelFormat_LA8, // 2*nzUInt8 - /* - nzPixelFormat_RGB16F, - nzPixelFormat_RGB16I, // 4*nzUInt16 - nzPixelFormat_RGB32F, - nzPixelFormat_RGB32I, // 4*nzUInt32 - nzPixelFormat_RGBA16F, - nzPixelFormat_RGBA16I, // 4*nzUInt16 - nzPixelFormat_RGBA32F, - nzPixelFormat_RGBA32I, // 4*nzUInt32 - */ nzPixelFormat_RGB5A1, // 1*nzUInt16 nzPixelFormat_RGB8, // 3*nzUInt8 + nzPixelFormat_RGB16F, + nzPixelFormat_RGB16I, // 4*nzUInt16 + nzPixelFormat_RGB32F, // 3*float + nzPixelFormat_RGB32I, // 4*nzUInt32 nzPixelFormat_RGBA4, // 1*nzUInt16 nzPixelFormat_RGBA8, // 4*nzUInt8 + nzPixelFormat_RGBA16F, + nzPixelFormat_RGBA16I, // 4*nzUInt16 + nzPixelFormat_RGBA32F, // 4*float + nzPixelFormat_RGBA32I, // 4*nzUInt32 nzPixelFormat_Depth16, nzPixelFormat_Depth24, nzPixelFormat_Depth24Stencil8, diff --git a/include/Nazara/Utility/PixelFormat.inl b/include/Nazara/Utility/PixelFormat.inl index 15ed74b34..2eb07c2c7 100644 --- a/include/Nazara/Utility/PixelFormat.inl +++ b/include/Nazara/Utility/PixelFormat.inl @@ -188,7 +188,7 @@ inline nzUInt8 NzPixelFormat::GetBitsPerPixel(nzPixelFormat format) case nzPixelFormat_LA8: return 16; -/* + case nzPixelFormat_RGB16F: return 48; @@ -212,7 +212,7 @@ inline nzUInt8 NzPixelFormat::GetBitsPerPixel(nzPixelFormat format) case nzPixelFormat_RGBA32I: return 128; -*/ + case nzPixelFormat_RGBA4: return 16; @@ -282,8 +282,16 @@ inline nzPixelFormatType NzPixelFormat::GetType(nzPixelFormat format) case nzPixelFormat_LA8: case nzPixelFormat_RGB5A1: case nzPixelFormat_RGB8: + case nzPixelFormat_RGB16F: + case nzPixelFormat_RGB16I: + case nzPixelFormat_RGB32F: + case nzPixelFormat_RGB32I: case nzPixelFormat_RGBA4: case nzPixelFormat_RGBA8: + case nzPixelFormat_RGBA16F: + case nzPixelFormat_RGBA16I: + case nzPixelFormat_RGBA32F: + case nzPixelFormat_RGBA32I: return nzPixelFormatType_Color; case nzPixelFormat_Depth16: @@ -317,6 +325,10 @@ inline bool NzPixelFormat::HasAlpha(nzPixelFormat format) case nzPixelFormat_DXT5: case nzPixelFormat_LA8: case nzPixelFormat_RGB5A1: + case nzPixelFormat_RGBA16F: + case nzPixelFormat_RGBA16I: + case nzPixelFormat_RGBA32F: + case nzPixelFormat_RGBA32I: case nzPixelFormat_RGBA4: case nzPixelFormat_RGBA8: return true; @@ -325,6 +337,10 @@ inline bool NzPixelFormat::HasAlpha(nzPixelFormat format) case nzPixelFormat_DXT1: case nzPixelFormat_L8: case nzPixelFormat_RGB8: + case nzPixelFormat_RGB16F: + case nzPixelFormat_RGB16I: + case nzPixelFormat_RGB32F: + case nzPixelFormat_RGB32I: case nzPixelFormat_Depth16: case nzPixelFormat_Depth24: case nzPixelFormat_Depth24Stencil8: @@ -352,14 +368,22 @@ inline bool NzPixelFormat::IsCompressed(nzPixelFormat format) case nzPixelFormat_DXT5: return true; + case nzPixelFormat_BGR8: case nzPixelFormat_BGRA8: + case nzPixelFormat_L8: case nzPixelFormat_LA8: case nzPixelFormat_RGB5A1: + case nzPixelFormat_RGB8: + case nzPixelFormat_RGB16F: + case nzPixelFormat_RGB16I: + case nzPixelFormat_RGB32F: + case nzPixelFormat_RGB32I: case nzPixelFormat_RGBA4: case nzPixelFormat_RGBA8: - case nzPixelFormat_BGR8: - case nzPixelFormat_L8: - case nzPixelFormat_RGB8: + case nzPixelFormat_RGBA16F: + case nzPixelFormat_RGBA16I: + case nzPixelFormat_RGBA32F: + case nzPixelFormat_RGBA32I: case nzPixelFormat_Depth16: case nzPixelFormat_Depth24: case nzPixelFormat_Depth24Stencil8: @@ -425,7 +449,13 @@ inline NzString NzPixelFormat::ToString(nzPixelFormat format) case nzPixelFormat_LA8: return "LA8"; -/* + + case nzPixelFormat_RGB5A1: + return "RGB5A1"; + + case nzPixelFormat_RGB8: + return "RGB8"; + case nzPixelFormat_RGB16F: return "RGB16F"; @@ -438,6 +468,12 @@ inline NzString NzPixelFormat::ToString(nzPixelFormat format) case nzPixelFormat_RGB32I: return "RGB32I"; + case nzPixelFormat_RGBA4: + return "RGBA4"; + + case nzPixelFormat_RGBA8: + return "RGBA8"; + case nzPixelFormat_RGBA16F: return "RGBA16F"; @@ -449,18 +485,6 @@ inline NzString NzPixelFormat::ToString(nzPixelFormat format) case nzPixelFormat_RGBA32I: return "RGBA32I"; -*/ - case nzPixelFormat_RGBA4: - return "RGBA4"; - - case nzPixelFormat_RGB5A1: - return "RGB5A1"; - - case nzPixelFormat_RGB8: - return "RGB8"; - - case nzPixelFormat_RGBA8: - return "RGBA8"; case nzPixelFormat_Depth16: return "Depth16"; diff --git a/src/Nazara/Renderer/OpenGL.cpp b/src/Nazara/Renderer/OpenGL.cpp index 88887c3cc..72a43eb07 100644 --- a/src/Nazara/Renderer/OpenGL.cpp +++ b/src/Nazara/Renderer/OpenGL.cpp @@ -1388,6 +1388,30 @@ bool NzOpenGL::TranslateFormat(nzPixelFormat pixelFormat, Format* format, Format format->internalFormat = GL_RGB8; return true; + case nzPixelFormat_RGB16F: + format->dataFormat = GL_RGB; + format->dataType = GL_FLOAT; + format->internalFormat = GL_RGB16F; + return true; + + case nzPixelFormat_RGB16I: + format->dataFormat = GL_RGB; + format->dataType = GL_INT; + format->internalFormat = GL_RGB16I; + return true; + + case nzPixelFormat_RGB32F: + format->dataFormat = GL_RGB; + format->dataType = GL_FLOAT; + format->internalFormat = GL_RGB32F; + return true; + + case nzPixelFormat_RGB32I: + format->dataFormat = GL_RGB; + format->dataType = GL_INT; + format->internalFormat = GL_RGB32I; + return true; + case nzPixelFormat_RGBA4: format->dataFormat = GL_RGBA; format->dataType = GL_UNSIGNED_SHORT_4_4_4_4; @@ -1400,6 +1424,30 @@ bool NzOpenGL::TranslateFormat(nzPixelFormat pixelFormat, Format* format, Format format->internalFormat = GL_RGBA8; return true; + case nzPixelFormat_RGBA16F: + format->dataFormat = GL_RGBA; + format->dataType = GL_FLOAT; + format->internalFormat = GL_RGBA16F; + return true; + + case nzPixelFormat_RGBA16I: + format->dataFormat = GL_RGBA; + format->dataType = GL_INT; + format->internalFormat = GL_RGBA32I; + return true; + + case nzPixelFormat_RGBA32F: + format->dataFormat = GL_RGBA; + format->dataType = GL_FLOAT; + format->internalFormat = GL_RGBA32F; + return true; + + case nzPixelFormat_RGBA32I: + format->dataFormat = GL_RGB; + format->dataType = GL_INT; + format->internalFormat = GL_RGB32I; + return true; + case nzPixelFormat_Depth16: format->dataFormat = GL_DEPTH_COMPONENT; format->dataType = GL_UNSIGNED_BYTE; diff --git a/src/Nazara/Renderer/Texture.cpp b/src/Nazara/Renderer/Texture.cpp index 9775831c2..b25f71e36 100644 --- a/src/Nazara/Renderer/Texture.cpp +++ b/src/Nazara/Renderer/Texture.cpp @@ -1306,6 +1306,17 @@ bool NzTexture::IsFormatSupported(nzPixelFormat format) case nzPixelFormat_RGBA4: return true; + // Formats supportés depuis OpenGL 3 + case nzPixelFormat_RGB16F: + case nzPixelFormat_RGB16I: + case nzPixelFormat_RGB32F: + case nzPixelFormat_RGB32I: + case nzPixelFormat_RGBA16F: + case nzPixelFormat_RGBA16I: + case nzPixelFormat_RGBA32F: + case nzPixelFormat_RGBA32I: + return NzOpenGL::GetVersion() >= 300; + // Formats de profondeur (Supportés avec les FBOs) case nzPixelFormat_Depth16: case nzPixelFormat_Depth24: