diff options
author | Patrick Rudolph <siro@das-labor.org> | 2016-09-02 15:30:17 +0200 |
---|---|---|
committer | Jose Fonseca <jfonseca@vmware.com> | 2016-09-21 11:48:49 +0100 |
commit | ada2111fe61aa582bc01c22c27986ba41257de3a (patch) | |
tree | e88986736ca32c7e8d3e60b9f07db8beb5cbb2cd | |
parent | 209c426e7d83cd6021b84590e84be282dd305e2a (diff) |
d3dretrace: Add support for quad channel formats
Add formats D3DFMT_A8R8G8B8 and D3DFMT_A8B8G8R8.
Signed-off-by: Patrick Rudolph <siro@das-labor.org>
-rw-r--r-- | retrace/d3d9state_formats.cpp | 23 |
1 files changed, 21 insertions, 2 deletions
diff --git a/retrace/d3d9state_formats.cpp b/retrace/d3d9state_formats.cpp index 9651e16d..9c128aff 100644 --- a/retrace/d3d9state_formats.cpp +++ b/retrace/d3d9state_formats.cpp @@ -175,13 +175,17 @@ ConvertImage(D3DFORMAT SrcFormat, unsigned numChannels; image::ChannelType channelType; switch (SrcFormat) { + case D3DFMT_A8R8G8B8: + case D3DFMT_A8B8G8R8: + numChannels = 4; + channelType = image::TYPE_UNORM8; + break; case D3DFMT_A32B32G32R32F: case D3DFMT_A16B16G16R16F: numChannels = 4; channelType = image::TYPE_FLOAT; break; case D3DFMT_X8R8G8B8: - case D3DFMT_A8R8G8B8: case D3DFMT_R5G6B5: numChannels = 3; channelType = image::TYPE_UNORM8; @@ -228,6 +232,22 @@ ConvertImage(D3DFORMAT SrcFormat, src = (const unsigned char *)SrcData; for (unsigned y = 0; y < Height; ++y) { switch (SrcFormat) { + case D3DFMT_A8R8G8B8: + for (unsigned x = 0; x < Width; ++x) { + dst[4*x + 0] = src[4*x + 2]; + dst[4*x + 1] = src[4*x + 1]; + dst[4*x + 2] = src[4*x + 0]; + dst[4*x + 3] = src[4*x + 3]; + } + break; + case D3DFMT_A8B8G8R8: + for (unsigned x = 0; x < Width; ++x) { + dst[4*x + 0] = src[4*x + 0]; + dst[4*x + 1] = src[4*x + 1]; + dst[4*x + 2] = src[4*x + 2]; + dst[4*x + 3] = src[4*x + 3]; + } + break; case D3DFMT_R5G6B5: for (unsigned x = 0; x < Width; ++x) { uint32_t pixel = ((const uint16_t *)src)[x]; @@ -237,7 +257,6 @@ ConvertImage(D3DFORMAT SrcFormat, } break; case D3DFMT_X8R8G8B8: - case D3DFMT_A8R8G8B8: for (unsigned x = 0; x < Width; ++x) { dst[3*x + 0] = src[4*x + 2]; dst[3*x + 1] = src[4*x + 1]; |