diff --git a/polymer/eduke32/Android.mk b/polymer/eduke32/Android.mk index d9fdd783e..c94a23ada 100644 --- a/polymer/eduke32/Android.mk +++ b/polymer/eduke32/Android.mk @@ -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 = \ diff --git a/polymer/eduke32/build/include/glbuild.h b/polymer/eduke32/build/include/glbuild.h index 561decf61..b933666b8 100644 --- a/polymer/eduke32/build/include/glbuild.h +++ b/polymer/eduke32/build/include/glbuild.h @@ -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 diff --git a/polymer/eduke32/build/src/baselayer.c b/polymer/eduke32/build/src/baselayer.c index 87711919a..e7b96081f 100644 --- a/polymer/eduke32/build/src/baselayer.c +++ b/polymer/eduke32/build/src/baselayer.c @@ -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); diff --git a/polymer/eduke32/build/src/polymost.c b/polymer/eduke32/build/src/polymost.c index 69969ffb5..0a581993d 100644 --- a/polymer/eduke32/build/src/polymost.c +++ b/polymer/eduke32/build/src/polymost.c @@ -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,10 +684,168 @@ static int32_t polymost_glTexImage2D_error(int32_t * intexfmt, int32_t const **i return 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) +# 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 }, diff --git a/polymer/eduke32/build/src/sdlayer.c b/polymer/eduke32/build/src/sdlayer.c index d273d8419..04d09306b 100644 --- a/polymer/eduke32/build/src/sdlayer.c +++ b/polymer/eduke32/build/src/sdlayer.c @@ -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")) diff --git a/polymer/eduke32/platform/Apple/EDuke32.xcodeproj/project.pbxproj b/polymer/eduke32/platform/Apple/EDuke32.xcodeproj/project.pbxproj index 03cea92bc..42e7a81a6 100644 --- a/polymer/eduke32/platform/Apple/EDuke32.xcodeproj/project.pbxproj +++ b/polymer/eduke32/platform/Apple/EDuke32.xcodeproj/project.pbxproj @@ -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 = ""; }; + 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;