Add more texture formats;

This commit is contained in:
bjorn 2018-07-20 17:45:25 -07:00
parent 5f06ca44c9
commit 98e0522c4f
4 changed files with 37 additions and 7 deletions

View File

@ -131,8 +131,14 @@ const char* StencilActions[] = {
const char* TextureFormats[] = {
[FORMAT_RGB] = "rgb",
[FORMAT_RGBA] = "rgba",
[FORMAT_RGBA4] = "rgba4",
[FORMAT_RGBA16F] = "rgba16f",
[FORMAT_RGBA32F] = "rgba32f",
[FORMAT_R16F] = "r16f",
[FORMAT_R32F] = "r32f",
[FORMAT_RGB565] = "rgb565",
[FORMAT_RGB5A1] = "rgb5a1",
[FORMAT_RGB10A2] = "rgb5a2",
[FORMAT_RG11B10F] = "rg11b10f",
[FORMAT_DXT1] = "dxt1",
[FORMAT_DXT3] = "dxt3",

View File

@ -122,10 +122,21 @@ TextureData* lovrTextureDataGetBlank(int width, int height, uint8_t value, Textu
switch (format) {
case FORMAT_RGB: pixelSize = 3; break;
case FORMAT_RGBA: pixelSize = 4; break;
case FORMAT_RGBA4: pixelSize = 2; break;
case FORMAT_RGBA16F: pixelSize = 8; break;
case FORMAT_RGBA32F: pixelSize = 16; break;
case FORMAT_R16F: pixelSize = 2; break;
case FORMAT_R32F: pixelSize = 4; break;
case FORMAT_RGB565: pixelSize = 2; break;
case FORMAT_RGB5A1: pixelSize = 2; break;
case FORMAT_RGB10A2: pixelSize = 4; break;
case FORMAT_RG11B10F: pixelSize = 4; break;
default: lovrThrow("Unable to create a blank compressed texture");
case FORMAT_DXT1:
case FORMAT_DXT3:
case FORMAT_DXT5:
lovrThrow("Unable to create a blank compressed texture");
return NULL;
}
lovrAssert(width > 0 && height > 0, "TextureData dimensions must be positive");

View File

@ -16,8 +16,14 @@
typedef enum {
FORMAT_RGB,
FORMAT_RGBA,
FORMAT_RGBA4,
FORMAT_RGBA16F,
FORMAT_RGBA32F,
FORMAT_R16F,
FORMAT_R32F,
FORMAT_RGB565,
FORMAT_RGB5A1,
FORMAT_RGB10A2,
FORMAT_RG11B10F,
FORMAT_DXT1,
FORMAT_DXT3,

View File

@ -186,8 +186,14 @@ static GLenum convertTextureFormat(TextureFormat format) {
switch (format) {
case FORMAT_RGB: return GL_RGB;
case FORMAT_RGBA: return GL_RGBA;
case FORMAT_RGBA4: return GL_RGBA;
case FORMAT_RGBA16F: return GL_RGBA;
case FORMAT_RGBA32F: return GL_RGBA;
case FORMAT_R16F: return GL_RED;
case FORMAT_R32F: return GL_RED;
case FORMAT_RGB565: return GL_RGB;
case FORMAT_RGB5A1: return GL_RGBA;
case FORMAT_RGB10A2: return GL_RGBA;
case FORMAT_RG11B10F: return GL_RGB;
case FORMAT_DXT1: return GL_COMPRESSED_RGB_S3TC_DXT1_EXT;
case FORMAT_DXT3: return GL_COMPRESSED_RGBA_S3TC_DXT3_EXT;
@ -199,8 +205,14 @@ static GLenum convertTextureFormatInternal(TextureFormat format, bool srgb) {
switch (format) {
case FORMAT_RGB: return srgb ? GL_SRGB8 : GL_RGB8;
case FORMAT_RGBA: return srgb ? GL_SRGB8_ALPHA8 : GL_RGBA8;
case FORMAT_RGBA4: return GL_RGBA4;
case FORMAT_RGBA16F: return GL_RGBA16F;
case FORMAT_RGBA32F: return GL_RGBA32F;
case FORMAT_R16F: return GL_R16F;
case FORMAT_R32F: return GL_R32F;
case FORMAT_RGB565: return GL_RGB565;
case FORMAT_RGB5A1: return GL_RGB5_A1;
case FORMAT_RGB10A2: return GL_RGB10_A2;
case FORMAT_RG11B10F: return GL_R11F_G11F_B10F;
case FORMAT_DXT1: return srgb ? GL_COMPRESSED_SRGB_S3TC_DXT1_EXT : GL_COMPRESSED_RGB_S3TC_DXT1_EXT;
case FORMAT_DXT3: return srgb ? GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT : GL_COMPRESSED_RGBA_S3TC_DXT3_EXT;
@ -241,16 +253,11 @@ static GLenum convertMeshDrawMode(MeshDrawMode mode) {
static bool isCanvasFormatSupported(TextureFormat format) {
switch (format) {
case FORMAT_RGB:
case FORMAT_RGBA:
case FORMAT_RGBA16F:
case FORMAT_RGBA32F:
case FORMAT_RG11B10F:
return true;
case FORMAT_DXT1:
case FORMAT_DXT3:
case FORMAT_DXT5:
return false;
default: return true;
}
}