GL ES: Introduce ETC1 and (alpha-less) ETC2 texture compression, which improves performance by using less VRAM and requiring shorter data bus transfers.

git-svn-id: https://svn.eduke32.com/eduke32@5690 1a8010ca-5511-0410-912e-c29ae57300e0
This commit is contained in:
hendricks266 2016-03-28 05:16:14 +00:00
parent c942d9c4b9
commit b3f2532bb5
6 changed files with 286 additions and 62 deletions

View file

@ -25,11 +25,14 @@ LOCAL_CFLAGS = $(COMMONFLAGS)
LOCAL_CPPFLAGS = $(COMMONFLAGS)
LOCAL_C_INCLUDES := $(LOCAL_PATH)/source $(LOCAL_PATH)/source/jmact $(LOCAL_PATH)/source/jaudiolib/include $(LOCAL_PATH)/source/enet/include $(LOCAL_PATH)/build/include
LOCAL_C_INCLUDES += $(LOCAL_PATH)/source/android/etcpak
LOCAL_C_INCLUDES += $(TOP_DIR)/ $(TOP_DIR)/Libraries/liboggvorbis/include $(TOP_DIR)/Libraries/ $(TOP_DIR)/Libraries/SDL2/include $(TOP_DIR)/Libraries/SDL2_mixer/include $(TOP_DIR)/Libraries/TinyXML/include $(TOP_DIR)/TouchControls $(TOP_DIR)/Libraries/libvpx/include
ANDROID_SRC = \
build/src/jwzgles.c \
source/android/android-jni.cpp \
source/android/etcpak/ProcessRGB.cpp \
source/android/etcpak/Tables.cpp \
source/android/in_android.c
BUILD_SRC = \

View file

@ -63,6 +63,9 @@ typedef unsigned int GLenum;
# define GL_RGBA4 0x8056
# define GL_RGB5_A1 0x8057
# define GL_RGB565 0x8D62
# define GL_COMPRESSED_RGB8_ETC2 0x9274
# define GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9276
# define GL_COMPRESSED_RGBA8_ETC2_EAC 0x9278
#else
# include "glext.h"
#endif
@ -93,6 +96,9 @@ typedef unsigned int GLenum;
#define GL_TEXTURE_RECTANGLE 0x84F5
#ifndef GL_ETC1_RGB8_OES
# define GL_ETC1_RGB8_OES 0x8D64
#endif
// custom error checking

View file

@ -420,14 +420,14 @@ int32_t osdcmd_glinfo(const osdfuncparm_t *parm)
if (!glinfo.dumped)
return OSDCMD_OK;
initprintf(" Maximum anisotropy: %.1f%s\n"
initprintf(
" BGRA textures: %s\n"
" Non-power-of-2 textures: %s\n"
" Clamp-to-edge: %s\n"
" Multitexturing: %s\n"
" Frame Buffer Objects: %s\n"
" Texure compression: %s\n"
#ifndef EDUKE32_GLES
" Texture compression: %s\n"
" Multisampling: %s\n"
" NVIDIA multisample hint: %s\n"
" ARBfp fragment programs: %s\n"
@ -442,16 +442,16 @@ int32_t osdcmd_glinfo(const osdfuncparm_t *parm)
" Debug Output: %s\n"
" Buffer Storage: %s\n"
#endif
" Maximum anisotropy: %.1f%s\n"
" Extensions:\n",
glinfo.maxanisotropy, glinfo.maxanisotropy>1.0?"":" (no anisotropic filtering)",
glinfo.bgra ? "supported": "not supported",
glinfo.texnpot ? "supported": "not supported",
glinfo.clamptoedge ? "supported": "not supported",
glinfo.multitex ? "supported": "not supported",
glinfo.fbos ? "supported": "not supported",
glinfo.texcompr ? "supported": "not supported"
#ifndef EDUKE32_GLES
,glinfo.multisample ? "supported": "not supported",
glinfo.texcompr ? "supported": "not supported",
glinfo.multisample ? "supported": "not supported",
glinfo.nvmultisamplehint ? "supported": "not supported",
glinfo.arbfp ? "supported": "not supported",
glinfo.depthtex ? "supported": "not supported",
@ -463,8 +463,9 @@ int32_t osdcmd_glinfo(const osdfuncparm_t *parm)
glinfo.occlusionqueries ? "supported": "not supported",
glinfo.glsl ? "supported": "not supported",
glinfo.debugoutput ? "supported": "not supported",
glinfo.bufferstorage ? "supported" : "not supported"
glinfo.bufferstorage ? "supported" : "not supported",
#endif
glinfo.maxanisotropy, glinfo.maxanisotropy>1.0?"":" (no anisotropic filtering)"
);
s = Bstrdup(glinfo.extensions);

View file

@ -87,7 +87,7 @@ int32_t glanisotropy = 1; // 0 = maximum supported by card
int32_t gltexfiltermode = TEXFILTER_OFF;
#ifdef EDUKE32_GLES
int32_t glusetexcompr = 0;
int32_t glusetexcompr = 2;
int32_t glusetexcache = 0, glusememcache = 0;
#else
int32_t glusetexcompr = 1;
@ -648,12 +648,30 @@ static int32_t const *texfmt_rgb_mask = texfmts_rgb_mask;
static int32_t const *texfmt_rgb = texfmts_rgb;
static int32_t const *texfmt_rgba = texfmts_rgba;
static int32_t polymost_glTexImage2D_error(int32_t * intexfmt, int32_t const **intexfmt_master)
#if defined EDUKE32_IOS
static int32_t const comprtexfmts_rgb[] = { GL_ETC1_RGB8_OES, 0 };
static int32_t const comprtexfmts_rgba[] = { 0 };
static int32_t const comprtexfmts_rgb_mask[] = { 0 };
#else
static int32_t const comprtexfmts_rgb[] = { GL_COMPRESSED_RGB8_ETC2, GL_ETC1_RGB8_OES, 0 };
// TODO: waiting on etcpak support for ETC2 with alpha
static int32_t const comprtexfmts_rgba[] = { /*GL_COMPRESSED_RGBA8_ETC2_EAC,*/ 0 };
static int32_t const comprtexfmts_rgb_mask[] = { /*GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2,*/ 0 };
#endif
static int32_t const *comprtexfmt_rgb_mask = comprtexfmts_rgb_mask;
static int32_t const *comprtexfmt_rgb = comprtexfmts_rgb;
static int32_t const *comprtexfmt_rgba = comprtexfmts_rgba;
static int32_t Polymost_glTexImage2D_Error(int32_t const ** const intexfmt_master)
{
GLenum err;
while ((err = bglGetError()) != GL_NO_ERROR)
GLenum checkerr, err = GL_NO_ERROR;
while ((checkerr = bglGetError()) != GL_NO_ERROR)
err = checkerr;
if (err != GL_NO_ERROR)
{
if ((*intexfmt = *++*intexfmt_master) == 0)
if (*++*intexfmt_master == 0)
{
initprintf("No texture formats supported (error 0x%X).\n", err);
Bfflush(NULL);
@ -666,9 +684,167 @@ static int32_t polymost_glTexImage2D_error(int32_t * intexfmt, int32_t const **i
return 0;
}
#else
# define polymost_glTexImage2D_error(...) (0)
static int32_t Polymost_glCompressedTexImage2D_Error(int32_t const ** const comprtexfmt_master)
{
GLenum checkerr, err = GL_NO_ERROR;
while ((checkerr = bglGetError()) != GL_NO_ERROR)
err = checkerr;
if (err != GL_NO_ERROR)
{
if (*++*comprtexfmt_master == 0)
{
return 2;
}
return 1;
}
return 0;
}
# ifdef __cplusplus
extern "C" {
# endif
extern uint64_t ProcessRGB(uint8_t const *);
extern uint64_t ProcessRGB_ETC2(uint8_t const *);
# ifdef __cplusplus
}
# endif
#else
# define Polymost_glTexImage2D_Error(...) (0)
#endif
static void Polymost_SendTexToDriver(int32_t const doalloc,
vec2_t const siz,
int32_t const texfmt,
coltype const * const pic,
#if !defined EDUKE32_GLES
int32_t const intexfmt,
#else
int32_t const ** const intexfmt_master,
int32_t const ** const comprtexfmt_master,
# define intexfmt (**intexfmt_master)
int32_t const texcompress_ok,
#endif
int32_t const level)
{
BuildGLErrorCheck(); // XXX
#if defined EDUKE32_GLES
if (texcompress_ok && **comprtexfmt_master && (siz.x & 3) == 0 && (siz.y & 3) == 0)
{
size_t const picLength = siz.x * siz.y;
size_t const fourRows = siz.x << 2u;
GLsizei const imageSize = picLength >> 1u; // 4x4 pixels --> 8 bytes
uint8_t * const comprpic = (uint8_t *)Xaligned_alloc(8, imageSize);
int32_t err;
do
{
int32_t const comprtexfmt = **comprtexfmt_master;
switch (comprtexfmt)
{
case GL_ETC1_RGB8_OES:
{
coltype buf[4*4];
uint64_t * out = (uint64_t *)comprpic;
for (coltype const * row = pic, * const pic_end = pic + picLength; row < pic_end; row += fourRows)
for (coltype const * block = row, * const row_end = row + siz.x; block < row_end; block += 4)
{
buf[0] = block[0];
buf[1] = block[siz.x];
buf[2] = block[siz.x*2];
buf[3] = block[siz.x*3];
buf[4] = block[1];
buf[5] = block[siz.x+1];
buf[6] = block[siz.x*2+1];
buf[7] = block[siz.x*3+1];
buf[8] = block[2];
buf[9] = block[siz.x+2];
buf[10] = block[siz.x*2+2];
buf[11] = block[siz.x*3+2];
buf[12] = block[3];
buf[13] = block[siz.x+3];
buf[14] = block[siz.x*2+3];
buf[15] = block[siz.x*3+3];
*out++ = ProcessRGB((uint8_t const *)buf);
}
break;
}
case GL_COMPRESSED_RGB8_ETC2:
{
coltype buf[4*4];
uint64_t * out = (uint64_t *)comprpic;
for (coltype const * row = pic, * const pic_end = pic + picLength; row < pic_end; row += fourRows)
for (coltype const * block = row, * const row_end = row + siz.x; block < row_end; block += 4)
{
buf[0] = block[0];
buf[1] = block[siz.x];
buf[2] = block[siz.x*2];
buf[3] = block[siz.x*3];
buf[4] = block[1];
buf[5] = block[siz.x+1];
buf[6] = block[siz.x*2+1];
buf[7] = block[siz.x*3+1];
buf[8] = block[2];
buf[9] = block[siz.x+2];
buf[10] = block[siz.x*2+2];
buf[11] = block[siz.x*3+2];
buf[12] = block[3];
buf[13] = block[siz.x+3];
buf[14] = block[siz.x*2+3];
buf[15] = block[siz.x*3+3];
*out++ = ProcessRGB_ETC2((uint8_t const *)buf);
}
break;
}
# if 0
case GL_COMPRESSED_RGBA8_ETC2_EAC:
{
break;
}
case GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2:
{
break;
}
# endif
default:
EDUKE32_UNREACHABLE_SECTION(break);
}
if (doalloc & 1)
jwzgles_glCompressedTexImage2D(GL_TEXTURE_2D, level, comprtexfmt, siz.x,siz.y, 0, imageSize, comprpic);
else
jwzgles_glCompressedTexSubImage2D(GL_TEXTURE_2D, level, 0,0, siz.x,siz.y, comprtexfmt, imageSize, comprpic);
}
while ((err = Polymost_glCompressedTexImage2D_Error(comprtexfmt_master)) == 1);
Baligned_free(comprpic);
if (err == 0)
return;
}
#endif
do
{
if (doalloc & 1)
bglTexImage2D(GL_TEXTURE_2D, level, intexfmt, siz.x,siz.y, 0, texfmt, GL_UNSIGNED_BYTE, pic);
else
bglTexSubImage2D(GL_TEXTURE_2D, level, 0,0, siz.x,siz.y, texfmt, GL_UNSIGNED_BYTE, pic);
}
while (Polymost_glTexImage2D_Error(intexfmt_master));
}
void uploadtexture(int32_t doalloc, vec2_t siz, int32_t texfmt,
coltype *pic, vec2_t tsiz, int32_t dameth)
@ -678,12 +854,11 @@ void uploadtexture(int32_t doalloc, vec2_t siz, int32_t texfmt,
const int nodownsize = !!(dameth & DAMETH_NODOWNSIZE) || artimmunity;
const int nomiptransfix = !!(dameth & DAMETH_NOFIX);
const int hasalpha = !!(dameth & DAMETH_HASALPHA) && (dameth & DAMETH_MASKPROPS) != DAMETH_NOMASK;
const int texcompress_ok = !(dameth & DAMETH_NOTEXCOMPRESS) && (glusetexcompr == 2 || (glusetexcompr && !artimmunity));
#if !defined EDUKE32_GLES
const int texcompress_ok = glinfo.texcompr && !(dameth & DAMETH_NOTEXCOMPRESS) && (glusetexcompr == 2 || (glusetexcompr && !artimmunity));
int32_t intexfmt;
if (texcompress_ok)
if (texcompress_ok && glinfo.texcompr)
intexfmt = hasalpha ? GL_COMPRESSED_RGBA_ARB : GL_COMPRESSED_RGB_ARB;
else
intexfmt = hasalpha ? GL_RGBA : GL_RGB;
@ -691,7 +866,7 @@ void uploadtexture(int32_t doalloc, vec2_t siz, int32_t texfmt,
const int onebitalpha = !!(dameth & DAMETH_ONEBITALPHA);
int32_t const ** intexfmt_master = hasalpha ? (onebitalpha ? &texfmt_rgb_mask : &texfmt_rgba) : &texfmt_rgb;
int32_t intexfmt = **intexfmt_master;
int32_t const ** comprtexfmt_master = hasalpha ? (onebitalpha ? &comprtexfmt_rgb_mask : &comprtexfmt_rgba) : &comprtexfmt_rgb;
#endif
dameth &= ~DAMETH_UPLOADTEXTURE_MASK;
@ -723,17 +898,15 @@ void uploadtexture(int32_t doalloc, vec2_t siz, int32_t texfmt,
miplevel = r_downsize;
if (!miplevel)
{
BuildGLErrorCheck(); // XXX
do
{
if (doalloc&1)
bglTexImage2D(GL_TEXTURE_2D,0,intexfmt,siz.x,siz.y,0,texfmt,GL_UNSIGNED_BYTE,pic); //loading 1st time
else
bglTexSubImage2D(GL_TEXTURE_2D,0,0,0,siz.x,siz.y,texfmt,GL_UNSIGNED_BYTE,pic); //overwrite old texture
}
while (polymost_glTexImage2D_error(&intexfmt, intexfmt_master));
}
Polymost_SendTexToDriver(doalloc, siz, texfmt, pic,
#if !defined EDUKE32_GLES
intexfmt,
#else
intexfmt_master,
comprtexfmt_master,
texcompress_ok,
#endif
0);
vec2_t siz2 = siz;
@ -785,17 +958,15 @@ void uploadtexture(int32_t doalloc, vec2_t siz, int32_t texfmt,
}
if (j >= miplevel)
{
BuildGLErrorCheck(); // XXX
do
{
if (doalloc & 1) // loading 1st time
bglTexImage2D(GL_TEXTURE_2D, j - miplevel, intexfmt, siz3.x, siz3.y, 0, texfmt, GL_UNSIGNED_BYTE, pic);
else // overwrite old texture
bglTexSubImage2D(GL_TEXTURE_2D, j - miplevel, 0, 0, siz3.x, siz3.y, texfmt, GL_UNSIGNED_BYTE, pic);
}
while (polymost_glTexImage2D_error(&intexfmt, intexfmt_master));
}
Polymost_SendTexToDriver(doalloc, siz3, texfmt, pic,
#if !defined EDUKE32_GLES
intexfmt,
#else
intexfmt_master,
comprtexfmt_master,
texcompress_ok,
#endif
j - miplevel);
siz2 = siz3;
}
@ -5789,8 +5960,8 @@ void polymost_initosdfuncs(void)
{ "r_polygonmode","debugging feature",(void *) &r_polygonmode, CVAR_INT | CVAR_NOSAVE, 0, 3 },
{ "r_texcache","enable/disable OpenGL compressed texture cache",(void *) &glusetexcache, CVAR_INT, 0, 2 },
{ "r_memcache","enable/disable texture cache memory cache",(void *) &glusememcache, CVAR_BOOL, 0, 1 },
{ "r_texcompr","enable/disable OpenGL texture compression: 0: off 1: hightile only 2: ART and hightile",(void *) &glusetexcompr, CVAR_INT, 0, 2 },
#endif
{ "r_texcompr","enable/disable OpenGL texture compression: 0: off 1: hightile only 2: ART and hightile",(void *) &glusetexcompr, CVAR_INT, 0, 2 },
#ifdef REDBLUEMODE
{ "r_redbluemode","enable/disable experimental OpenGL red-blue glasses mode",(void *) &glredbluemode, CVAR_BOOL, 0, 1 },

View file

@ -1303,13 +1303,11 @@ void sdlayer_setvideomode_opengl(void)
glinfo.maxanisotropy = 1.0;
glinfo.bgra = 0;
glinfo.texcompr = 0;
glinfo.clamptoedge = 1;
glinfo.multitex = 1;
// process the extensions string and flag stuff we recognize
glinfo.texcompr = !!Bstrstr(glinfo.extensions, "GL_ARB_texture_compression") && Bstrcmp(glinfo.vendor, "ATI Technologies Inc.");
glinfo.texnpot = !!Bstrstr(glinfo.extensions, "GL_ARB_texture_non_power_of_two") || !!Bstrstr(glinfo.extensions, "GL_OES_texture_npot");
glinfo.multisample = !!Bstrstr(glinfo.extensions, "GL_ARB_multisample");
glinfo.nvmultisamplehint = !!Bstrstr(glinfo.extensions, "GL_NV_multisample_filter_hint");
@ -1318,7 +1316,8 @@ void sdlayer_setvideomode_opengl(void)
glinfo.shadow = !!Bstrstr(glinfo.extensions, "GL_ARB_shadow");
glinfo.fbos = !!Bstrstr(glinfo.extensions, "GL_EXT_framebuffer_object") || !!Bstrstr(glinfo.extensions, "GL_OES_framebuffer_object");
#ifndef __ANDROID__
#if !defined EDUKE32_GLES
glinfo.texcompr = !!Bstrstr(glinfo.extensions, "GL_ARB_texture_compression") && Bstrcmp(glinfo.vendor, "ATI Technologies Inc.");
# ifdef DYNAMIC_GLEXT
if (glinfo.texcompr && (!bglCompressedTexImage2DARB || !bglGetCompressedTexImageARB))
{
@ -1353,6 +1352,9 @@ void sdlayer_setvideomode_opengl(void)
initprintf("3dfx card detected: OpenGL fog disabled\n");
warnonce |= 1;
}
#else
// don't bother checking because ETC2 et al. are not listed in extensions anyway
glinfo.texcompr = 1; // !!Bstrstr(glinfo.extensions, "GL_OES_compressed_ETC1_RGB8_texture");
#endif
// if (Bstrstr(glinfo.extensions, "GL_EXT_texture_filter_anisotropic"))

View file

@ -409,6 +409,14 @@
2038AEA01A8F12B60093B7B2 /* animsounds.c in Sources */ = {isa = PBXBuildFile; fileRef = 2038AE9E1A8F12B60093B7B2 /* animsounds.c */; };
2038AEA11A8F12B60093B7B2 /* animsounds.c in Sources */ = {isa = PBXBuildFile; fileRef = 2038AE9E1A8F12B60093B7B2 /* animsounds.c */; };
2038AEA31A8F137E0093B7B2 /* DUKE.RTS in Resources */ = {isa = PBXBuildFile; fileRef = 2038AEA21A8F137E0093B7B2 /* DUKE.RTS */; };
204D6B5F1C98973F001FA505 /* Math.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 204D6B571C98973F001FA505 /* Math.hpp */; };
204D6B601C98973F001FA505 /* ProcessCommon.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 204D6B581C98973F001FA505 /* ProcessCommon.hpp */; };
204D6B611C98973F001FA505 /* ProcessRGB.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 204D6B591C98973F001FA505 /* ProcessRGB.cpp */; };
204D6B621C98973F001FA505 /* ProcessRGB.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 204D6B5A1C98973F001FA505 /* ProcessRGB.hpp */; };
204D6B631C98973F001FA505 /* Tables.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 204D6B5B1C98973F001FA505 /* Tables.cpp */; };
204D6B641C98973F001FA505 /* Tables.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 204D6B5C1C98973F001FA505 /* Tables.hpp */; };
204D6B651C98973F001FA505 /* Types.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 204D6B5D1C98973F001FA505 /* Types.hpp */; };
204D6B661C98973F001FA505 /* Vector.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 204D6B5E1C98973F001FA505 /* Vector.hpp */; };
206B3A081B074F3800E5DBD0 /* jwzglesI.h in Headers */ = {isa = PBXBuildFile; fileRef = 206B3A061B074F3000E5DBD0 /* jwzglesI.h */; settings = {ATTRIBUTES = (Public, ); }; };
206B3A0A1B074F4300E5DBD0 /* jwzgles.h in Headers */ = {isa = PBXBuildFile; fileRef = 206B3A051B074F3000E5DBD0 /* jwzgles.h */; settings = {ATTRIBUTES = (Public, ); }; };
206B3A0C1B074F6400E5DBD0 /* jwzgles.c in Sources */ = {isa = PBXBuildFile; fileRef = 206B3A0B1B074F6400E5DBD0 /* jwzgles.c */; };
@ -786,6 +794,14 @@
2038AE9F1A8F12B60093B7B2 /* animsounds.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = animsounds.h; path = ../../source/animsounds.h; sourceTree = SOURCE_ROOT; };
2038AEA21A8F137E0093B7B2 /* DUKE.RTS */ = {isa = PBXFileReference; lastKnownFileType = file; name = DUKE.RTS; path = ../../../../../DUKE.RTS; sourceTree = SOURCE_ROOT; };
204D6B4F1C9896B0001FA505 /* inv.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 4; name = inv.h; path = ../../source/inv.h; sourceTree = SOURCE_ROOT; };
204D6B571C98973F001FA505 /* Math.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Math.hpp; path = ../../source/android/etcpak/Math.hpp; sourceTree = SOURCE_ROOT; };
204D6B581C98973F001FA505 /* ProcessCommon.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = ProcessCommon.hpp; path = ../../source/android/etcpak/ProcessCommon.hpp; sourceTree = SOURCE_ROOT; };
204D6B591C98973F001FA505 /* ProcessRGB.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ProcessRGB.cpp; path = ../../source/android/etcpak/ProcessRGB.cpp; sourceTree = SOURCE_ROOT; };
204D6B5A1C98973F001FA505 /* ProcessRGB.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = ProcessRGB.hpp; path = ../../source/android/etcpak/ProcessRGB.hpp; sourceTree = SOURCE_ROOT; };
204D6B5B1C98973F001FA505 /* Tables.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Tables.cpp; path = ../../source/android/etcpak/Tables.cpp; sourceTree = SOURCE_ROOT; };
204D6B5C1C98973F001FA505 /* Tables.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Tables.hpp; path = ../../source/android/etcpak/Tables.hpp; sourceTree = SOURCE_ROOT; };
204D6B5D1C98973F001FA505 /* Types.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Types.hpp; path = ../../source/android/etcpak/Types.hpp; sourceTree = SOURCE_ROOT; };
204D6B5E1C98973F001FA505 /* Vector.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Vector.hpp; path = ../../source/android/etcpak/Vector.hpp; sourceTree = SOURCE_ROOT; };
206B3A051B074F3000E5DBD0 /* jwzgles.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jwzgles.h; path = ../../build/include/jwzgles.h; sourceTree = SOURCE_ROOT; };
206B3A061B074F3000E5DBD0 /* jwzglesI.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jwzglesI.h; path = ../../build/include/jwzglesI.h; sourceTree = SOURCE_ROOT; };
206B3A0B1B074F6400E5DBD0 /* jwzgles.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jwzgles.c; path = ../../build/src/jwzgles.c; sourceTree = SOURCE_ROOT; };
@ -1268,6 +1284,7 @@
0008E8D619F1AC530091588D /* src */ = {
isa = PBXGroup;
children = (
204D6B541C98973F001FA505 /* etcpak */,
00970E3319F207F000873EB9 /* a-c.c */,
20C2146E1B02C1D800917E58 /* build.png */,
0008EA2419F1AF220091588D /* build.osxmain.nib */,
@ -1406,6 +1423,22 @@
name = Libraries;
sourceTree = "<group>";
};
204D6B541C98973F001FA505 /* etcpak */ = {
isa = PBXGroup;
children = (
204D6B571C98973F001FA505 /* Math.hpp */,
204D6B581C98973F001FA505 /* ProcessCommon.hpp */,
204D6B591C98973F001FA505 /* ProcessRGB.cpp */,
204D6B5A1C98973F001FA505 /* ProcessRGB.hpp */,
204D6B5B1C98973F001FA505 /* Tables.cpp */,
204D6B5C1C98973F001FA505 /* Tables.hpp */,
204D6B5D1C98973F001FA505 /* Types.hpp */,
204D6B5E1C98973F001FA505 /* Vector.hpp */,
);
name = etcpak;
path = ../../source/android/etcpak;
sourceTree = SOURCE_ROOT;
};
/* End PBXGroup section */
/* Begin PBXHeadersBuildPhase section */
@ -1537,13 +1570,17 @@
001382C019F361B60007DA6C /* SDLMain.h in Headers */,
001382C119F361B60007DA6C /* pragmas.h in Headers */,
001382C219F361B60007DA6C /* sdlappicon.h in Headers */,
204D6B661C98973F001FA505 /* Vector.hpp in Headers */,
206B3A0A1B074F4300E5DBD0 /* jwzgles.h in Headers */,
001382C319F361B60007DA6C /* tracker.hpp in Headers */,
204D6B651C98973F001FA505 /* Types.hpp in Headers */,
204D6B5F1C98973F001FA505 /* Math.hpp in Headers */,
001382C419F361B60007DA6C /* hightile.h in Headers */,
001382C519F361B60007DA6C /* glbuild.h in Headers */,
001382C619F361B60007DA6C /* tracker_operator.hpp in Headers */,
001382C719F361B60007DA6C /* rawinput.h in Headers */,
001382C819F361B60007DA6C /* common.h in Headers */,
204D6B621C98973F001FA505 /* ProcessRGB.hpp in Headers */,
001382C919F361B60007DA6C /* pragmas_arm.h in Headers */,
001382CA19F361B60007DA6C /* dxtfilter.h in Headers */,
001382CB19F361B60007DA6C /* kplib.h in Headers */,
@ -1562,7 +1599,9 @@
001382D719F361B60007DA6C /* polymost.h in Headers */,
001382D819F361B60007DA6C /* sdlayer.h in Headers */,
2038AE971A8F122D0093B7B2 /* libdivide.h in Headers */,
204D6B601C98973F001FA505 /* ProcessCommon.hpp in Headers */,
001382D919F361B60007DA6C /* cache1d.h in Headers */,
204D6B641C98973F001FA505 /* Tables.hpp in Headers */,
001382DA19F361B60007DA6C /* mmulti.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
@ -2096,8 +2135,10 @@
0013829C19F361B60007DA6C /* a-c.c in Sources */,
2038AE9D1A8F126C0093B7B2 /* md4.c in Sources */,
0013829D19F361B60007DA6C /* textfont.c in Sources */,
204D6B611C98973F001FA505 /* ProcessRGB.cpp in Sources */,
0013829E19F361B60007DA6C /* mdsprite.c in Sources */,
0013829F19F361B60007DA6C /* defs.c in Sources */,
204D6B631C98973F001FA505 /* Tables.cpp in Sources */,
001382A019F361B60007DA6C /* baselayer.c in Sources */,
001382A119F361B60007DA6C /* xxhash.c in Sources */,
001382A219F361B60007DA6C /* scriptfile.c in Sources */,
@ -2230,7 +2271,7 @@
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ANALYZER_SECURITY_FLOATLOOPCOUNTER = YES;
CLANG_ANALYZER_SECURITY_INSECUREAPI_STRCPY = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++98";
CLANG_CXX_LANGUAGE_STANDARD = "gnu++11";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = NO;
CLANG_ENABLE_OBJC_ARC = NO;
@ -2351,7 +2392,7 @@
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ANALYZER_SECURITY_FLOATLOOPCOUNTER = YES;
CLANG_ANALYZER_SECURITY_INSECUREAPI_STRCPY = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++98";
CLANG_CXX_LANGUAGE_STANDARD = "gnu++11";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = NO;
CLANG_ENABLE_OBJC_ARC = NO;
@ -2466,7 +2507,7 @@
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ANALYZER_SECURITY_FLOATLOOPCOUNTER = YES;
CLANG_ANALYZER_SECURITY_INSECUREAPI_STRCPY = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++98";
CLANG_CXX_LANGUAGE_STANDARD = "gnu++11";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = NO;
CLANG_ENABLE_OBJC_ARC = NO;
@ -2587,7 +2628,7 @@
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ANALYZER_SECURITY_FLOATLOOPCOUNTER = YES;
CLANG_ANALYZER_SECURITY_INSECUREAPI_STRCPY = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++98";
CLANG_CXX_LANGUAGE_STANDARD = "gnu++11";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = NO;
CLANG_ENABLE_OBJC_ARC = NO;
@ -2699,7 +2740,7 @@
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++98";
CLANG_CXX_LANGUAGE_STANDARD = "gnu++11";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = NO;
CLANG_ENABLE_OBJC_ARC = NO;
@ -2809,7 +2850,7 @@
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++98";
CLANG_CXX_LANGUAGE_STANDARD = "gnu++11";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = NO;
CLANG_ENABLE_OBJC_ARC = NO;
@ -2913,7 +2954,7 @@
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++98";
CLANG_CXX_LANGUAGE_STANDARD = "gnu++11";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = NO;
CLANG_ENABLE_OBJC_ARC = NO;
@ -3020,7 +3061,7 @@
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++98";
CLANG_CXX_LANGUAGE_STANDARD = "gnu++11";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = NO;
CLANG_ENABLE_OBJC_ARC = NO;
@ -3121,7 +3162,7 @@
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++98";
CLANG_CXX_LANGUAGE_STANDARD = "gnu++11";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = NO;
CLANG_ENABLE_OBJC_ARC = NO;
@ -3227,7 +3268,7 @@
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++98";
CLANG_CXX_LANGUAGE_STANDARD = "gnu++11";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = NO;
CLANG_ENABLE_OBJC_ARC = NO;
@ -3359,7 +3400,7 @@
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++98";
CLANG_CXX_LANGUAGE_STANDARD = "gnu++11";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = NO;
CLANG_ENABLE_OBJC_ARC = NO;
@ -3466,7 +3507,7 @@
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++98";
CLANG_CXX_LANGUAGE_STANDARD = "gnu++11";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = NO;
CLANG_ENABLE_OBJC_ARC = NO;
@ -3568,7 +3609,7 @@
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++98";
CLANG_CXX_LANGUAGE_STANDARD = "gnu++11";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = NO;
CLANG_ENABLE_OBJC_ARC = NO;
@ -3684,7 +3725,7 @@
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++98";
CLANG_CXX_LANGUAGE_STANDARD = "gnu++11";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = NO;
CLANG_ENABLE_OBJC_ARC = NO;
@ -3794,7 +3835,7 @@
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++98";
CLANG_CXX_LANGUAGE_STANDARD = "gnu++11";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = NO;
CLANG_ENABLE_OBJC_ARC = NO;
@ -3906,7 +3947,7 @@
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++98";
CLANG_CXX_LANGUAGE_STANDARD = "gnu++11";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = NO;
CLANG_ENABLE_OBJC_ARC = NO;
@ -4012,7 +4053,7 @@
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++98";
CLANG_CXX_LANGUAGE_STANDARD = "gnu++11";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = NO;
CLANG_ENABLE_OBJC_ARC = NO;
@ -4121,7 +4162,7 @@
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++98";
CLANG_CXX_LANGUAGE_STANDARD = "gnu++11";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = NO;
CLANG_ENABLE_OBJC_ARC = NO;
@ -4224,7 +4265,7 @@
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++98";
CLANG_CXX_LANGUAGE_STANDARD = "gnu++11";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = NO;
CLANG_ENABLE_OBJC_ARC = NO;
@ -4333,7 +4374,7 @@
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++98";
CLANG_CXX_LANGUAGE_STANDARD = "gnu++11";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = NO;
CLANG_ENABLE_OBJC_ARC = NO;