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

@@ -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)