diff --git a/include/bgfx/bgfx.h b/include/bgfx/bgfx.h index 13c7b58f5..524953228 100644 --- a/include/bgfx/bgfx.h +++ b/include/bgfx/bgfx.h @@ -200,6 +200,7 @@ namespace bgfx RG32I, RG32U, RG32F, + RGB9E5F, BGRA8, RGBA8, RGBA8I, diff --git a/include/bgfx/c99/bgfx.h b/include/bgfx/c99/bgfx.h index 0fbfd46bb..b7aeecda3 100644 --- a/include/bgfx/c99/bgfx.h +++ b/include/bgfx/c99/bgfx.h @@ -123,6 +123,7 @@ typedef enum bgfx_texture_format BGFX_TEXTURE_FORMAT_RG32I, BGFX_TEXTURE_FORMAT_RG32U, BGFX_TEXTURE_FORMAT_RG32F, + BGFX_TEXTURE_FORMAT_RGB9E5F, BGFX_TEXTURE_FORMAT_BGRA8, BGFX_TEXTURE_FORMAT_RGBA8, BGFX_TEXTURE_FORMAT_RGBA8I, diff --git a/src/image.cpp b/src/image.cpp index 4db41e096..8a9ea6393 100644 --- a/src/image.cpp +++ b/src/image.cpp @@ -66,6 +66,7 @@ namespace bgfx { 64, 1, 1, 8, 1, 1, 0, 0, uint8_t(EncodingType::Int ) }, // RG32I { 64, 1, 1, 8, 1, 1, 0, 0, uint8_t(EncodingType::Uint ) }, // RG32U { 64, 1, 1, 8, 1, 1, 0, 0, uint8_t(EncodingType::Float) }, // RG32F + { 32, 1, 1, 4, 1, 1, 0, 0, uint8_t(EncodingType::Float) }, // RGB9E5F { 32, 1, 1, 4, 1, 1, 0, 0, uint8_t(EncodingType::Unorm) }, // BGRA8 { 32, 1, 1, 4, 1, 1, 0, 0, uint8_t(EncodingType::Unorm) }, // RGBA8 { 32, 1, 1, 4, 1, 1, 0, 0, uint8_t(EncodingType::Int ) }, // RGBA8I @@ -142,6 +143,7 @@ namespace bgfx "RG32I", // RG32I "RG32U", // RG32U "RG32F", // RG32F + "RGB9E5", // RGB9E5F "BGRA8", // BGRA8 "RGBA8", // RGBA8 "RGBA8I", // RGBA8I diff --git a/src/renderer_d3d11.cpp b/src/renderer_d3d11.cpp index fc8b0eea5..897fa83b3 100644 --- a/src/renderer_d3d11.cpp +++ b/src/renderer_d3d11.cpp @@ -238,6 +238,7 @@ namespace bgfx { namespace d3d11 { DXGI_FORMAT_R32G32_SINT, DXGI_FORMAT_R32G32_SINT, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN }, // RG32I { DXGI_FORMAT_R32G32_UINT, DXGI_FORMAT_R32G32_UINT, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN }, // RG32U { DXGI_FORMAT_R32G32_FLOAT, DXGI_FORMAT_R32G32_FLOAT, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN }, // RG32F + { DXGI_FORMAT_R9G9B9E5_SHAREDEXP, DXGI_FORMAT_R9G9B9E5_SHAREDEXP, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN }, // RGB9E5F { DXGI_FORMAT_B8G8R8A8_UNORM, DXGI_FORMAT_B8G8R8A8_UNORM, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_B8G8R8A8_UNORM_SRGB }, // BGRA8 { DXGI_FORMAT_R8G8B8A8_UNORM, DXGI_FORMAT_R8G8B8A8_UNORM, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_R8G8B8A8_UNORM_SRGB }, // RGBA8 { DXGI_FORMAT_R8G8B8A8_SINT, DXGI_FORMAT_R8G8B8A8_SINT, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_R8G8B8A8_UNORM_SRGB }, // RGBA8I diff --git a/src/renderer_d3d12.cpp b/src/renderer_d3d12.cpp index af642bbad..902eb8b46 100644 --- a/src/renderer_d3d12.cpp +++ b/src/renderer_d3d12.cpp @@ -221,6 +221,7 @@ namespace bgfx { namespace d3d12 { DXGI_FORMAT_R32G32_SINT, DXGI_FORMAT_R32G32_SINT, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN }, // RG32I { DXGI_FORMAT_R32G32_UINT, DXGI_FORMAT_R32G32_UINT, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN }, // RG32U { DXGI_FORMAT_R32G32_FLOAT, DXGI_FORMAT_R32G32_FLOAT, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN }, // RG32F + { DXGI_FORMAT_R9G9B9E5_SHAREDEXP, DXGI_FORMAT_R9G9B9E5_SHAREDEXP, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN }, // RGB9E5F { DXGI_FORMAT_B8G8R8A8_UNORM, DXGI_FORMAT_B8G8R8A8_UNORM, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_B8G8R8A8_UNORM_SRGB }, // BGRA8 { DXGI_FORMAT_R8G8B8A8_UNORM, DXGI_FORMAT_R8G8B8A8_UNORM, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_R8G8B8A8_UNORM_SRGB }, // RGBA8 { DXGI_FORMAT_R8G8B8A8_SINT, DXGI_FORMAT_R8G8B8A8_SINT, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_R8G8B8A8_UNORM_SRGB }, // RGBA8I diff --git a/src/renderer_d3d9.cpp b/src/renderer_d3d9.cpp index 763f13ee7..d14956ab4 100644 --- a/src/renderer_d3d9.cpp +++ b/src/renderer_d3d9.cpp @@ -214,6 +214,7 @@ namespace bgfx { namespace d3d9 { D3DFMT_UNKNOWN }, // RG32I { D3DFMT_UNKNOWN }, // RG32U { D3DFMT_G32R32F }, // RG32F + { D3DFMT_UNKNOWN }, // RGB9E5F { D3DFMT_A8R8G8B8 }, // BGRA8 { D3DFMT_UNKNOWN }, // RGBA8 { D3DFMT_UNKNOWN }, // RGBA8I diff --git a/src/renderer_gl.cpp b/src/renderer_gl.cpp index f488fbfda..011e67a95 100644 --- a/src/renderer_gl.cpp +++ b/src/renderer_gl.cpp @@ -232,6 +232,7 @@ namespace bgfx { namespace gl { GL_RG32I, GL_ZERO, GL_RG, GL_INT, false }, // RG32I { GL_RG32UI, GL_ZERO, GL_RG, GL_UNSIGNED_INT, false }, // RG32U { GL_RG32F, GL_ZERO, GL_RG, GL_FLOAT, false }, // RG32F + { GL_RGB9_E5, GL_ZERO, GL_RGB, GL_UNSIGNED_INT_5_9_9_9_REV, false }, // RGB9E5F { GL_RGBA8, GL_SRGB8_ALPHA8, GL_BGRA, GL_UNSIGNED_BYTE, false }, // BGRA8 { GL_RGBA8, GL_SRGB8_ALPHA8, GL_RGBA, GL_UNSIGNED_BYTE, false }, // RGBA8 { GL_RGBA8I, GL_ZERO, GL_RGBA, GL_BYTE, false }, // RGBA8I @@ -310,6 +311,7 @@ namespace bgfx { namespace gl GL_RG32I, // RG32I GL_RG32UI, // RG32U GL_RG32F, // RG32F + GL_RGB9_E5, // RGB9E5F GL_RGBA8, // BGRA8 GL_RGBA8, // RGBA8 GL_RGBA8I, // RGBA8I @@ -386,6 +388,7 @@ namespace bgfx { namespace gl GL_RG32I, // RG32I GL_RG32UI, // RG32U GL_RG32F, // RG32F + GL_RGB9_E5, // RGB9E5F GL_RGBA8, // BGRA8 GL_RGBA8, // RGBA8 GL_RGBA8I, // RGBA8I @@ -522,6 +525,7 @@ namespace bgfx { namespace gl EXT_texture_filter_anisotropic, EXT_texture_format_BGRA8888, EXT_texture_rg, + EXT_texture_shared_exponent, EXT_texture_snorm, EXT_texture_sRGB, EXT_texture_storage, @@ -720,6 +724,7 @@ namespace bgfx { namespace gl { "EXT_texture_filter_anisotropic", false, true }, { "EXT_texture_format_BGRA8888", false, true }, { "EXT_texture_rg", false, true }, // GLES2 extension. + { "EXT_texture_shared_exponent", false, true }, { "EXT_texture_snorm", BGFX_CONFIG_RENDERER_OPENGL >= 30, true }, { "EXT_texture_sRGB", false, true }, { "EXT_texture_storage", false, true }, diff --git a/src/renderer_gl.h b/src/renderer_gl.h index 72476fa60..1a17070d7 100644 --- a/src/renderer_gl.h +++ b/src/renderer_gl.h @@ -309,6 +309,14 @@ typedef uint64_t GLuint64; # define GL_RGBA16UI 0x8D76 #endif // GL_RGBA16UI +#ifndef GL_RGB9_E5 +# define GL_RGB9_E5 0x8C3D +#endif // GL_RGB9_E5 + +#ifndef GL_UNSIGNED_INT_5_9_9_9_REV +# define GL_UNSIGNED_INT_5_9_9_9_REV 0x8C3E +#endif // GL_UNSIGNED_INT_5_9_9_9_REV + #ifndef GL_R11F_G11F_B10F # define GL_R11F_G11F_B10F 0x8C3A #endif // GL_R11F_G11F_B10F