Files
UnrealEngine/Engine/Source/ThirdParty/Android/detex/AndroidETCInternal.h
2025-05-18 13:04:45 +08:00

582 lines
17 KiB
C

/*
Copyright (c) 2015 Harm Hanemaaijer <fgenfb@yahoo.com>
Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
copyright notice and this permission notice appear in all copies.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
#pragma once
#include "CoreMinimal.h"
#include "AndroidETC.h"
#define DETEX_RESTRICT __restrict
#define DETEX_INLINE_ONLY /* __attribute__((always_inline)) inline */
#define detexSetErrorMessage(error)
/* Detex library pixel formats. */
enum {
/* The format has 16-bit components. */
DETEX_PIXEL_FORMAT_16BIT_COMPONENT_BIT = 0x1,
/* The format has 32-bit components. */
DETEX_PIXEL_FORMAT_32BIT_COMPONENT_BIT = 0x2,
/* The format has an alpha component. */
DETEX_PIXEL_FORMAT_ALPHA_COMPONENT_BIT = 0x4,
/* The sequential component order is RGB. */
DETEX_PIXEL_FORMAT_RGB_COMPONENT_ORDER_BIT = 0x0,
/* The sequential component order is BGR. */
DETEX_PIXEL_FORMAT_BGR_COMPONENT_ORDER_BIT = 0x8,
/* The format has one component. */
DETEX_PIXEL_FORMAT_ONE_COMPONENT_BITS = 0x0,
/* The format has two components. */
DETEX_PIXEL_FORMAT_TWO_COMPONENTS_BITS = 0x10,
/* The format has three components. */
DETEX_PIXEL_FORMAT_THREE_COMPONENTS_BITS = 0x20,
/* The format has four components. */
DETEX_PIXEL_FORMAT_FOUR_COMPONENTS_BITS = 0x30,
/* The format is stored as 8-bit pixels. */
DETEX_PIXEL_FORMAT_8BIT_PIXEL_BITS = 0x000,
/* The format is stored as 16-bit pixels. */
DETEX_PIXEL_FORMAT_16BIT_PIXEL_BITS = 0x100,
/* The format is stored as 24-bit pixels. */
DETEX_PIXEL_FORMAT_24BIT_PIXEL_BITS = 0x200,
/* The format is stored as 32-bit pixels. */
DETEX_PIXEL_FORMAT_32BIT_PIXEL_BITS = 0x300,
/* The format is stored as 48-bit pixels. */
DETEX_PIXEL_FORMAT_48BIT_PIXEL_BITS = 0x500,
/* The format is stored as 64-bit pixels. */
DETEX_PIXEL_FORMAT_64BIT_PIXEL_BITS = 0x700,
/* The format is stored as 96-bit pixels. */
DETEX_PIXEL_FORMAT_96BIT_PIXEL_BITS = 0xB00,
/* The format is stored as 128-bit pixels. */
DETEX_PIXEL_FORMAT_128BIT_PIXEL_BITS = 0xF00,
/* The format has signed integer components. */
DETEX_PIXEL_FORMAT_SIGNED_BIT = 0x1000,
/* The format has (half-)float components. */
DETEX_PIXEL_FORMAT_FLOAT_BIT = 0x2000,
/* The fomat is HDR (high dynamic range). */
DETEX_PIXEL_FORMAT_HDR_BIT = 0x4000,
DETEX_PIXEL_FORMAT_RGBA8 = (
DETEX_PIXEL_FORMAT_ALPHA_COMPONENT_BIT |
DETEX_PIXEL_FORMAT_FOUR_COMPONENTS_BITS |
DETEX_PIXEL_FORMAT_32BIT_PIXEL_BITS
),
DETEX_PIXEL_FORMAT_BGRA8 = (
DETEX_PIXEL_FORMAT_ALPHA_COMPONENT_BIT |
DETEX_PIXEL_FORMAT_BGR_COMPONENT_ORDER_BIT |
DETEX_PIXEL_FORMAT_FOUR_COMPONENTS_BITS |
DETEX_PIXEL_FORMAT_32BIT_PIXEL_BITS
),
DETEX_PIXEL_FORMAT_RGBX8 = (
DETEX_PIXEL_FORMAT_THREE_COMPONENTS_BITS |
DETEX_PIXEL_FORMAT_32BIT_PIXEL_BITS
),
DETEX_PIXEL_FORMAT_BGRX8 = (
DETEX_PIXEL_FORMAT_BGR_COMPONENT_ORDER_BIT |
DETEX_PIXEL_FORMAT_THREE_COMPONENTS_BITS |
DETEX_PIXEL_FORMAT_32BIT_PIXEL_BITS
),
DETEX_PIXEL_FORMAT_RGB8 = (
DETEX_PIXEL_FORMAT_THREE_COMPONENTS_BITS |
DETEX_PIXEL_FORMAT_24BIT_PIXEL_BITS
),
DETEX_PIXEL_FORMAT_BGR8 = (
DETEX_PIXEL_FORMAT_BGR_COMPONENT_ORDER_BIT |
DETEX_PIXEL_FORMAT_THREE_COMPONENTS_BITS |
DETEX_PIXEL_FORMAT_24BIT_PIXEL_BITS
),
DETEX_PIXEL_FORMAT_R8 = (
DETEX_PIXEL_FORMAT_ONE_COMPONENT_BITS |
DETEX_PIXEL_FORMAT_8BIT_PIXEL_BITS
),
DETEX_PIXEL_FORMAT_SIGNED_R8 = (
DETEX_PIXEL_FORMAT_ONE_COMPONENT_BITS |
DETEX_PIXEL_FORMAT_8BIT_PIXEL_BITS |
DETEX_PIXEL_FORMAT_SIGNED_BIT
),
DETEX_PIXEL_FORMAT_RG8 = (
DETEX_PIXEL_FORMAT_TWO_COMPONENTS_BITS |
DETEX_PIXEL_FORMAT_16BIT_PIXEL_BITS
),
DETEX_PIXEL_FORMAT_SIGNED_RG8 = (
DETEX_PIXEL_FORMAT_TWO_COMPONENTS_BITS |
DETEX_PIXEL_FORMAT_16BIT_PIXEL_BITS |
DETEX_PIXEL_FORMAT_SIGNED_BIT
),
DETEX_PIXEL_FORMAT_R16 = (
DETEX_PIXEL_FORMAT_16BIT_COMPONENT_BIT |
DETEX_PIXEL_FORMAT_ONE_COMPONENT_BITS |
DETEX_PIXEL_FORMAT_16BIT_PIXEL_BITS
),
DETEX_PIXEL_FORMAT_SIGNED_R16 = (
DETEX_PIXEL_FORMAT_16BIT_COMPONENT_BIT |
DETEX_PIXEL_FORMAT_ONE_COMPONENT_BITS |
DETEX_PIXEL_FORMAT_16BIT_PIXEL_BITS |
DETEX_PIXEL_FORMAT_SIGNED_BIT
),
DETEX_PIXEL_FORMAT_RG16 = (
DETEX_PIXEL_FORMAT_16BIT_COMPONENT_BIT |
DETEX_PIXEL_FORMAT_TWO_COMPONENTS_BITS |
DETEX_PIXEL_FORMAT_32BIT_PIXEL_BITS
),
DETEX_PIXEL_FORMAT_SIGNED_RG16 = (
DETEX_PIXEL_FORMAT_16BIT_COMPONENT_BIT |
DETEX_PIXEL_FORMAT_TWO_COMPONENTS_BITS |
DETEX_PIXEL_FORMAT_32BIT_PIXEL_BITS |
DETEX_PIXEL_FORMAT_SIGNED_BIT
),
DETEX_PIXEL_FORMAT_RGB16 = (
DETEX_PIXEL_FORMAT_16BIT_COMPONENT_BIT |
DETEX_PIXEL_FORMAT_THREE_COMPONENTS_BITS |
DETEX_PIXEL_FORMAT_48BIT_PIXEL_BITS
),
DETEX_PIXEL_FORMAT_RGBX16 = (
DETEX_PIXEL_FORMAT_16BIT_COMPONENT_BIT |
DETEX_PIXEL_FORMAT_THREE_COMPONENTS_BITS |
DETEX_PIXEL_FORMAT_64BIT_PIXEL_BITS
),
DETEX_PIXEL_FORMAT_RGBA16 = (
DETEX_PIXEL_FORMAT_16BIT_COMPONENT_BIT |
DETEX_PIXEL_FORMAT_ALPHA_COMPONENT_BIT |
DETEX_PIXEL_FORMAT_FOUR_COMPONENTS_BITS |
DETEX_PIXEL_FORMAT_64BIT_PIXEL_BITS
),
DETEX_PIXEL_FORMAT_FLOAT_R16 = (
DETEX_PIXEL_FORMAT_16BIT_COMPONENT_BIT |
DETEX_PIXEL_FORMAT_ONE_COMPONENT_BITS |
DETEX_PIXEL_FORMAT_16BIT_PIXEL_BITS |
DETEX_PIXEL_FORMAT_FLOAT_BIT
),
DETEX_PIXEL_FORMAT_FLOAT_R16_HDR = (
DETEX_PIXEL_FORMAT_16BIT_COMPONENT_BIT |
DETEX_PIXEL_FORMAT_ONE_COMPONENT_BITS |
DETEX_PIXEL_FORMAT_16BIT_PIXEL_BITS |
DETEX_PIXEL_FORMAT_FLOAT_BIT |
DETEX_PIXEL_FORMAT_HDR_BIT
),
DETEX_PIXEL_FORMAT_FLOAT_RG16 = (
DETEX_PIXEL_FORMAT_16BIT_COMPONENT_BIT |
DETEX_PIXEL_FORMAT_TWO_COMPONENTS_BITS |
DETEX_PIXEL_FORMAT_32BIT_PIXEL_BITS |
DETEX_PIXEL_FORMAT_FLOAT_BIT
),
DETEX_PIXEL_FORMAT_FLOAT_RG16_HDR = (
DETEX_PIXEL_FORMAT_16BIT_COMPONENT_BIT |
DETEX_PIXEL_FORMAT_TWO_COMPONENTS_BITS |
DETEX_PIXEL_FORMAT_32BIT_PIXEL_BITS |
DETEX_PIXEL_FORMAT_FLOAT_BIT |
DETEX_PIXEL_FORMAT_HDR_BIT
),
DETEX_PIXEL_FORMAT_FLOAT_RGBX16 = (
DETEX_PIXEL_FORMAT_16BIT_COMPONENT_BIT |
DETEX_PIXEL_FORMAT_THREE_COMPONENTS_BITS |
DETEX_PIXEL_FORMAT_64BIT_PIXEL_BITS |
DETEX_PIXEL_FORMAT_FLOAT_BIT
),
DETEX_PIXEL_FORMAT_FLOAT_RGBX16_HDR = (
DETEX_PIXEL_FORMAT_16BIT_COMPONENT_BIT |
DETEX_PIXEL_FORMAT_THREE_COMPONENTS_BITS |
DETEX_PIXEL_FORMAT_64BIT_PIXEL_BITS |
DETEX_PIXEL_FORMAT_FLOAT_BIT |
DETEX_PIXEL_FORMAT_HDR_BIT
),
DETEX_PIXEL_FORMAT_FLOAT_RGBA16 = (
DETEX_PIXEL_FORMAT_16BIT_COMPONENT_BIT |
DETEX_PIXEL_FORMAT_ALPHA_COMPONENT_BIT |
DETEX_PIXEL_FORMAT_FOUR_COMPONENTS_BITS |
DETEX_PIXEL_FORMAT_64BIT_PIXEL_BITS |
DETEX_PIXEL_FORMAT_FLOAT_BIT |
DETEX_PIXEL_FORMAT_HDR_BIT
),
DETEX_PIXEL_FORMAT_FLOAT_RGBA16_HDR = (
DETEX_PIXEL_FORMAT_16BIT_COMPONENT_BIT |
DETEX_PIXEL_FORMAT_ALPHA_COMPONENT_BIT |
DETEX_PIXEL_FORMAT_FOUR_COMPONENTS_BITS |
DETEX_PIXEL_FORMAT_64BIT_PIXEL_BITS |
DETEX_PIXEL_FORMAT_FLOAT_BIT
),
DETEX_PIXEL_FORMAT_FLOAT_RGB16 = (
DETEX_PIXEL_FORMAT_16BIT_COMPONENT_BIT |
DETEX_PIXEL_FORMAT_THREE_COMPONENTS_BITS |
DETEX_PIXEL_FORMAT_48BIT_PIXEL_BITS |
DETEX_PIXEL_FORMAT_FLOAT_BIT
),
DETEX_PIXEL_FORMAT_FLOAT_RGB16_HDR = (
DETEX_PIXEL_FORMAT_16BIT_COMPONENT_BIT |
DETEX_PIXEL_FORMAT_THREE_COMPONENTS_BITS |
DETEX_PIXEL_FORMAT_48BIT_PIXEL_BITS |
DETEX_PIXEL_FORMAT_FLOAT_BIT |
DETEX_PIXEL_FORMAT_HDR_BIT
),
DETEX_PIXEL_FORMAT_FLOAT_BGRX16 = (
DETEX_PIXEL_FORMAT_16BIT_COMPONENT_BIT |
DETEX_PIXEL_FORMAT_BGR_COMPONENT_ORDER_BIT |
DETEX_PIXEL_FORMAT_THREE_COMPONENTS_BITS |
DETEX_PIXEL_FORMAT_64BIT_PIXEL_BITS |
DETEX_PIXEL_FORMAT_FLOAT_BIT
),
DETEX_PIXEL_FORMAT_FLOAT_BGRX16_HDR = (
DETEX_PIXEL_FORMAT_16BIT_COMPONENT_BIT |
DETEX_PIXEL_FORMAT_BGR_COMPONENT_ORDER_BIT |
DETEX_PIXEL_FORMAT_THREE_COMPONENTS_BITS |
DETEX_PIXEL_FORMAT_64BIT_PIXEL_BITS |
DETEX_PIXEL_FORMAT_FLOAT_BIT |
DETEX_PIXEL_FORMAT_HDR_BIT
),
DETEX_PIXEL_FORMAT_SIGNED_FLOAT_RGBX16 = (
DETEX_PIXEL_FORMAT_16BIT_COMPONENT_BIT |
DETEX_PIXEL_FORMAT_THREE_COMPONENTS_BITS |
DETEX_PIXEL_FORMAT_64BIT_PIXEL_BITS |
DETEX_PIXEL_FORMAT_SIGNED_BIT |
DETEX_PIXEL_FORMAT_FLOAT_BIT
),
DETEX_PIXEL_FORMAT_SIGNED_FLOAT_BGRX16 = (
DETEX_PIXEL_FORMAT_16BIT_COMPONENT_BIT |
DETEX_PIXEL_FORMAT_BGR_COMPONENT_ORDER_BIT |
DETEX_PIXEL_FORMAT_THREE_COMPONENTS_BITS |
DETEX_PIXEL_FORMAT_64BIT_PIXEL_BITS |
DETEX_PIXEL_FORMAT_SIGNED_BIT |
DETEX_PIXEL_FORMAT_FLOAT_BIT
),
DETEX_PIXEL_FORMAT_FLOAT_R32 = (
DETEX_PIXEL_FORMAT_32BIT_COMPONENT_BIT |
DETEX_PIXEL_FORMAT_ONE_COMPONENT_BITS |
DETEX_PIXEL_FORMAT_32BIT_PIXEL_BITS |
DETEX_PIXEL_FORMAT_FLOAT_BIT
),
DETEX_PIXEL_FORMAT_FLOAT_R32_HDR = (
DETEX_PIXEL_FORMAT_32BIT_COMPONENT_BIT |
DETEX_PIXEL_FORMAT_ONE_COMPONENT_BITS |
DETEX_PIXEL_FORMAT_32BIT_PIXEL_BITS |
DETEX_PIXEL_FORMAT_FLOAT_BIT |
DETEX_PIXEL_FORMAT_HDR_BIT
),
DETEX_PIXEL_FORMAT_FLOAT_RG32 = (
DETEX_PIXEL_FORMAT_32BIT_COMPONENT_BIT |
DETEX_PIXEL_FORMAT_TWO_COMPONENTS_BITS |
DETEX_PIXEL_FORMAT_64BIT_PIXEL_BITS |
DETEX_PIXEL_FORMAT_FLOAT_BIT
),
DETEX_PIXEL_FORMAT_FLOAT_RG32_HDR = (
DETEX_PIXEL_FORMAT_32BIT_COMPONENT_BIT |
DETEX_PIXEL_FORMAT_TWO_COMPONENTS_BITS |
DETEX_PIXEL_FORMAT_64BIT_PIXEL_BITS |
DETEX_PIXEL_FORMAT_FLOAT_BIT |
DETEX_PIXEL_FORMAT_HDR_BIT
),
DETEX_PIXEL_FORMAT_FLOAT_RGB32 = (
DETEX_PIXEL_FORMAT_32BIT_COMPONENT_BIT |
DETEX_PIXEL_FORMAT_THREE_COMPONENTS_BITS |
DETEX_PIXEL_FORMAT_96BIT_PIXEL_BITS |
DETEX_PIXEL_FORMAT_FLOAT_BIT
),
DETEX_PIXEL_FORMAT_FLOAT_RGB32_HDR = (
DETEX_PIXEL_FORMAT_32BIT_COMPONENT_BIT |
DETEX_PIXEL_FORMAT_THREE_COMPONENTS_BITS |
DETEX_PIXEL_FORMAT_96BIT_PIXEL_BITS |
DETEX_PIXEL_FORMAT_FLOAT_BIT |
DETEX_PIXEL_FORMAT_HDR_BIT
),
DETEX_PIXEL_FORMAT_FLOAT_RGBX32 = (
DETEX_PIXEL_FORMAT_32BIT_COMPONENT_BIT |
DETEX_PIXEL_FORMAT_THREE_COMPONENTS_BITS |
DETEX_PIXEL_FORMAT_128BIT_PIXEL_BITS |
DETEX_PIXEL_FORMAT_FLOAT_BIT
),
DETEX_PIXEL_FORMAT_FLOAT_RGBX32_HDR = (
DETEX_PIXEL_FORMAT_32BIT_COMPONENT_BIT |
DETEX_PIXEL_FORMAT_THREE_COMPONENTS_BITS |
DETEX_PIXEL_FORMAT_128BIT_PIXEL_BITS |
DETEX_PIXEL_FORMAT_FLOAT_BIT |
DETEX_PIXEL_FORMAT_HDR_BIT
),
DETEX_PIXEL_FORMAT_FLOAT_RGBA32 = (
DETEX_PIXEL_FORMAT_32BIT_COMPONENT_BIT |
DETEX_PIXEL_FORMAT_ALPHA_COMPONENT_BIT |
DETEX_PIXEL_FORMAT_FOUR_COMPONENTS_BITS |
DETEX_PIXEL_FORMAT_128BIT_PIXEL_BITS |
DETEX_PIXEL_FORMAT_FLOAT_BIT
),
DETEX_PIXEL_FORMAT_FLOAT_RGBA32_HDR = (
DETEX_PIXEL_FORMAT_32BIT_COMPONENT_BIT |
DETEX_PIXEL_FORMAT_ALPHA_COMPONENT_BIT |
DETEX_PIXEL_FORMAT_FOUR_COMPONENTS_BITS |
DETEX_PIXEL_FORMAT_128BIT_PIXEL_BITS |
DETEX_PIXEL_FORMAT_FLOAT_BIT |
DETEX_PIXEL_FORMAT_HDR_BIT
),
DETEX_PIXEL_FORMAT_A8 = (
DETEX_PIXEL_FORMAT_ALPHA_COMPONENT_BIT |
DETEX_PIXEL_FORMAT_ONE_COMPONENT_BITS |
DETEX_PIXEL_FORMAT_8BIT_PIXEL_BITS
),
};
void detexConvertHalfFloatToFloat(uint16_t *source_buffer, int n, float *target_buffer);
void detexConvertFloatToHalfFloat(float *source_buffer, int n, uint16_t *target_buffer);
void detexConvertNormalizedHalfFloatToUInt16(uint16_t *buffer, int n);
void detexConvertNormalizedFloatToUInt16(float * DETEX_RESTRICT source_buffer, int n, uint16_t * DETEX_RESTRICT target_buffer);
void detexConvertHDRHalfFloatToUInt16(uint16_t *buffer, int n);
void detexConvertHDRFloatToFloat(float *buffer, int n);
bool detexConvertPixels(uint8_t * DETEX_RESTRICT source_pixel_buffer, uint32_t nu_pixels, uint32_t source_pixel_format, uint8_t * DETEX_RESTRICT target_pixel_buffer, uint32_t target_pixel_format);
extern float *detex_half_float_table;
void detexValidateHalfFloatTable();
static DETEX_INLINE_ONLY float detexGetFloatFromHalfFloat(uint16_t hf) {
return detex_half_float_table[hf];
}
/* Return pixel size in bytes for pixel format or texture format (decompressed). */
static DETEX_INLINE_ONLY int detexGetPixelSize(uint32_t pixel_format)
{
return 1 + ((pixel_format & 0xF00) >> 8);
}
#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ || !defined(__BYTE_ORDER__)
static DETEX_INLINE_ONLY uint32_t detexPack32RGBA8(int r, int g, int b, int a)
{
return (uint32_t)r | ((uint32_t)g << 8) | ((uint32_t)b << 16) | ((uint32_t)a << 24);
}
static DETEX_INLINE_ONLY uint32_t detexPack32RGB8Alpha0xFF(int r, int g, int b)
{
return detexPack32RGBA8(r, g, b, 0xFF);
}
static DETEX_INLINE_ONLY uint32_t detexPack32R8(int r)
{
return (uint32_t)r;
}
static DETEX_INLINE_ONLY uint32_t detexPack32G8(int g)
{
return (uint32_t)g << 8;
}
static DETEX_INLINE_ONLY uint32_t detexPack32B8(int b)
{
return (uint32_t)b << 16;
}
static DETEX_INLINE_ONLY uint32_t detexPack32A8(int a)
{
return (uint32_t)a << 24;
}
static DETEX_INLINE_ONLY uint32_t detexPack32RG8(uint32_t r8, uint32_t g8)
{
return r8 | (g8 << 8);
}
static DETEX_INLINE_ONLY uint32_t detexPack32R16(uint32_t r16)
{
return r16;
}
static DETEX_INLINE_ONLY uint32_t detexPack32G16(uint32_t g16)
{
return g16 << 16;
}
static DETEX_INLINE_ONLY uint32_t detexPack32RG16(uint32_t r16, uint32_t g16)
{
return r16 | (g16 << 16);
}
static DETEX_INLINE_ONLY uint64_t detexPack64R16(uint32_t r16)
{
return r16;
}
static DETEX_INLINE_ONLY uint64_t detexPack64G16(uint32_t g16)
{
return g16 << 16;
}
static DETEX_INLINE_ONLY uint64_t detexPack64B16(uint32_t b16)
{
return (uint64_t)b16 << 32;
}
static DETEX_INLINE_ONLY uint64_t detexPack64A16(uint32_t a16)
{
return (uint64_t)a16 << 48;
}
static DETEX_INLINE_ONLY uint64_t detexPack64RGB16(uint16_t r16, uint16_t g16, uint16_t b16)
{
return (uint64_t)r16 | ((uint64_t)g16 << 16) | ((uint64_t)b16 << 32);
}
static DETEX_INLINE_ONLY uint64_t detexPack64RGBA16(uint16_t r16, uint16_t g16, uint16_t b16, uint16_t a16)
{
return (uint64_t)r16 | ((uint64_t)g16 << 16) | ((uint64_t)b16 << 32) | ((uint64_t)a16 << 48);
}
static DETEX_INLINE_ONLY uint32_t detexPixel32GetR8(uint32_t pixel)
{
return pixel & 0xFF;
}
static DETEX_INLINE_ONLY uint32_t detexPixel32GetG8(uint32_t pixel)
{
return (pixel & 0xFF00) >> 8;
}
static DETEX_INLINE_ONLY uint32_t detexPixel32GetB8(uint32_t pixel)
{
return (pixel & 0xFF0000) >> 16;
}
static DETEX_INLINE_ONLY uint32_t detexPixel32GetA8(uint32_t pixel)
{
return (pixel & 0xFF000000) >> 24;
}
static DETEX_INLINE_ONLY int detexPixel32GetSignedR8(uint32_t pixel)
{
return (int8_t)(pixel & 0xFF);
}
static DETEX_INLINE_ONLY int detexPixel32GetSignedG8(uint32_t pixel)
{
return (int8_t)((pixel & 0xFF00) >> 8);
}
static DETEX_INLINE_ONLY uint32_t detexPixel32GetR16(uint32_t pixel)
{
return pixel & 0x0000FFFF;
}
static DETEX_INLINE_ONLY uint32_t detexPixel32GetG16(uint32_t pixel)
{
return (pixel & 0xFFFF0000) >> 16;
}
static DETEX_INLINE_ONLY int detexPixel32GetSignedR16(uint32_t pixel)
{
return (int16_t)(pixel & 0x0000FFFF);
}
static DETEX_INLINE_ONLY int detexPixel32GetSignedG16(uint32_t pixel)
{
return (int16_t)((pixel & 0xFFFF0000) >> 16);
}
static DETEX_INLINE_ONLY uint64_t detexPixel64GetR16(uint64_t pixel)
{
return pixel & 0xFFFF;
}
static DETEX_INLINE_ONLY uint64_t detexPixel64GetG16(uint64_t pixel)
{
return (pixel & 0xFFFF0000) >> 16;
}
static DETEX_INLINE_ONLY uint64_t detexPixel64GetB16(uint64_t pixel)
{
return (pixel & 0xFFFF00000000) >> 32;
}
static DETEX_INLINE_ONLY uint64_t detexPixel64GetA16(uint64_t pixel)
{
return (pixel & 0xFFFF000000000000) >> 48;
}
#define DETEX_PIXEL32_ALPHA_BYTE_OFFSET 3
#else
#error Big-endian byte order not supported.
static DETEX_INLINE_ONLY uint32_t detexPack32RGBA8(int r, int g, int b, int a)
{
return a | ((uint32_t)b << 8) | ((uint32_t)g << 16) | ((uint32_t)r << 24);
}
static DETEX_INLINE_ONLY uint32_t detexPack32RGB8Alpha0xFF(int r, int g, int b)
{
return pack_rgba(r, g, b, 0xFF);
}
static DETEX_INLINE_ONLY uint32_t detexPack32R8(int r)
{
return (uint32_t)r << 24;
}
static DETEX_INLINE_ONLY uint32_t detexPack32G8(int g)
{
return (uint32_t)g << 16;
}
static DETEX_INLINE_ONLY uint32_t detexPack32B8(int b)
{
return (uint32_t)b << 8;
}
static DETEX_INLINE_ONLY uint32_t detexPack32A8(int a)
{
return a;
}
static DETEX_INLINE_ONLY uint32_t detexPack32RG16(uint32_t r16, uint32_t g16)
{
return g16 | (r16 << 16);
}
static DETEX_INLINE_ONLY int detexPixel32GetR8(uint32_t pixel)
{
return (pixel & 0xFF000000) >> 24;
}
static DETEX_INLINE_ONLY int detexPixel32GetG8(uint32_t pixel)
{
return (pixel & 0xFF0000) >> 16;
}
static DETEX_INLINE_ONLY int detexPixel32GetB8(uint32_t pixel)
{
return (pixel & 0xFF00) >> 8;
}
static DETEX_INLINE_ONLY int detexPixel32GetA8(uint32_t pixel)
{
return pixel & 0xFF;
}
static DETEX_INLINE_ONLY uint32_t detexPixel32GetR16(uint32_t pixel)
{
return ((pixel & 0xFF000000) >> 24) | ((pixel & 0x00FF0000) >> 8);
}
static DETEX_INLINE_ONLY uint32_t detexPixel32GetG16(uint32_t pixel)
{
return ((pixel & 0x0000FF00) >> 8) | ((pixel & 0x000000FF) << 8);
}
#define DETEX_PIXEL32_ALPHA_BYTE_OFFSET 0
#endif