mirror of
https://github.com/ZDoom/raze-gles.git
synced 2024-12-24 10:40:46 +00:00
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:
parent
c942d9c4b9
commit
b3f2532bb5
6 changed files with 286 additions and 62 deletions
|
@ -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 = \
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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 },
|
||||
|
|
|
@ -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"))
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue