mirror of
https://github.com/love2d/love.git
synced 2026-08-15 15:51:12 +02:00
197 lines
5.3 KiB
C++
197 lines
5.3 KiB
C++
/**
|
|
* Copyright (c) 2006-2020 LOVE Development Team
|
|
*
|
|
* This software is provided 'as-is', without any express or implied
|
|
* warranty. In no event will the authors be held liable for any damages
|
|
* arising from the use of this software.
|
|
*
|
|
* Permission is granted to anyone to use this software for any purpose,
|
|
* including commercial applications, and to alter it and redistribute it
|
|
* freely, subject to the following restrictions:
|
|
*
|
|
* 1. The origin of this software must not be misrepresented; you must not
|
|
* claim that you wrote the original software. If you use this software
|
|
* in a product, an acknowledgment in the product documentation would be
|
|
* appreciated but is not required.
|
|
* 2. Altered source versions must be plainly marked as such, and must not be
|
|
* misrepresented as being the original software.
|
|
* 3. This notice may not be removed or altered from any source distribution.
|
|
**/
|
|
|
|
#pragma once
|
|
|
|
#include "stddef.h"
|
|
|
|
namespace love
|
|
{
|
|
|
|
enum PixelFormat
|
|
{
|
|
PIXELFORMAT_UNKNOWN,
|
|
|
|
// these are converted to an actual format by love
|
|
PIXELFORMAT_NORMAL,
|
|
PIXELFORMAT_HDR,
|
|
|
|
// 1-channel normal formats
|
|
PIXELFORMAT_R8_UNORM,
|
|
PIXELFORMAT_R16_UNORM,
|
|
PIXELFORMAT_R16_FLOAT,
|
|
PIXELFORMAT_R32_FLOAT,
|
|
|
|
// 2-channel normal formats
|
|
PIXELFORMAT_RG8_UNORM,
|
|
PIXELFORMAT_LA8_UNORM, // Same as RG8, but accessed as (L, L, L, A)
|
|
PIXELFORMAT_RG16_UNORM,
|
|
PIXELFORMAT_RG16_FLOAT,
|
|
PIXELFORMAT_RG32_FLOAT,
|
|
|
|
// 4-channel normal formats
|
|
PIXELFORMAT_RGBA8_UNORM,
|
|
PIXELFORMAT_sRGBA8_UNORM,
|
|
PIXELFORMAT_RGBA16_UNORM,
|
|
PIXELFORMAT_RGBA16_FLOAT,
|
|
PIXELFORMAT_RGBA32_FLOAT,
|
|
|
|
// packed formats
|
|
PIXELFORMAT_RGBA4_UNORM, // LSB->MSB: [a, b, g, r]
|
|
PIXELFORMAT_RGB5A1_UNORM, // LSB->MSB: [a, b, g, r]
|
|
PIXELFORMAT_RGB565_UNORM, // LSB->MSB: [b, g, r]
|
|
PIXELFORMAT_RGB10A2_UNORM, // LSB->MSB: [r, g, b, a]
|
|
PIXELFORMAT_RG11B10_FLOAT, // LSB->MSB: [r, g, b]
|
|
|
|
// depth/stencil formats
|
|
PIXELFORMAT_STENCIL8,
|
|
PIXELFORMAT_DEPTH16_UNORM,
|
|
PIXELFORMAT_DEPTH24_UNORM,
|
|
PIXELFORMAT_DEPTH32_FLOAT,
|
|
PIXELFORMAT_DEPTH24_UNORM_STENCIL8,
|
|
PIXELFORMAT_DEPTH32_FLOAT_STENCIL8,
|
|
|
|
// compressed formats
|
|
PIXELFORMAT_DXT1_UNORM,
|
|
PIXELFORMAT_DXT3_UNORM,
|
|
PIXELFORMAT_DXT5_UNORM,
|
|
PIXELFORMAT_BC4_UNORM,
|
|
PIXELFORMAT_BC4_SNORM,
|
|
PIXELFORMAT_BC5_UNORM,
|
|
PIXELFORMAT_BC5_SNORM,
|
|
PIXELFORMAT_BC6H_UFLOAT,
|
|
PIXELFORMAT_BC6H_FLOAT,
|
|
PIXELFORMAT_BC7_UNORM,
|
|
PIXELFORMAT_PVR1_RGB2_UNORM,
|
|
PIXELFORMAT_PVR1_RGB4_UNORM,
|
|
PIXELFORMAT_PVR1_RGBA2_UNORM,
|
|
PIXELFORMAT_PVR1_RGBA4_UNORM,
|
|
PIXELFORMAT_ETC1_UNORM,
|
|
PIXELFORMAT_ETC2_RGB_UNORM,
|
|
PIXELFORMAT_ETC2_RGBA_UNORM,
|
|
PIXELFORMAT_ETC2_RGBA1_UNORM,
|
|
PIXELFORMAT_EAC_R_UNORM,
|
|
PIXELFORMAT_EAC_R_SNORM,
|
|
PIXELFORMAT_EAC_RG_UNORM,
|
|
PIXELFORMAT_EAC_RG_SNORM,
|
|
PIXELFORMAT_ASTC_4x4,
|
|
PIXELFORMAT_ASTC_5x4,
|
|
PIXELFORMAT_ASTC_5x5,
|
|
PIXELFORMAT_ASTC_6x5,
|
|
PIXELFORMAT_ASTC_6x6,
|
|
PIXELFORMAT_ASTC_8x5,
|
|
PIXELFORMAT_ASTC_8x6,
|
|
PIXELFORMAT_ASTC_8x8,
|
|
PIXELFORMAT_ASTC_10x5,
|
|
PIXELFORMAT_ASTC_10x6,
|
|
PIXELFORMAT_ASTC_10x8,
|
|
PIXELFORMAT_ASTC_10x10,
|
|
PIXELFORMAT_ASTC_12x10,
|
|
PIXELFORMAT_ASTC_12x12,
|
|
|
|
PIXELFORMAT_MAX_ENUM
|
|
};
|
|
|
|
struct PixelFormatInfo
|
|
{
|
|
int components;
|
|
size_t blockWidth;
|
|
size_t blockHeight;
|
|
size_t blockSize;
|
|
bool color;
|
|
bool depth;
|
|
bool stencil;
|
|
bool compressed;
|
|
};
|
|
|
|
bool getConstant(PixelFormat in, const char *&out);
|
|
bool getConstant(const char *in, PixelFormat &out);
|
|
|
|
const PixelFormatInfo &getPixelFormatInfo(PixelFormat format);
|
|
|
|
/**
|
|
* Gets whether the specified pixel format is a compressed type.
|
|
**/
|
|
bool isPixelFormatCompressed(PixelFormat format);
|
|
|
|
/**
|
|
* Gets whether the specified pixel format is a depth or stencil type.
|
|
**/
|
|
bool isPixelFormatDepthStencil(PixelFormat format);
|
|
|
|
/**
|
|
* Gets whether the specified pixel format is a depth type.
|
|
**/
|
|
bool isPixelFormatDepth(PixelFormat format);
|
|
|
|
/**
|
|
* Gets whether the specified pixel format is a stencil type.
|
|
**/
|
|
bool isPixelFormatStencil(PixelFormat format);
|
|
|
|
/**
|
|
* Gets the sRGB version of a linear pixel format, if applicable.
|
|
**/
|
|
PixelFormat getSRGBPixelFormat(PixelFormat format);
|
|
|
|
/**
|
|
* Gets the linear version of a sRGB pixel format, if applicable.
|
|
**/
|
|
PixelFormat getLinearPixelFormat(PixelFormat format);
|
|
|
|
/**
|
|
* Gets the block size in bytes of the specified pixel format.
|
|
* This is the size in bytes of a pixel for uncompressed formats, but *not*
|
|
* for compressed formats!
|
|
**/
|
|
size_t getPixelFormatBlockSize(PixelFormat format);
|
|
|
|
/**
|
|
* Gets the size in bytes of a row of an uncompressed pixel format.
|
|
**/
|
|
size_t getPixelFormatUncompressedRowSize(PixelFormat format, int width);
|
|
|
|
/**
|
|
* Gets the size in bytes of a row of a compressed pixel format. This is the
|
|
* number of blocks used by the given width, multiplied by the block size. The
|
|
* number of rows of blocks for a given height can be computed by
|
|
* getPixelFormatCompressedBlockRowCount.
|
|
**/
|
|
size_t getPixelFormatCompressedBlockRowSize(PixelFormat format, int width);
|
|
|
|
/**
|
|
* Gets the number of rows of blocks the given compressed pixel format will use,
|
|
* for the given height in pixels.
|
|
**/
|
|
size_t getPixelFormatCompressedBlockRowCount(PixelFormat format, int height);
|
|
|
|
/**
|
|
* Gets the size in bytes of a slice (width x height 2D plane) which uses the
|
|
* given pixel format.
|
|
**/
|
|
size_t getPixelFormatSliceSize(PixelFormat format, int width, int height);
|
|
|
|
/**
|
|
* Gets the number of color components in the given pixel format.
|
|
**/
|
|
int getPixelFormatColorComponents(PixelFormat format);
|
|
|
|
} // love
|