Renderer: Fix A8, L8 and LA8 support for both OpenGL and Vulkan
This commit is contained in:
parent
601a0cedec
commit
b6745b2906
|
|
@ -15,7 +15,7 @@ namespace Nz
|
||||||
// TODO: Fill this switch
|
// TODO: Fill this switch
|
||||||
switch (pixelFormat)
|
switch (pixelFormat)
|
||||||
{
|
{
|
||||||
case PixelFormat::A8: return GLTextureFormat{ GL_R8, GL_RED, GL_UNSIGNED_BYTE, GL_ZERO, GL_ZERO, GL_ZERO, GL_RED };
|
case PixelFormat::A8: return GLTextureFormat{ GL_R8, GL_RED, GL_UNSIGNED_BYTE, GL_ONE, GL_ONE, GL_ONE, GL_RED };
|
||||||
case PixelFormat::BGR8: return GLTextureFormat{ GL_RGB8, GL_RGB, GL_UNSIGNED_BYTE, GL_BLUE, GL_GREEN, GL_RED, GL_ONE };
|
case PixelFormat::BGR8: return GLTextureFormat{ GL_RGB8, GL_RGB, GL_UNSIGNED_BYTE, GL_BLUE, GL_GREEN, GL_RED, GL_ONE };
|
||||||
case PixelFormat::BGR8_SRGB: return GLTextureFormat{ GL_SRGB8, GL_RGB, GL_UNSIGNED_BYTE, GL_BLUE, GL_GREEN, GL_RED, GL_ONE };
|
case PixelFormat::BGR8_SRGB: return GLTextureFormat{ GL_SRGB8, GL_RGB, GL_UNSIGNED_BYTE, GL_BLUE, GL_GREEN, GL_RED, GL_ONE };
|
||||||
case PixelFormat::BGRA8: return GLTextureFormat{ GL_SRGB8_ALPHA8, GL_RGBA, GL_UNSIGNED_BYTE, GL_BLUE, GL_GREEN, GL_RED, GL_ALPHA };
|
case PixelFormat::BGRA8: return GLTextureFormat{ GL_SRGB8_ALPHA8, GL_RGBA, GL_UNSIGNED_BYTE, GL_BLUE, GL_GREEN, GL_RED, GL_ALPHA };
|
||||||
|
|
@ -24,6 +24,8 @@ namespace Nz
|
||||||
case PixelFormat::Depth24Stencil8: return GLTextureFormat{ GL_DEPTH24_STENCIL8, GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8, GL_RED, GL_GREEN, GL_ZERO, GL_ZERO };
|
case PixelFormat::Depth24Stencil8: return GLTextureFormat{ GL_DEPTH24_STENCIL8, GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8, GL_RED, GL_GREEN, GL_ZERO, GL_ZERO };
|
||||||
case PixelFormat::Depth32F: return GLTextureFormat{ GL_DEPTH_COMPONENT32F, GL_DEPTH_COMPONENT, GL_FLOAT, GL_RED, GL_ZERO, GL_ZERO, GL_ZERO };
|
case PixelFormat::Depth32F: return GLTextureFormat{ GL_DEPTH_COMPONENT32F, GL_DEPTH_COMPONENT, GL_FLOAT, GL_RED, GL_ZERO, GL_ZERO, GL_ZERO };
|
||||||
case PixelFormat::Depth32FStencil8: return GLTextureFormat{ GL_DEPTH32F_STENCIL8, GL_DEPTH_STENCIL, GL_FLOAT_32_UNSIGNED_INT_24_8_REV, GL_RED, GL_GREEN, GL_ZERO, GL_ZERO };
|
case PixelFormat::Depth32FStencil8: return GLTextureFormat{ GL_DEPTH32F_STENCIL8, GL_DEPTH_STENCIL, GL_FLOAT_32_UNSIGNED_INT_24_8_REV, GL_RED, GL_GREEN, GL_ZERO, GL_ZERO };
|
||||||
|
case PixelFormat::L8: return GLTextureFormat{ GL_R8, GL_RED, GL_UNSIGNED_BYTE, GL_RED, GL_RED, GL_RED, GL_ONE };
|
||||||
|
case PixelFormat::LA8: return GLTextureFormat{ GL_RG8, GL_RG, GL_UNSIGNED_BYTE, GL_RED, GL_RED, GL_RED, GL_GREEN };
|
||||||
case PixelFormat::RGB8: return GLTextureFormat{ GL_RGB8, GL_RGB, GL_UNSIGNED_BYTE, GL_RED, GL_GREEN, GL_BLUE, GL_ONE };
|
case PixelFormat::RGB8: return GLTextureFormat{ GL_RGB8, GL_RGB, GL_UNSIGNED_BYTE, GL_RED, GL_GREEN, GL_BLUE, GL_ONE };
|
||||||
case PixelFormat::RGB8_SRGB: return GLTextureFormat{ GL_SRGB8, GL_RGB, GL_UNSIGNED_BYTE, GL_RED, GL_GREEN, GL_BLUE, GL_ONE };
|
case PixelFormat::RGB8_SRGB: return GLTextureFormat{ GL_SRGB8, GL_RGB, GL_UNSIGNED_BYTE, GL_RED, GL_GREEN, GL_BLUE, GL_ONE };
|
||||||
case PixelFormat::RGBA8: return GLTextureFormat{ GL_RGBA8, GL_RGBA, GL_UNSIGNED_BYTE, GL_RED, GL_GREEN, GL_BLUE, GL_ALPHA };
|
case PixelFormat::RGBA8: return GLTextureFormat{ GL_RGBA8, GL_RGBA, GL_UNSIGNED_BYTE, GL_RED, GL_GREEN, GL_BLUE, GL_ALPHA };
|
||||||
|
|
|
||||||
|
|
@ -78,6 +78,18 @@ namespace Nz
|
||||||
auto format = DescribeTextureFormat(m_params.pixelFormat);
|
auto format = DescribeTextureFormat(m_params.pixelFormat);
|
||||||
assert(format);
|
assert(format);
|
||||||
|
|
||||||
|
const GL::Context& context = m_texture.EnsureDeviceContext();
|
||||||
|
|
||||||
|
UInt8 bpp = PixelFormatInfo::GetBytesPerPixel(m_params.pixelFormat);
|
||||||
|
if (bpp % 8 == 0)
|
||||||
|
context.glPixelStorei(GL_UNPACK_ALIGNMENT, 8);
|
||||||
|
else if (bpp % 4 == 0)
|
||||||
|
context.glPixelStorei(GL_UNPACK_ALIGNMENT, 4);
|
||||||
|
else if (bpp % 2 == 0)
|
||||||
|
context.glPixelStorei(GL_UNPACK_ALIGNMENT, 2);
|
||||||
|
else
|
||||||
|
context.glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
|
||||||
|
|
||||||
switch (m_params.type)
|
switch (m_params.type)
|
||||||
{
|
{
|
||||||
case ImageType::E1D:
|
case ImageType::E1D:
|
||||||
|
|
|
||||||
|
|
@ -249,6 +249,19 @@ namespace Nz
|
||||||
// TODO: Fill this switch
|
// TODO: Fill this switch
|
||||||
switch (pixelFormat)
|
switch (pixelFormat)
|
||||||
{
|
{
|
||||||
|
case PixelFormat::A8:
|
||||||
|
{
|
||||||
|
createImage.format = VK_FORMAT_R8_UNORM;
|
||||||
|
createImageView.format = createImage.format;
|
||||||
|
createImageView.components = {
|
||||||
|
VK_COMPONENT_SWIZZLE_ONE,
|
||||||
|
VK_COMPONENT_SWIZZLE_ONE,
|
||||||
|
VK_COMPONENT_SWIZZLE_ONE,
|
||||||
|
VK_COMPONENT_SWIZZLE_R
|
||||||
|
};
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case PixelFormat::BGR8:
|
case PixelFormat::BGR8:
|
||||||
case PixelFormat::BGR8_SRGB:
|
case PixelFormat::BGR8_SRGB:
|
||||||
case PixelFormat::BGRA8:
|
case PixelFormat::BGRA8:
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue