Added a lot more texture formats

Former-commit-id: b3a553ea39a174d84c5cd6fcca853ee83c1e6670
This commit is contained in:
Lynix 2013-09-06 12:07:38 +02:00
parent ae7c54a9fc
commit 0fd535a9e8
4 changed files with 394 additions and 29 deletions

View File

@ -152,25 +152,49 @@ enum nzPixelFormat
{
nzPixelFormat_Undefined = -1,
nzPixelFormat_BGR8, // 3*nzUInt8
nzPixelFormat_BGRA8, // 4*nzUInt8
nzPixelFormat_BGR8, // 3*uint8
nzPixelFormat_BGRA8, // 4*uint8
nzPixelFormat_DXT1,
nzPixelFormat_DXT3,
nzPixelFormat_DXT5,
nzPixelFormat_L8, // 1*nzUInt8
nzPixelFormat_LA8, // 2*nzUInt8
nzPixelFormat_RGB5A1, // 1*nzUInt16
nzPixelFormat_RGB8, // 3*nzUInt8
nzPixelFormat_RGB16F,
nzPixelFormat_RGB16I, // 4*nzUInt16
nzPixelFormat_L8, // 1*uint8
nzPixelFormat_LA8, // 2*uint8
nzPixelFormat_R8, // 1*uint8
nzPixelFormat_R8I, // 1*int8
nzPixelFormat_R8UI, // 1*uint8
nzPixelFormat_R16, // 1*uint16
nzPixelFormat_R16F, // 1*half
nzPixelFormat_R16I, // 1*int16
nzPixelFormat_R16UI, // 1*uint16
nzPixelFormat_R32F, // 1*float
nzPixelFormat_R32I, // 1*uint16
nzPixelFormat_R32UI, // 1*uint32
nzPixelFormat_RG8, // 2*int8
nzPixelFormat_RG8I, // 2*int8
nzPixelFormat_RG8UI, // 2*uint8
nzPixelFormat_RG16, // 2*uint16
nzPixelFormat_RG16F, // 2*half
nzPixelFormat_RG16I, // 2*int16
nzPixelFormat_RG16UI, // 2*uint16
nzPixelFormat_RG32F, // 2*float
nzPixelFormat_RG32I, // 2*uint16
nzPixelFormat_RG32UI, // 2*uint32
nzPixelFormat_RGB5A1, // 3*uint5 + alpha bit
nzPixelFormat_RGB8, // 3*uint8
nzPixelFormat_RGB16F, // 3*half
nzPixelFormat_RGB16I, // 4*int16
nzPixelFormat_RGB16UI, // 4*uint16
nzPixelFormat_RGB32F, // 3*float
nzPixelFormat_RGB32I, // 4*nzUInt32
nzPixelFormat_RGBA4, // 1*nzUInt16
nzPixelFormat_RGBA8, // 4*nzUInt8
nzPixelFormat_RGBA16F,
nzPixelFormat_RGBA16I, // 4*nzUInt16
nzPixelFormat_RGB32I, // 4*int32
nzPixelFormat_RGB32UI, // 4*uint32
nzPixelFormat_RGBA4, // 4*uint4
nzPixelFormat_RGBA8, // 4*uint8
nzPixelFormat_RGBA16F, // 4*half
nzPixelFormat_RGBA16I, // 4*int16
nzPixelFormat_RGBA16UI, // 4*uint16
nzPixelFormat_RGBA32F, // 4*float
nzPixelFormat_RGBA32I, // 4*nzUInt32
nzPixelFormat_RGBA32I, // 4*int32
nzPixelFormat_RGBA32UI, // 4*uint32
nzPixelFormat_Depth16,
nzPixelFormat_Depth24,
nzPixelFormat_Depth24Stencil8,

View File

@ -189,28 +189,56 @@ inline nzUInt8 NzPixelFormat::GetBitsPerPixel(nzPixelFormat format)
case nzPixelFormat_LA8:
return 16;
case nzPixelFormat_RGB16F:
return 48;
case nzPixelFormat_R8:
case nzPixelFormat_R8I:
case nzPixelFormat_R8UI:
return 8;
case nzPixelFormat_R16:
case nzPixelFormat_R16F:
case nzPixelFormat_R16I:
case nzPixelFormat_R16UI:
return 16;
case nzPixelFormat_R32F:
case nzPixelFormat_R32I:
case nzPixelFormat_R32UI:
return 32;
case nzPixelFormat_RG8:
case nzPixelFormat_RG8I:
case nzPixelFormat_RG8UI:
return 16;
case nzPixelFormat_RG16:
case nzPixelFormat_RG16F:
case nzPixelFormat_RG16I:
case nzPixelFormat_RG16UI:
return 32;
case nzPixelFormat_RG32F:
case nzPixelFormat_RG32I:
case nzPixelFormat_RG32UI:
return 64;
case nzPixelFormat_RGB16F:
case nzPixelFormat_RGB16I:
case nzPixelFormat_RGB16UI:
return 48;
case nzPixelFormat_RGB32F:
return 96;
case nzPixelFormat_RGB32I:
case nzPixelFormat_RGB32UI:
return 96;
case nzPixelFormat_RGBA16F:
return 64;
case nzPixelFormat_RGBA16I:
case nzPixelFormat_RGBA16UI:
return 64;
case nzPixelFormat_RGBA32F:
return 128;
case nzPixelFormat_RGBA32I:
case nzPixelFormat_RGBA32UI:
return 128;
case nzPixelFormat_RGBA4:
@ -280,18 +308,42 @@ inline nzPixelFormatType NzPixelFormat::GetType(nzPixelFormat format)
case nzPixelFormat_DXT5:
case nzPixelFormat_L8:
case nzPixelFormat_LA8:
case nzPixelFormat_R8:
case nzPixelFormat_R8I:
case nzPixelFormat_R8UI:
case nzPixelFormat_R16:
case nzPixelFormat_R16F:
case nzPixelFormat_R16I:
case nzPixelFormat_R16UI:
case nzPixelFormat_R32F:
case nzPixelFormat_R32I:
case nzPixelFormat_R32UI:
case nzPixelFormat_RG8:
case nzPixelFormat_RG8I:
case nzPixelFormat_RG8UI:
case nzPixelFormat_RG16:
case nzPixelFormat_RG16F:
case nzPixelFormat_RG16I:
case nzPixelFormat_RG16UI:
case nzPixelFormat_RG32F:
case nzPixelFormat_RG32I:
case nzPixelFormat_RG32UI:
case nzPixelFormat_RGB5A1:
case nzPixelFormat_RGB8:
case nzPixelFormat_RGB16F:
case nzPixelFormat_RGB16I:
case nzPixelFormat_RGB16UI:
case nzPixelFormat_RGB32F:
case nzPixelFormat_RGB32I:
case nzPixelFormat_RGB32UI:
case nzPixelFormat_RGBA4:
case nzPixelFormat_RGBA8:
case nzPixelFormat_RGBA16F:
case nzPixelFormat_RGBA16I:
case nzPixelFormat_RGBA16UI:
case nzPixelFormat_RGBA32F:
case nzPixelFormat_RGBA32I:
case nzPixelFormat_RGBA32UI:
return nzPixelFormatType_Color;
case nzPixelFormat_Depth16:
@ -327,8 +379,10 @@ inline bool NzPixelFormat::HasAlpha(nzPixelFormat format)
case nzPixelFormat_RGB5A1:
case nzPixelFormat_RGBA16F:
case nzPixelFormat_RGBA16I:
case nzPixelFormat_RGBA16UI:
case nzPixelFormat_RGBA32F:
case nzPixelFormat_RGBA32I:
case nzPixelFormat_RGBA32UI:
case nzPixelFormat_RGBA4:
case nzPixelFormat_RGBA8:
return true;
@ -336,11 +390,33 @@ inline bool NzPixelFormat::HasAlpha(nzPixelFormat format)
case nzPixelFormat_BGR8:
case nzPixelFormat_DXT1:
case nzPixelFormat_L8:
case nzPixelFormat_R8:
case nzPixelFormat_R8I:
case nzPixelFormat_R8UI:
case nzPixelFormat_R16:
case nzPixelFormat_R16F:
case nzPixelFormat_R16I:
case nzPixelFormat_R16UI:
case nzPixelFormat_R32F:
case nzPixelFormat_R32I:
case nzPixelFormat_R32UI:
case nzPixelFormat_RG8:
case nzPixelFormat_RG8I:
case nzPixelFormat_RG8UI:
case nzPixelFormat_RG16:
case nzPixelFormat_RG16F:
case nzPixelFormat_RG16I:
case nzPixelFormat_RG16UI:
case nzPixelFormat_RG32F:
case nzPixelFormat_RG32I:
case nzPixelFormat_RG32UI:
case nzPixelFormat_RGB8:
case nzPixelFormat_RGB16F:
case nzPixelFormat_RGB16I:
case nzPixelFormat_RGB16UI:
case nzPixelFormat_RGB32F:
case nzPixelFormat_RGB32I:
case nzPixelFormat_RGB32UI:
case nzPixelFormat_Depth16:
case nzPixelFormat_Depth24:
case nzPixelFormat_Depth24Stencil8:
@ -372,18 +448,42 @@ inline bool NzPixelFormat::IsCompressed(nzPixelFormat format)
case nzPixelFormat_BGRA8:
case nzPixelFormat_L8:
case nzPixelFormat_LA8:
case nzPixelFormat_R8:
case nzPixelFormat_R8I:
case nzPixelFormat_R8UI:
case nzPixelFormat_R16:
case nzPixelFormat_R16F:
case nzPixelFormat_R16I:
case nzPixelFormat_R16UI:
case nzPixelFormat_R32F:
case nzPixelFormat_R32I:
case nzPixelFormat_R32UI:
case nzPixelFormat_RG8:
case nzPixelFormat_RG8I:
case nzPixelFormat_RG8UI:
case nzPixelFormat_RG16:
case nzPixelFormat_RG16F:
case nzPixelFormat_RG16I:
case nzPixelFormat_RG16UI:
case nzPixelFormat_RG32F:
case nzPixelFormat_RG32I:
case nzPixelFormat_RG32UI:
case nzPixelFormat_RGB5A1:
case nzPixelFormat_RGB8:
case nzPixelFormat_RGB16F:
case nzPixelFormat_RGB16I:
case nzPixelFormat_RGB16UI:
case nzPixelFormat_RGB32F:
case nzPixelFormat_RGB32I:
case nzPixelFormat_RGB32UI:
case nzPixelFormat_RGBA4:
case nzPixelFormat_RGBA8:
case nzPixelFormat_RGBA16F:
case nzPixelFormat_RGBA16I:
case nzPixelFormat_RGBA16UI:
case nzPixelFormat_RGBA32F:
case nzPixelFormat_RGBA32I:
case nzPixelFormat_RGBA32UI:
case nzPixelFormat_Depth16:
case nzPixelFormat_Depth24:
case nzPixelFormat_Depth24Stencil8:
@ -450,6 +550,66 @@ inline NzString NzPixelFormat::ToString(nzPixelFormat format)
case nzPixelFormat_LA8:
return "LA8";
case nzPixelFormat_R8:
return "R8";
case nzPixelFormat_R8I:
return "R8I";
case nzPixelFormat_R8UI:
return "R8UI";
case nzPixelFormat_R16:
return "R16";
case nzPixelFormat_R16F:
return "R16F";
case nzPixelFormat_R16I:
return "R16I";
case nzPixelFormat_R16UI:
return "R16UI";
case nzPixelFormat_R32F:
return "R32F";
case nzPixelFormat_R32I:
return "R32I";
case nzPixelFormat_R32UI:
return "R32UI";
case nzPixelFormat_RG8:
return "RG8";
case nzPixelFormat_RG8I:
return "RG8I";
case nzPixelFormat_RG8UI:
return "RG8UI";
case nzPixelFormat_RG16:
return "RG16";
case nzPixelFormat_RG16F:
return "RG16F";
case nzPixelFormat_RG16I:
return "RG16I";
case nzPixelFormat_RG16UI:
return "RG16UI";
case nzPixelFormat_RG32F:
return "RG32F";
case nzPixelFormat_RG32I:
return "RG32I";
case nzPixelFormat_RG32UI:
return "RG32UI";
case nzPixelFormat_RGB5A1:
return "RGB5A1";
@ -462,12 +622,18 @@ inline NzString NzPixelFormat::ToString(nzPixelFormat format)
case nzPixelFormat_RGB16I:
return "RGB16I";
case nzPixelFormat_RGB16UI:
return "RGB16UI";
case nzPixelFormat_RGB32F:
return "RGB32F";
case nzPixelFormat_RGB32I:
return "RGB32I";
case nzPixelFormat_RGB32UI:
return "RGB32UI";
case nzPixelFormat_RGBA4:
return "RGBA4";
@ -480,12 +646,18 @@ inline NzString NzPixelFormat::ToString(nzPixelFormat format)
case nzPixelFormat_RGBA16I:
return "RGBA16I";
case nzPixelFormat_RGBA16UI:
return "RGBA16UI";
case nzPixelFormat_RGBA32F:
return "RGBA32F";
case nzPixelFormat_RGBA32I:
return "RGBA32I";
case nzPixelFormat_RGBA32UI:
return "RGBA32UI";
case nzPixelFormat_Depth16:
return "Depth16";

View File

@ -1340,6 +1340,7 @@ void NzOpenGL::SetViewport(const NzRecti& viewport)
bool NzOpenGL::TranslateFormat(nzPixelFormat pixelFormat, Format* format, FormatType type)
{
///FIXME: Vérifier certains dataType
switch (pixelFormat)
{
case nzPixelFormat_BGR8:
@ -1376,6 +1377,126 @@ bool NzOpenGL::TranslateFormat(nzPixelFormat pixelFormat, Format* format, Format
case nzPixelFormat_LA8:
return false;
case nzPixelFormat_R8:
format->dataFormat = GL_RED;
format->dataType = GL_UNSIGNED_BYTE;
format->internalFormat = GL_R8;
return true;
case nzPixelFormat_R8I:
format->dataFormat = GL_RED;
format->dataType = GL_BYTE;
format->internalFormat = GL_R8I;
return true;
case nzPixelFormat_R8UI:
format->dataFormat = GL_RED;
format->dataType = GL_UNSIGNED_BYTE;
format->internalFormat = GL_R8UI;
return true;
case nzPixelFormat_R16:
format->dataFormat = GL_RED;
format->dataType = GL_UNSIGNED_SHORT;
format->internalFormat = GL_R16;
return true;
case nzPixelFormat_R16F:
format->dataFormat = GL_RED;
format->dataType = GL_HALF_FLOAT; ///FIXME: Correct ?
format->internalFormat = GL_R16F;
return true;
case nzPixelFormat_R16I:
format->dataFormat = GL_RED;
format->dataType = GL_SHORT;
format->internalFormat = GL_R16I;
return true;
case nzPixelFormat_R16UI:
format->dataFormat = GL_RED;
format->dataType = GL_UNSIGNED_SHORT;
format->internalFormat = GL_R16UI;
return true;
case nzPixelFormat_R32F:
format->dataFormat = GL_RED;
format->dataType = GL_FLOAT;
format->internalFormat = GL_R32F;
return true;
case nzPixelFormat_R32I:
format->dataFormat = GL_RED;
format->dataType = GL_INT;
format->internalFormat = GL_R32I;
return true;
case nzPixelFormat_R32UI:
format->dataFormat = GL_RED;
format->dataType = GL_UNSIGNED_INT;
format->internalFormat = GL_R32UI;
return true;
case nzPixelFormat_RG8:
format->dataFormat = GL_RG;
format->dataType = GL_UNSIGNED_BYTE;
format->internalFormat = GL_RG8;
return true;
case nzPixelFormat_RG8I:
format->dataFormat = GL_RG;
format->dataType = GL_BYTE;
format->internalFormat = GL_RG8I;
return true;
case nzPixelFormat_RG8UI:
format->dataFormat = GL_RG;
format->dataType = GL_UNSIGNED_BYTE;
format->internalFormat = GL_RG8UI;
return true;
case nzPixelFormat_RG16:
format->dataFormat = GL_RG;
format->dataType = GL_UNSIGNED_SHORT;
format->internalFormat = GL_RG16;
return true;
case nzPixelFormat_RG16F:
format->dataFormat = GL_RG;
format->dataType = GL_HALF_FLOAT; ///FIXME: Correct ?
format->internalFormat = GL_RG16F;
return true;
case nzPixelFormat_RG16I:
format->dataFormat = GL_RG;
format->dataType = GL_SHORT;
format->internalFormat = GL_RG16I;
return true;
case nzPixelFormat_RG16UI:
format->dataFormat = GL_RG;
format->dataType = GL_UNSIGNED_SHORT;
format->internalFormat = GL_RG16UI;
return true;
case nzPixelFormat_RG32F:
format->dataFormat = GL_RG;
format->dataType = GL_FLOAT;
format->internalFormat = GL_RG32F;
return true;
case nzPixelFormat_RG32I:
format->dataFormat = GL_RG;
format->dataType = GL_INT;
format->internalFormat = GL_RG32I;
return true;
case nzPixelFormat_RG32UI:
format->dataFormat = GL_RG;
format->dataType = GL_UNSIGNED_INT;
format->internalFormat = GL_RG32UI;
return true;
case nzPixelFormat_RGB5A1:
format->dataFormat = GL_RGBA;
format->dataType = GL_UNSIGNED_SHORT_5_5_5_1;
@ -1390,16 +1511,22 @@ bool NzOpenGL::TranslateFormat(nzPixelFormat pixelFormat, Format* format, Format
case nzPixelFormat_RGB16F:
format->dataFormat = GL_RGB;
format->dataType = GL_FLOAT;
format->dataType = GL_HALF_FLOAT; ///FIXME: Correct ?
format->internalFormat = GL_RGB16F;
return true;
case nzPixelFormat_RGB16I:
format->dataFormat = GL_RGB;
format->dataType = GL_INT;
format->dataType = GL_SHORT;
format->internalFormat = GL_RGB16I;
return true;
case nzPixelFormat_RGB16UI:
format->dataFormat = GL_RGB;
format->dataType = GL_UNSIGNED_SHORT;
format->internalFormat = GL_RGB16UI;
return true;
case nzPixelFormat_RGB32F:
format->dataFormat = GL_RGB;
format->dataType = GL_FLOAT;
@ -1412,6 +1539,12 @@ bool NzOpenGL::TranslateFormat(nzPixelFormat pixelFormat, Format* format, Format
format->internalFormat = GL_RGB32I;
return true;
case nzPixelFormat_RGB32UI:
format->dataFormat = GL_RGB;
format->dataType = GL_UNSIGNED_INT;
format->internalFormat = GL_RGB32UI;
return true;
case nzPixelFormat_RGBA4:
format->dataFormat = GL_RGBA;
format->dataType = GL_UNSIGNED_SHORT_4_4_4_4;
@ -1426,14 +1559,20 @@ bool NzOpenGL::TranslateFormat(nzPixelFormat pixelFormat, Format* format, Format
case nzPixelFormat_RGBA16F:
format->dataFormat = GL_RGBA;
format->dataType = GL_FLOAT;
format->dataType = GL_HALF_FLOAT; ///FIXME: Correct ?
format->internalFormat = GL_RGBA16F;
return true;
case nzPixelFormat_RGBA16I:
format->dataFormat = GL_RGBA;
format->dataType = GL_SHORT;
format->internalFormat = GL_RGBA16I;
return true;
case nzPixelFormat_RGBA16UI:
format->dataFormat = GL_RGBA;
format->dataType = GL_INT;
format->internalFormat = GL_RGBA32I;
format->internalFormat = GL_RGBA16UI;
return true;
case nzPixelFormat_RGBA32F:
@ -1448,21 +1587,27 @@ bool NzOpenGL::TranslateFormat(nzPixelFormat pixelFormat, Format* format, Format
format->internalFormat = GL_RGB32I;
return true;
case nzPixelFormat_RGBA32UI:
format->dataFormat = GL_RGB;
format->dataType = GL_UNSIGNED_INT;
format->internalFormat = GL_RGB32UI;
return true;
case nzPixelFormat_Depth16:
format->dataFormat = GL_DEPTH_COMPONENT;
format->dataType = GL_UNSIGNED_BYTE;
format->dataType = GL_UNSIGNED_SHORT;
format->internalFormat = GL_DEPTH_COMPONENT16;
return true;
case nzPixelFormat_Depth24:
format->dataFormat = GL_DEPTH_COMPONENT;
format->dataType = GL_UNSIGNED_BYTE;
format->dataType = GL_UNSIGNED_INT;
format->internalFormat = GL_DEPTH_COMPONENT24;
return true;
case nzPixelFormat_Depth24Stencil8:
format->dataFormat = GL_DEPTH_STENCIL;
format->dataType = GL_UNSIGNED_BYTE;
format->dataType = GL_UNSIGNED_INT_24_8;
format->internalFormat = GL_DEPTH24_STENCIL8;
return true;

View File

@ -1307,14 +1307,38 @@ bool NzTexture::IsFormatSupported(nzPixelFormat format)
return true;
// Formats supportés depuis OpenGL 3
case nzPixelFormat_R8:
case nzPixelFormat_R8I:
case nzPixelFormat_R8UI:
case nzPixelFormat_R16:
case nzPixelFormat_R16F:
case nzPixelFormat_R16I:
case nzPixelFormat_R16UI:
case nzPixelFormat_R32F:
case nzPixelFormat_R32I:
case nzPixelFormat_R32UI:
case nzPixelFormat_RG8:
case nzPixelFormat_RG8I:
case nzPixelFormat_RG8UI:
case nzPixelFormat_RG16:
case nzPixelFormat_RG16F:
case nzPixelFormat_RG16I:
case nzPixelFormat_RG16UI:
case nzPixelFormat_RG32F:
case nzPixelFormat_RG32I:
case nzPixelFormat_RG32UI:
case nzPixelFormat_RGB16F:
case nzPixelFormat_RGB16I:
case nzPixelFormat_RGB16UI:
case nzPixelFormat_RGB32F:
case nzPixelFormat_RGB32I:
case nzPixelFormat_RGB32UI:
case nzPixelFormat_RGBA16F:
case nzPixelFormat_RGBA16I:
case nzPixelFormat_RGBA16UI:
case nzPixelFormat_RGBA32F:
case nzPixelFormat_RGBA32I:
case nzPixelFormat_RGBA32UI:
return NzOpenGL::GetVersion() >= 300;
// Formats de profondeur (Supportés avec les FBOs)