mirror of
https://github.com/nillerusr/source-engine.git
synced 2024-12-22 14:16:50 +00:00
macOS build support
This commit is contained in:
parent
cb0e405e0f
commit
1f3b4583da
@ -18,13 +18,17 @@ def build(bld):
|
|||||||
source = [
|
source = [
|
||||||
'AppSystemGroup.cpp',
|
'AppSystemGroup.cpp',
|
||||||
'../public/filesystem_init.cpp',
|
'../public/filesystem_init.cpp',
|
||||||
# 'glmrendererinfo_osx.mm' [$OSXALL]
|
|
||||||
]
|
]
|
||||||
|
|
||||||
if bld.env.SDL:
|
if bld.env.SDL:
|
||||||
source += [
|
source += [
|
||||||
'sdlmgr.cpp'
|
'sdlmgr.cpp'
|
||||||
]
|
]
|
||||||
|
|
||||||
|
if bld.env.DEST_OS == 'darwin':
|
||||||
|
source += [
|
||||||
|
'glmrendererinfo_osx.mm'
|
||||||
|
]
|
||||||
|
|
||||||
if bld.env.DEST_OS == 'win32':
|
if bld.env.DEST_OS == 'win32':
|
||||||
source += [
|
source += [
|
||||||
|
@ -3286,7 +3286,7 @@ void CSaveRestore::Init( void )
|
|||||||
threadPoolStartParams.bUseAffinityTable = true;
|
threadPoolStartParams.bUseAffinityTable = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
g_pSaveThread = CreateThreadPool();
|
g_pSaveThread = CreateThreadPool1();
|
||||||
g_pSaveThread->Start( threadPoolStartParams, "SaveJob" );
|
g_pSaveThread->Start( threadPoolStartParams, "SaveJob" );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -15,6 +15,9 @@ def configure(conf):
|
|||||||
if conf.options.DEDICATED:
|
if conf.options.DEDICATED:
|
||||||
conf.define('SWDS', 1)
|
conf.define('SWDS', 1)
|
||||||
conf.define('NO_STEAM', 1)
|
conf.define('NO_STEAM', 1)
|
||||||
|
else:
|
||||||
|
if conf.env.DEST_OS == 'darwin':
|
||||||
|
conf.define('HAVE_OPENAL', 1)
|
||||||
|
|
||||||
conf.env.append_unique('DEFINES',[
|
conf.env.append_unique('DEFINES',[
|
||||||
'__USEA3D',
|
'__USEA3D',
|
||||||
@ -204,9 +207,17 @@ def build(bld):
|
|||||||
|
|
||||||
if bld.env.SDL:
|
if bld.env.SDL:
|
||||||
source += [
|
source += [
|
||||||
'audio/snd_dev_sdl.cpp', #[$SDL && !$OSXALL]
|
|
||||||
'audio/voice_record_sdl.cpp' #[$OSXALL||$LINUXALL]
|
'audio/voice_record_sdl.cpp' #[$OSXALL||$LINUXALL]
|
||||||
]
|
]
|
||||||
|
if bld.env.DEST_OS != "darwin":
|
||||||
|
source += ['audio/snd_dev_sdl.cpp']
|
||||||
|
|
||||||
|
if bld.env.DEST_OS == 'darwin':
|
||||||
|
source += [
|
||||||
|
'audio/snd_dev_openal.cpp', # [$OSXALL]
|
||||||
|
'audio/snd_dev_mac_audioqueue.cpp',# [$OSXALL]
|
||||||
|
'audio/voice_record_mac_audioqueue.cpp', #[$OSXALL]
|
||||||
|
]
|
||||||
|
|
||||||
if bld.env.DEST_OS == 'win32':
|
if bld.env.DEST_OS == 'win32':
|
||||||
source += [
|
source += [
|
||||||
@ -352,6 +363,8 @@ def build(bld):
|
|||||||
libs += ['SSL', 'CRYPTO'] # android curl was built with openssl
|
libs += ['SSL', 'CRYPTO'] # android curl was built with openssl
|
||||||
elif bld.env.DEST_OS == 'win32':
|
elif bld.env.DEST_OS == 'win32':
|
||||||
libs += ['USER32', 'WINMM', 'WININET', 'DSOUND', 'DXGUID', 'GDI32', 'bzip2']
|
libs += ['USER32', 'WINMM', 'WININET', 'DSOUND', 'DXGUID', 'GDI32', 'bzip2']
|
||||||
|
elif bld.env.DEST_OS == 'darwin':
|
||||||
|
libs += ['COREAUDIO', 'AUDIOTOOLBOX', 'SYSTEMCONFIGURATION']
|
||||||
|
|
||||||
install_path = bld.env.LIBDIR
|
install_path = bld.env.LIBDIR
|
||||||
|
|
||||||
|
@ -663,7 +663,7 @@ void CBaseFileSystem::InitAsync()
|
|||||||
if ( VCRGetMode() == VCR_Disabled )
|
if ( VCRGetMode() == VCR_Disabled )
|
||||||
{
|
{
|
||||||
// create the i/o thread pool
|
// create the i/o thread pool
|
||||||
m_pThreadPool = CreateThreadPool();
|
m_pThreadPool = CreateThreadPool1();
|
||||||
|
|
||||||
ThreadPoolStartParams_t params;
|
ThreadPoolStartParams_t params;
|
||||||
params.iThreadPriority = 0;
|
params.iThreadPriority = 0;
|
||||||
|
@ -1087,7 +1087,7 @@ bool CParticleMgr::Init(unsigned long count, IMaterialSystem *pMaterials)
|
|||||||
if ( IsX360() )
|
if ( IsX360() )
|
||||||
{
|
{
|
||||||
//m_pThreadPool[0] = CreateThreadPool();
|
//m_pThreadPool[0] = CreateThreadPool();
|
||||||
m_pThreadPool[1] = CreateThreadPool();
|
m_pThreadPool[1] = CreateThreadPool1();
|
||||||
|
|
||||||
ThreadPoolStartParams_t startParams;
|
ThreadPoolStartParams_t startParams;
|
||||||
startParams.nThreads = 3;
|
startParams.nThreads = 3;
|
||||||
|
@ -45,6 +45,8 @@ def build(bld):
|
|||||||
|
|
||||||
if bld.env.DEST_OS == 'win32':
|
if bld.env.DEST_OS == 'win32':
|
||||||
libs += ['USER32', 'OLE32', 'SHELL32']
|
libs += ['USER32', 'OLE32', 'SHELL32']
|
||||||
|
elif bld.env.DEST_OS == 'darwin':
|
||||||
|
libs += ['FOUNDATION', 'APPKIT', 'IOKIT']
|
||||||
|
|
||||||
install_path = bld.env.LIBDIR
|
install_path = bld.env.LIBDIR
|
||||||
|
|
||||||
|
@ -3567,7 +3567,7 @@ IThreadPool *CMaterialSystem::CreateMatQueueThreadPool()
|
|||||||
// that only the threadpool threads should execute these jobs.
|
// that only the threadpool threads should execute these jobs.
|
||||||
startParams.bExecOnThreadPoolThreadsOnly = true;
|
startParams.bExecOnThreadPoolThreadsOnly = true;
|
||||||
|
|
||||||
m_pMatQueueThreadPool = CreateThreadPool();
|
m_pMatQueueThreadPool = CreateThreadPool1();
|
||||||
m_pMatQueueThreadPool->Start( startParams, "MatQueue" );
|
m_pMatQueueThreadPool->Start( startParams, "MatQueue" );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
// memdbgon must be the last include file in a .cpp file!!!
|
// memdbgon must be the last include file in a .cpp file!!!
|
||||||
#include "tier0/memdbgon.h"
|
#include "tier0/memdbgon.h"
|
||||||
|
|
||||||
#if !defined(COMPILER_MSVC64) && !defined(LINUX)
|
#if !defined(COMPILER_MSVC64) && !defined(LINUX) && !defined(OSX)
|
||||||
// Implement for 64-bit Windows if needed.
|
// Implement for 64-bit Windows if needed.
|
||||||
// Clang hits "fatal error: error in backend:" and other errors when trying
|
// Clang hits "fatal error: error in backend:" and other errors when trying
|
||||||
// to compile the inline assembly below. 3DNow support is highly unlikely to
|
// to compile the inline assembly below. 3DNow support is highly unlikely to
|
||||||
|
@ -1038,7 +1038,7 @@ inline T QWordSwapC( T dw )
|
|||||||
// The typically used methods.
|
// The typically used methods.
|
||||||
//-------------------------------------
|
//-------------------------------------
|
||||||
|
|
||||||
#if (defined(__i386__) || defined(__amd64__) || (defined(__arm__) && defined(ANDROID))) && !defined(VALVE_LITTLE_ENDIAN)
|
#if (defined(__i386__) || defined(__amd64__) || defined(__arm__) || defined(__aarch64__)) && !defined(VALVE_LITTLE_ENDIAN)
|
||||||
#define VALVE_LITTLE_ENDIAN 1
|
#define VALVE_LITTLE_ENDIAN 1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -126,7 +126,6 @@ enum EGLMTexFlags
|
|||||||
kGLMTexMultisampled = 0x40, // has an RBO backing it. Cannot combine with Mipped, MippedAuto. One slice maximum, only targeting GL_TEXTURE_2D.
|
kGLMTexMultisampled = 0x40, // has an RBO backing it. Cannot combine with Mipped, MippedAuto. One slice maximum, only targeting GL_TEXTURE_2D.
|
||||||
// actually not 100% positive on the mipmapping, the RBO itself can't be mipped, but the resulting texture could
|
// actually not 100% positive on the mipmapping, the RBO itself can't be mipped, but the resulting texture could
|
||||||
// have mipmaps generated.
|
// have mipmaps generated.
|
||||||
kGLMTexDynamic = 0x80
|
|
||||||
};
|
};
|
||||||
|
|
||||||
//===============================================================================
|
//===============================================================================
|
||||||
@ -205,7 +204,6 @@ struct GLMTexLockParams
|
|||||||
// tells GLM to force re-read of the texels back from GL
|
// tells GLM to force re-read of the texels back from GL
|
||||||
// i.e. "I know I stepped on those texels with a draw or blit - the GLM copy is stale"
|
// i.e. "I know I stepped on those texels with a draw or blit - the GLM copy is stale"
|
||||||
bool m_readback;
|
bool m_readback;
|
||||||
bool m_readonly;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct GLMTexLockDesc
|
struct GLMTexLockDesc
|
||||||
@ -487,7 +485,7 @@ protected:
|
|||||||
int CalcSliceIndex( int face, int mip );
|
int CalcSliceIndex( int face, int mip );
|
||||||
void CalcTexelDataOffsetAndStrides( int sliceIndex, int x, int y, int z, int *offsetOut, int *yStrideOut, int *zStrideOut );
|
void CalcTexelDataOffsetAndStrides( int sliceIndex, int x, int y, int z, int *offsetOut, int *yStrideOut, int *zStrideOut );
|
||||||
|
|
||||||
GLubyte *ReadTexels( GLMTexLockDesc *desc, bool readWholeSlice=true, bool readOnly=false );
|
void ReadTexels( GLMTexLockDesc *desc, bool readWholeSlice=true );
|
||||||
void WriteTexels( GLMTexLockDesc *desc, bool writeWholeSlice=true, bool noDataWrite=false );
|
void WriteTexels( GLMTexLockDesc *desc, bool writeWholeSlice=true, bool noDataWrite=false );
|
||||||
// last param lets us send NULL data ptr (only legal with uncompressed formats, beware)
|
// last param lets us send NULL data ptr (only legal with uncompressed formats, beware)
|
||||||
// this helps out ResetSRGB.
|
// this helps out ResetSRGB.
|
||||||
@ -507,8 +505,6 @@ protected:
|
|||||||
// noWrite means send NULL for texel source addresses instead of actual data - ideal for RT's
|
// noWrite means send NULL for texel source addresses instead of actual data - ideal for RT's
|
||||||
|
|
||||||
GLuint m_texName; // name of this texture in the context
|
GLuint m_texName; // name of this texture in the context
|
||||||
GLuint m_pbo;
|
|
||||||
GLubyte *m_mapped;
|
|
||||||
GLenum m_texGLTarget;
|
GLenum m_texGLTarget;
|
||||||
uint m_nSamplerType; // SAMPLER_2D, etc.
|
uint m_nSamplerType; // SAMPLER_2D, etc.
|
||||||
|
|
||||||
|
@ -63,7 +63,7 @@ GL_FUNC_VOID(OpenGL,true,glDrawArrays,(GLenum a,GLint b,GLsizei c),(a,b,c))
|
|||||||
GL_FUNC_VOID(OpenGL,true,glDrawBuffer,(GLenum a),(a))
|
GL_FUNC_VOID(OpenGL,true,glDrawBuffer,(GLenum a),(a))
|
||||||
GL_FUNC_VOID(OpenGL,true,glDrawBuffers,(GLsizei a,const GLenum *b),(a,b))
|
GL_FUNC_VOID(OpenGL,true,glDrawBuffers,(GLsizei a,const GLenum *b),(a,b))
|
||||||
GL_FUNC_VOID(OpenGL,true,glDrawRangeElements,(GLenum a,GLuint b,GLuint c,GLsizei d,GLenum e,const GLvoid *f),(a,b,c,d,e,f))
|
GL_FUNC_VOID(OpenGL,true,glDrawRangeElements,(GLenum a,GLuint b,GLuint c,GLsizei d,GLenum e,const GLvoid *f),(a,b,c,d,e,f))
|
||||||
#ifndef OSX // 10.6/GL 2.1 compatability
|
#if 1 //ifndef OSX // 10.6/GL 2.1 compatability
|
||||||
GL_FUNC_VOID(OpenGL,true,glDrawRangeElementsBaseVertex,(GLenum a,GLuint b,GLuint c,GLsizei d,GLenum e,const GLvoid *f, GLenum g),(a,b,c,d,e,f,g))
|
GL_FUNC_VOID(OpenGL,true,glDrawRangeElementsBaseVertex,(GLenum a,GLuint b,GLuint c,GLsizei d,GLenum e,const GLvoid *f, GLenum g),(a,b,c,d,e,f,g))
|
||||||
#endif
|
#endif
|
||||||
GL_FUNC_VOID(OpenGL,true,glEnable,(GLenum a),(a))
|
GL_FUNC_VOID(OpenGL,true,glEnable,(GLenum a),(a))
|
||||||
|
@ -1451,7 +1451,7 @@ class GLMContext
|
|||||||
void FlushDrawStatesNoShaders();
|
void FlushDrawStatesNoShaders();
|
||||||
|
|
||||||
// drawing
|
// drawing
|
||||||
#ifndef OSX
|
#if 1 //ifndef OSX
|
||||||
FORCEINLINE void DrawRangeElements( GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices, uint baseVertex, CGLMBuffer *pIndexBuf );
|
FORCEINLINE void DrawRangeElements( GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices, uint baseVertex, CGLMBuffer *pIndexBuf );
|
||||||
void DrawRangeElementsNonInline( GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices, uint baseVertex, CGLMBuffer *pIndexBuf );
|
void DrawRangeElementsNonInline( GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices, uint baseVertex, CGLMBuffer *pIndexBuf );
|
||||||
#else
|
#else
|
||||||
@ -1911,7 +1911,7 @@ class GLMContext
|
|||||||
CTSQueue<CGLMTex*> m_DeleteTextureQueue;
|
CTSQueue<CGLMTex*> m_DeleteTextureQueue;
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifndef OSX
|
#if 1 //ifndef OSX
|
||||||
|
|
||||||
FORCEINLINE void GLMContext::DrawRangeElements( GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices, uint baseVertex, CGLMBuffer *pIndexBuf )
|
FORCEINLINE void GLMContext::DrawRangeElements( GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices, uint baseVertex, CGLMBuffer *pIndexBuf )
|
||||||
{
|
{
|
||||||
|
@ -66,7 +66,7 @@ GL_FUNC_VOID(OpenGL,true,glWaitSync,(GLsync a, GLbitfield b, GLuint64 c),(a,b,c)
|
|||||||
GL_FUNC_VOID(OpenGL,true,glDeleteSync,(GLsync a),(a))
|
GL_FUNC_VOID(OpenGL,true,glDeleteSync,(GLsync a),(a))
|
||||||
GL_FUNC(OpenGL,true,GLsync,glFenceSync,(GLenum a, GLbitfield b),(a,b))
|
GL_FUNC(OpenGL,true,GLsync,glFenceSync,(GLenum a, GLbitfield b),(a,b))
|
||||||
|
|
||||||
#ifndef OSX // 10.6/GL 2.1 compatability
|
#if 1 //ifndef OSX // 10.6/GL 2.1 compatability
|
||||||
GL_FUNC_VOID(OpenGL,true,glDrawRangeElementsBaseVertex,(GLenum a,GLuint b,GLuint c,GLsizei d,GLenum e,const GLvoid *f, GLenum g),(a,b,c,d,e,f,g))
|
GL_FUNC_VOID(OpenGL,true,glDrawRangeElementsBaseVertex,(GLenum a,GLuint b,GLuint c,GLsizei d,GLenum e,const GLvoid *f, GLenum g),(a,b,c,d,e,f,g))
|
||||||
#endif
|
#endif
|
||||||
GL_FUNC_VOID(OpenGL,true,glEnable,(GLenum a),(a))
|
GL_FUNC_VOID(OpenGL,true,glEnable,(GLenum a),(a))
|
||||||
|
@ -1365,7 +1365,7 @@ class GLMContext
|
|||||||
void FlushDrawStatesNoShaders();
|
void FlushDrawStatesNoShaders();
|
||||||
|
|
||||||
// drawing
|
// drawing
|
||||||
#ifndef OSX
|
#if 1 //ifndef OSX
|
||||||
FORCEINLINE void DrawRangeElements( GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices, uint baseVertex, CGLMBuffer *pIndexBuf );
|
FORCEINLINE void DrawRangeElements( GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices, uint baseVertex, CGLMBuffer *pIndexBuf );
|
||||||
void DrawRangeElementsNonInline( GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices, uint baseVertex, CGLMBuffer *pIndexBuf );
|
void DrawRangeElementsNonInline( GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices, uint baseVertex, CGLMBuffer *pIndexBuf );
|
||||||
#else
|
#else
|
||||||
@ -1815,7 +1815,7 @@ class GLMContext
|
|||||||
CTSQueue<CGLMTex*> m_DeleteTextureQueue;
|
CTSQueue<CGLMTex*> m_DeleteTextureQueue;
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifndef OSX
|
#if 1 //ifndef OSX
|
||||||
|
|
||||||
FORCEINLINE void GLMContext::DrawRangeElements( GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices, uint baseVertex, CGLMBuffer *pIndexBuf )
|
FORCEINLINE void GLMContext::DrawRangeElements( GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices, uint baseVertex, CGLMBuffer *pIndexBuf )
|
||||||
{
|
{
|
||||||
|
@ -419,7 +419,7 @@ public:
|
|||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
JOB_INTERFACE IThreadPool *CreateThreadPool();
|
JOB_INTERFACE IThreadPool *CreateThreadPool1();
|
||||||
JOB_INTERFACE void DestroyThreadPool( IThreadPool *pPool );
|
JOB_INTERFACE void DestroyThreadPool( IThreadPool *pPool );
|
||||||
|
|
||||||
//-------------------------------------
|
//-------------------------------------
|
||||||
|
@ -75,7 +75,7 @@ bool CSharedReplayContext::InitThreadPool()
|
|||||||
{
|
{
|
||||||
// Create thread pool
|
// Create thread pool
|
||||||
Log( "Replay: Creating thread pool..." );
|
Log( "Replay: Creating thread pool..." );
|
||||||
IThreadPool *pThreadPool = CreateThreadPool();
|
IThreadPool *pThreadPool = CreateThreadPool1();
|
||||||
if ( !pThreadPool )
|
if ( !pThreadPool )
|
||||||
{
|
{
|
||||||
Log( "failed!\n" );
|
Log( "failed!\n" );
|
||||||
|
@ -35,6 +35,7 @@ VALID_BUILD_TYPES = ['fastnative', 'fast', 'release', 'debug', 'nooptimize', 'sa
|
|||||||
LINKFLAGS = {
|
LINKFLAGS = {
|
||||||
'common': {
|
'common': {
|
||||||
'msvc': ['/DEBUG'], # always create PDB, doesn't affect result binaries
|
'msvc': ['/DEBUG'], # always create PDB, doesn't affect result binaries
|
||||||
|
'clang': ['-fvisibility=hidden'],
|
||||||
'gcc': ['-Wl,--no-undefined'],
|
'gcc': ['-Wl,--no-undefined'],
|
||||||
'owcc': ['-Wl,option stack=512k', '-fvisibility=hidden']
|
'owcc': ['-Wl,option stack=512k', '-fvisibility=hidden']
|
||||||
},
|
},
|
||||||
@ -48,7 +49,7 @@ CFLAGS = {
|
|||||||
'common': {
|
'common': {
|
||||||
# disable thread-safe local static initialization for C++11 code, as it cause crashes on Windows XP
|
# disable thread-safe local static initialization for C++11 code, as it cause crashes on Windows XP
|
||||||
'msvc': ['/D_USING_V110_SDK71_', '/Zi', '/FS', '/Zc:threadSafeInit-'],
|
'msvc': ['/D_USING_V110_SDK71_', '/Zi', '/FS', '/Zc:threadSafeInit-'],
|
||||||
'clang': ['-fno-strict-aliasing'],
|
'clang': ['-fno-strict-aliasing', '-fvisibility=hidden'],
|
||||||
'gcc': ['-g0', '-fno-strict-aliasing', '-fvisibility=hidden'],
|
'gcc': ['-g0', '-fno-strict-aliasing', '-fvisibility=hidden'],
|
||||||
'owcc': ['-fno-short-enum', '-ffloat-store', '-g0']
|
'owcc': ['-fno-short-enum', '-ffloat-store', '-g0']
|
||||||
},
|
},
|
||||||
|
@ -439,7 +439,7 @@ static SpewRetval_t _SpewMessage( SpewType_t spewType, const char *pGroupName, i
|
|||||||
|
|
||||||
/* direct it to the appropriate target(s) */
|
/* direct it to the appropriate target(s) */
|
||||||
SpewRetval_t ret;
|
SpewRetval_t ret;
|
||||||
assert( g_pSpewInfo == (void*)NULL );
|
assert( (void*)g_pSpewInfo == (void*)NULL );
|
||||||
SpewInfo_t spewInfo =
|
SpewInfo_t spewInfo =
|
||||||
{
|
{
|
||||||
pColor,
|
pColor,
|
||||||
|
@ -12,8 +12,12 @@
|
|||||||
#include "tier1/strtools.h"
|
#include "tier1/strtools.h"
|
||||||
|
|
||||||
#ifndef _PS3
|
#ifndef _PS3
|
||||||
|
#ifdef _OSX
|
||||||
|
#include <malloc/malloc.h>
|
||||||
|
#else
|
||||||
#include <malloc.h>
|
#include <malloc.h>
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
// Should be last include
|
// Should be last include
|
||||||
#include "tier0/memdbgon.h"
|
#include "tier0/memdbgon.h"
|
||||||
|
@ -84,6 +84,8 @@ def build(bld):
|
|||||||
libs = []
|
libs = []
|
||||||
if bld.env.DEST_OS == 'win32':
|
if bld.env.DEST_OS == 'win32':
|
||||||
libs += ['RPCRT4']
|
libs += ['RPCRT4']
|
||||||
|
elif bld.env.DEST_OS == "darwin":
|
||||||
|
libs += ['ICONV']
|
||||||
|
|
||||||
bld.stlib(
|
bld.stlib(
|
||||||
source = source,
|
source = source,
|
||||||
|
@ -763,17 +763,6 @@ CGLMTex::CGLMTex( GLMContext *ctx, GLMTexLayout *layout, uint levels, const char
|
|||||||
m_pBlitSrcFBO = NULL;
|
m_pBlitSrcFBO = NULL;
|
||||||
m_pBlitDstFBO = NULL;
|
m_pBlitDstFBO = NULL;
|
||||||
|
|
||||||
m_mapped = NULL;
|
|
||||||
m_pbo = 0;
|
|
||||||
|
|
||||||
if( m_layout->m_key.m_texFlags & kGLMTexDynamic )
|
|
||||||
{
|
|
||||||
gGL->glGenBuffersARB(1, &m_pbo);
|
|
||||||
gGL->glBindBufferARB(GL_PIXEL_UNPACK_BUFFER, m_pbo);
|
|
||||||
gGL->glBufferDataARB(GL_PIXEL_UNPACK_BUFFER, m_layout->m_storageTotalSize, 0, GL_STATIC_DRAW);
|
|
||||||
gGL->glBindBufferARB(GL_PIXEL_UNPACK_BUFFER, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Sense whether to try and apply client storage upon teximage/subimage.
|
// Sense whether to try and apply client storage upon teximage/subimage.
|
||||||
// This should only be true if we're running on OSX 10.6 or it was explicitly
|
// This should only be true if we're running on OSX 10.6 or it was explicitly
|
||||||
// enabled with -gl_texclientstorage on the command line.
|
// enabled with -gl_texclientstorage on the command line.
|
||||||
@ -837,7 +826,8 @@ CGLMTex::CGLMTex( GLMContext *ctx, GLMTexLayout *layout, uint levels, const char
|
|||||||
if ( !(layout->m_key.m_texFlags & kGLMTexRenderable) && m_texClientStorage )
|
if ( !(layout->m_key.m_texFlags & kGLMTexRenderable) && m_texClientStorage )
|
||||||
{
|
{
|
||||||
m_backing = (char *)malloc( m_layout->m_storageTotalSize );
|
m_backing = (char *)malloc( m_layout->m_storageTotalSize );
|
||||||
|
memset( m_backing, 0, m_layout->m_storageTotalSize );
|
||||||
|
|
||||||
// track bytes allocated for non-RT's
|
// track bytes allocated for non-RT's
|
||||||
int formindex = sEncodeLayoutAsIndex( &layout->m_key );
|
int formindex = sEncodeLayoutAsIndex( &layout->m_key );
|
||||||
|
|
||||||
@ -1049,10 +1039,7 @@ CGLMTex::~CGLMTex( )
|
|||||||
free( m_debugLabel );
|
free( m_debugLabel );
|
||||||
m_debugLabel = NULL;
|
m_debugLabel = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( m_pbo )
|
|
||||||
gGL->glDeleteBuffersARB( 1, &m_pbo );
|
|
||||||
|
|
||||||
m_ctx = NULL;
|
m_ctx = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1117,11 +1104,10 @@ void CGLMTex::CalcTexelDataOffsetAndStrides( int sliceIndex, int x, int y, int z
|
|||||||
*zStrideOut = zStride;
|
*zStrideOut = zStride;
|
||||||
}
|
}
|
||||||
|
|
||||||
GLubyte *CGLMTex::ReadTexels( GLMTexLockDesc *desc, bool readWholeSlice, bool readOnly )
|
void CGLMTex::ReadTexels( GLMTexLockDesc *desc, bool readWholeSlice )
|
||||||
{
|
{
|
||||||
GLMRegion readBox;
|
GLMRegion readBox;
|
||||||
GLubyte* data = NULL;
|
|
||||||
|
|
||||||
if (readWholeSlice)
|
if (readWholeSlice)
|
||||||
{
|
{
|
||||||
readBox.xmin = readBox.ymin = readBox.zmin = 0;
|
readBox.xmin = readBox.ymin = readBox.zmin = 0;
|
||||||
@ -1134,7 +1120,7 @@ GLubyte *CGLMTex::ReadTexels( GLMTexLockDesc *desc, bool readWholeSlice, bool re
|
|||||||
{
|
{
|
||||||
readBox = desc->m_req.m_region;
|
readBox = desc->m_req.m_region;
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLMTex *pPrevTex = m_ctx->m_samplers[0].m_pBoundTex;
|
CGLMTex *pPrevTex = m_ctx->m_samplers[0].m_pBoundTex;
|
||||||
m_ctx->BindTexToTMU( this, 0 ); // SelectTMU(n) is a side effect
|
m_ctx->BindTexToTMU( this, 0 ); // SelectTMU(n) is a side effect
|
||||||
|
|
||||||
@ -1146,52 +1132,46 @@ GLubyte *CGLMTex::ReadTexels( GLMTexLockDesc *desc, bool readWholeSlice, bool re
|
|||||||
|
|
||||||
GLMTexFormatDesc *format = m_layout->m_format;
|
GLMTexFormatDesc *format = m_layout->m_format;
|
||||||
GLenum target = m_layout->m_key.m_texGLTarget;
|
GLenum target = m_layout->m_key.m_texGLTarget;
|
||||||
|
|
||||||
if( readOnly )
|
void *sliceAddress = m_backing + m_layout->m_slices[ desc->m_sliceIndex ].m_storageOffset; // this would change for PBO
|
||||||
|
//int sliceSize = m_layout->m_slices[ desc->m_sliceIndex ].m_storageSize;
|
||||||
|
|
||||||
|
// interestingly enough, we can use the same path for both 2D and 3D fetch
|
||||||
|
|
||||||
|
switch( target )
|
||||||
{
|
{
|
||||||
data = (GLubyte*)(m_backing + m_layout->m_slices[ desc->m_sliceIndex ].m_storageOffset); // this would change for PBO
|
case GL_TEXTURE_CUBE_MAP:
|
||||||
//int sliceSize = m_layout->m_slices[ desc->m_sliceIndex ].m_storageSize;
|
|
||||||
|
|
||||||
// interestingly enough, we can use the same path for both 2D and 3D fetch
|
// adjust target to steer to the proper face, then fall through to the 2D texture path.
|
||||||
|
target = GL_TEXTURE_CUBE_MAP_POSITIVE_X + desc->m_req.m_face;
|
||||||
switch( target )
|
|
||||||
|
case GL_TEXTURE_2D:
|
||||||
|
case GL_TEXTURE_3D:
|
||||||
{
|
{
|
||||||
case GL_TEXTURE_CUBE_MAP:
|
// check compressed or not
|
||||||
|
if (format->m_chunkSize != 1)
|
||||||
// adjust target to steer to the proper face, then fall through to the 2D texture path.
|
|
||||||
target = GL_TEXTURE_CUBE_MAP_POSITIVE_X + desc->m_req.m_face;
|
|
||||||
case GL_TEXTURE_2D:
|
|
||||||
case GL_TEXTURE_3D:
|
|
||||||
{
|
{
|
||||||
// check compressed or not
|
// compressed path
|
||||||
if (format->m_chunkSize != 1)
|
// http://www.opengl.org/sdk/docs/man/xhtml/glGetCompressedTexImage.xml
|
||||||
{
|
|
||||||
// compressed path
|
gGL->glGetCompressedTexImage( target, // target
|
||||||
// http://www.opengl.org/sdk/docs/man/xhtml/glGetCompressedTexImage.xml
|
|
||||||
gGL->glGetCompressedTexImage( target, // target
|
|
||||||
desc->m_req.m_mip, // level
|
desc->m_req.m_mip, // level
|
||||||
data ); // destination
|
sliceAddress ); // destination
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// uncompressed path
|
// uncompressed path
|
||||||
// http://www.opengl.org/sdk/docs/man/xhtml/glGetTexImage.xml
|
// http://www.opengl.org/sdk/docs/man/xhtml/glGetTexImage.xml
|
||||||
gGL->glGetTexImage( target, // target
|
|
||||||
|
gGL->glGetTexImage( target, // target
|
||||||
desc->m_req.m_mip, // level
|
desc->m_req.m_mip, // level
|
||||||
format->m_glDataFormat, // dataformat
|
format->m_glDataFormat, // dataformat
|
||||||
format->m_glDataType, // datatype
|
format->m_glDataType, // datatype
|
||||||
data ); // destination
|
sliceAddress ); // destination
|
||||||
}
|
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
gGL->glBindBufferARB(GL_PIXEL_UNPACK_BUFFER, m_pbo);
|
|
||||||
data = (GLubyte*)gGL->glMapBufferRange(GL_PIXEL_UNPACK_BUFFER, 0, m_layout->m_slices[ desc->m_sliceIndex ].m_storageSize, GL_MAP_WRITE_BIT | GL_MAP_UNSYNCHRONIZED_BIT);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -1199,8 +1179,6 @@ GLubyte *CGLMTex::ReadTexels( GLMTexLockDesc *desc, bool readWholeSlice, bool re
|
|||||||
}
|
}
|
||||||
|
|
||||||
m_ctx->BindTexToTMU( pPrevTex, 0 );
|
m_ctx->BindTexToTMU( pPrevTex, 0 );
|
||||||
|
|
||||||
return data;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// TexSubImage should work properly on every driver stack and GPU--enabling by default.
|
// TexSubImage should work properly on every driver stack and GPU--enabling by default.
|
||||||
@ -1255,14 +1233,8 @@ void CGLMTex::WriteTexels( GLMTexLockDesc *desc, bool writeWholeSlice, bool noDa
|
|||||||
GLenum glDataFormat = format->m_glDataFormat; // this could change if expansion kicks in
|
GLenum glDataFormat = format->m_glDataFormat; // this could change if expansion kicks in
|
||||||
GLenum glDataType = format->m_glDataType;
|
GLenum glDataType = format->m_glDataType;
|
||||||
|
|
||||||
GLMTexLayoutSlice *slice = &m_layout->m_slices[ desc->m_sliceIndex ];
|
GLMTexLayoutSlice *slice = &m_layout->m_slices[ desc->m_sliceIndex ];
|
||||||
|
void *sliceAddress = m_backing ? (m_backing + slice->m_storageOffset) : NULL; // this would change for PBO
|
||||||
void *sliceAddress = NULL;
|
|
||||||
|
|
||||||
if( m_mapped )
|
|
||||||
sliceAddress = m_mapped;
|
|
||||||
else if( m_backing )
|
|
||||||
sliceAddress = m_backing + slice->m_storageOffset;
|
|
||||||
|
|
||||||
// allow use of subimage if the target is texture2D and it has already been teximage'd
|
// allow use of subimage if the target is texture2D and it has already been teximage'd
|
||||||
bool mayUseSubImage = false;
|
bool mayUseSubImage = false;
|
||||||
@ -1309,7 +1281,7 @@ void CGLMTex::WriteTexels( GLMTexLockDesc *desc, bool writeWholeSlice, bool noDa
|
|||||||
gGL->glTexParameteri( target, GL_TEXTURE_BASE_LEVEL, desc->m_req.m_mip);
|
gGL->glTexParameteri( target, GL_TEXTURE_BASE_LEVEL, desc->m_req.m_mip);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (needsExpand && !m_mapped)
|
if (needsExpand)
|
||||||
{
|
{
|
||||||
int expandSize = 0;
|
int expandSize = 0;
|
||||||
|
|
||||||
@ -1389,13 +1361,12 @@ void CGLMTex::WriteTexels( GLMTexLockDesc *desc, bool writeWholeSlice, bool noDa
|
|||||||
{
|
{
|
||||||
// go subimage2D if it's a replacement, not a creation
|
// go subimage2D if it's a replacement, not a creation
|
||||||
|
|
||||||
if( !m_mapped )
|
|
||||||
{
|
|
||||||
gGL->glPixelStorei( GL_UNPACK_ROW_LENGTH, slice->m_xSize ); // in pixels
|
|
||||||
gGL->glPixelStorei( GL_UNPACK_SKIP_PIXELS, writeBox.xmin ); // in pixels
|
|
||||||
gGL->glPixelStorei( GL_UNPACK_SKIP_ROWS, writeBox.ymin ); // in pixels
|
|
||||||
|
|
||||||
gGL->glTexSubImage2D( target,
|
gGL->glPixelStorei( GL_UNPACK_ROW_LENGTH, slice->m_xSize ); // in pixels
|
||||||
|
gGL->glPixelStorei( GL_UNPACK_SKIP_PIXELS, writeBox.xmin ); // in pixels
|
||||||
|
gGL->glPixelStorei( GL_UNPACK_SKIP_ROWS, writeBox.ymin ); // in pixels
|
||||||
|
|
||||||
|
gGL->glTexSubImage2D( target,
|
||||||
desc->m_req.m_mip, // level
|
desc->m_req.m_mip, // level
|
||||||
writeBox.xmin, // xoffset into dest
|
writeBox.xmin, // xoffset into dest
|
||||||
writeBox.ymin, // yoffset into dest
|
writeBox.ymin, // yoffset into dest
|
||||||
@ -1404,25 +1375,25 @@ void CGLMTex::WriteTexels( GLMTexLockDesc *desc, bool writeWholeSlice, bool noDa
|
|||||||
glDataFormat, // format
|
glDataFormat, // format
|
||||||
glDataType, // type
|
glDataType, // type
|
||||||
sliceAddress // data (will be offsetted by the SKIP_PIXELS and SKIP_ROWS - let GL do the math to find the first source texel)
|
sliceAddress // data (will be offsetted by the SKIP_PIXELS and SKIP_ROWS - let GL do the math to find the first source texel)
|
||||||
);
|
);
|
||||||
|
|
||||||
gGL->glPixelStorei( GL_UNPACK_ROW_LENGTH, 0 );
|
gGL->glPixelStorei( GL_UNPACK_ROW_LENGTH, 0 );
|
||||||
gGL->glPixelStorei( GL_UNPACK_SKIP_PIXELS, 0 );
|
gGL->glPixelStorei( GL_UNPACK_SKIP_PIXELS, 0 );
|
||||||
gGL->glPixelStorei( GL_UNPACK_SKIP_ROWS, 0 );
|
gGL->glPixelStorei( GL_UNPACK_SKIP_ROWS, 0 );
|
||||||
}
|
|
||||||
else
|
/*
|
||||||
{
|
//http://www.opengl.org/sdk/docs/man/xhtml/glTexSubImage2D.xml
|
||||||
gGL->glTexSubImage2D( target,
|
glTexSubImage2D( target,
|
||||||
desc->m_req.m_mip, // level
|
desc->m_req.m_mip, // level
|
||||||
writeBox.xmin, // xoffset into dest
|
0, // xoffset
|
||||||
writeBox.ymin, // yoffset into dest
|
0, // yoffset
|
||||||
writeBox.xmax - writeBox.xmin, // width (was slice->m_xSize)
|
slice->m_xSize, // width
|
||||||
writeBox.ymax - writeBox.ymin, // height (was slice->m_ySize)
|
slice->m_ySize, // height
|
||||||
glDataFormat, // format
|
glDataFormat, // format
|
||||||
glDataType, // type
|
glDataType, // type
|
||||||
0
|
sliceAddress // data
|
||||||
);
|
);
|
||||||
}
|
*/
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -1485,6 +1456,8 @@ void CGLMTex::WriteTexels( GLMTexLockDesc *desc, bool writeWholeSlice, bool noDa
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
// uncompressed path
|
||||||
|
// http://www.opengl.org/sdk/docs/man/xhtml/glTexImage3D.xml
|
||||||
gGL->glTexImage3D( target, // target
|
gGL->glTexImage3D( target, // target
|
||||||
desc->m_req.m_mip, // level
|
desc->m_req.m_mip, // level
|
||||||
intformat, // internalformat
|
intformat, // internalformat
|
||||||
@ -1567,11 +1540,11 @@ void CGLMTex::Lock( GLMTexLockParams *params, char** addressOut, int* yStrideOut
|
|||||||
unStoragePow2 |= unStoragePow2 >> 8;
|
unStoragePow2 |= unStoragePow2 >> 8;
|
||||||
unStoragePow2 |= unStoragePow2 >> 16;
|
unStoragePow2 |= unStoragePow2 >> 16;
|
||||||
unStoragePow2++;
|
unStoragePow2++;
|
||||||
m_backing = (char *)malloc( unStoragePow2 );
|
m_backing = (char *)calloc( unStoragePow2, 1 );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_backing = (char *)malloc( m_layout->m_storageTotalSize );
|
m_backing = (char *)calloc( m_layout->m_storageTotalSize, 1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
// clear the kSliceStorageValid bit on all slices
|
// clear the kSliceStorageValid bit on all slices
|
||||||
@ -1666,18 +1639,14 @@ void CGLMTex::Lock( GLMTexLockParams *params, char** addressOut, int* yStrideOut
|
|||||||
|
|
||||||
desc->m_sliceRegionOffset = offsetInSlice + desc->m_sliceBaseOffset;
|
desc->m_sliceRegionOffset = offsetInSlice + desc->m_sliceBaseOffset;
|
||||||
|
|
||||||
if ( copyout && ( (m_layout->m_key.m_texFlags & kGLMTexDynamic) || params->m_readonly ) )
|
if (copyout)
|
||||||
{
|
{
|
||||||
*addressOut = (char*)ReadTexels( desc, true, params->m_readonly );
|
// read the whole slice
|
||||||
|
// (odds are we'll never request anything but a whole slice to be read..)
|
||||||
if( params->m_readonly == false )
|
ReadTexels( desc, true );
|
||||||
m_mapped = (GLubyte*)*addressOut;
|
} // this would be a good place to fill with scrub value if in debug...
|
||||||
}
|
|
||||||
else
|
*addressOut = m_backing + desc->m_sliceRegionOffset;
|
||||||
{
|
|
||||||
*addressOut = m_backing + desc->m_sliceRegionOffset;
|
|
||||||
}
|
|
||||||
|
|
||||||
*yStrideOut = yStride;
|
*yStrideOut = yStride;
|
||||||
*zStrideOut = zStride;
|
*zStrideOut = zStride;
|
||||||
|
|
||||||
@ -1763,16 +1732,7 @@ void CGLMTex::Unlock( GLMTexLockParams *params )
|
|||||||
|
|
||||||
// fullyDirty |= (m_sliceFlags[ desc->m_sliceIndex ] & kSliceStorageValid);
|
// fullyDirty |= (m_sliceFlags[ desc->m_sliceIndex ] & kSliceStorageValid);
|
||||||
|
|
||||||
if( m_layout->m_key.m_texFlags & kGLMTexDynamic && m_mapped )
|
WriteTexels( desc, fullyDirty );
|
||||||
{
|
|
||||||
gGL->glUnmapBuffer(GL_PIXEL_UNPACK_BUFFER);
|
|
||||||
|
|
||||||
WriteTexels( desc, fullyDirty );
|
|
||||||
m_mapped = NULL;
|
|
||||||
gGL->glBindBufferARB(GL_PIXEL_UNPACK_BUFFER, 0);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
WriteTexels( desc, fullyDirty );
|
|
||||||
|
|
||||||
// logical place to trigger preloading
|
// logical place to trigger preloading
|
||||||
// only do it for an RT tex, if it is not yet attached to any FBO.
|
// only do it for an RT tex, if it is not yet attached to any FBO.
|
||||||
|
@ -404,7 +404,7 @@ HRESULT IDirect3DDevice9::CreateTexture(UINT Width,UINT Height,UINT Levels,DWORD
|
|||||||
|
|
||||||
if (Usage & D3DUSAGE_DYNAMIC)
|
if (Usage & D3DUSAGE_DYNAMIC)
|
||||||
{
|
{
|
||||||
key.m_texFlags |= kGLMTexDynamic;
|
// GLMPRINTF(("-X- DYNAMIC tex usage ignored..")); //FIXME
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Usage & D3DUSAGE_TEXTURE_SRGB)
|
if (Usage & D3DUSAGE_TEXTURE_SRGB)
|
||||||
@ -617,7 +617,7 @@ HRESULT IDirect3DDevice9::CreateCubeTexture(UINT EdgeLength,UINT Levels,DWORD Us
|
|||||||
|
|
||||||
if (Usage & D3DUSAGE_DYNAMIC)
|
if (Usage & D3DUSAGE_DYNAMIC)
|
||||||
{
|
{
|
||||||
key.m_texFlags |= kGLMTexDynamic;
|
//GLMPRINTF(("-X- DYNAMIC tex usage ignored..")); //FIXME
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Usage & D3DUSAGE_TEXTURE_SRGB)
|
if (Usage & D3DUSAGE_TEXTURE_SRGB)
|
||||||
@ -823,7 +823,7 @@ HRESULT IDirect3DDevice9::CreateVolumeTexture(UINT Width,UINT Height,UINT Depth,
|
|||||||
|
|
||||||
if (Usage & D3DUSAGE_DYNAMIC)
|
if (Usage & D3DUSAGE_DYNAMIC)
|
||||||
{
|
{
|
||||||
key.m_texFlags |= kGLMTexDynamic;
|
GLMPRINTF(("-X- DYNAMIC tex usage ignored..")); //FIXME
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Usage & D3DUSAGE_TEXTURE_SRGB)
|
if (Usage & D3DUSAGE_TEXTURE_SRGB)
|
||||||
@ -1040,9 +1040,7 @@ HRESULT IDirect3DSurface9::LockRect(D3DLOCKED_RECT* pLockedRect,CONST RECT* pRec
|
|||||||
// smells like readback, force texel readout
|
// smells like readback, force texel readout
|
||||||
lockreq.m_readback = true;
|
lockreq.m_readback = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
lockreq.m_readonly = (Flags & D3DLOCK_READONLY) ? true : false;
|
|
||||||
|
|
||||||
char *lockAddress;
|
char *lockAddress;
|
||||||
int yStride;
|
int yStride;
|
||||||
int zStride;
|
int zStride;
|
||||||
@ -5329,7 +5327,7 @@ HRESULT IDirect3DDevice9::DrawPrimitiveUP(D3DPRIMITIVETYPE PrimitiveType,UINT Pr
|
|||||||
// [in] Number of primitives to render. The number of vertices used is a function of the primitive count and the primitive type. The maximum number of primitives allowed is determined by checking the MaxPrimitiveCount member of the D3DCAPS9 structure.
|
// [in] Number of primitives to render. The number of vertices used is a function of the primitive count and the primitive type. The maximum number of primitives allowed is determined by checking the MaxPrimitiveCount member of the D3DCAPS9 structure.
|
||||||
|
|
||||||
// BE VERY CAREFUL what you do in this function. It's extremely hot, and calling the wrong GL API's in here will crush perf. on NVidia threaded drivers.
|
// BE VERY CAREFUL what you do in this function. It's extremely hot, and calling the wrong GL API's in here will crush perf. on NVidia threaded drivers.
|
||||||
#ifndef OSX
|
#if 1 //ifndef OSX
|
||||||
|
|
||||||
HRESULT IDirect3DDevice9::DrawIndexedPrimitive( D3DPRIMITIVETYPE Type, INT BaseVertexIndex, UINT MinVertexIndex, UINT NumVertices, UINT startIndex, UINT primCount )
|
HRESULT IDirect3DDevice9::DrawIndexedPrimitive( D3DPRIMITIVETYPE Type, INT BaseVertexIndex, UINT MinVertexIndex, UINT NumVertices, UINT startIndex, UINT primCount )
|
||||||
{
|
{
|
||||||
|
@ -2812,6 +2812,7 @@ GLMContext::GLMContext( IDirect3DDevice9 *pDevice, GLMDisplayParams *params )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
if ( m_caps.m_badDriver108Intel )
|
if ( m_caps.m_badDriver108Intel )
|
||||||
{
|
{
|
||||||
// this way we have something to look for in terminal spew if users report issues related to this in the future.
|
// this way we have something to look for in terminal spew if users report issues related to this in the future.
|
||||||
@ -2821,6 +2822,7 @@ GLMContext::GLMContext( IDirect3DDevice9 *pDevice, GLMDisplayParams *params )
|
|||||||
Warning( "Unable to enable OSX 10.8 / Intel HD4000 workaround, there might be crashes.\n" );
|
Warning( "Unable to enable OSX 10.8 / Intel HD4000 workaround, there might be crashes.\n" );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
// also, set the remote convar "gl_can_query_fast" to 1 if perf package present, else 0.
|
// also, set the remote convar "gl_can_query_fast" to 1 if perf package present, else 0.
|
||||||
@ -5080,7 +5082,7 @@ static inline uint GetDataTypeSizeInBytes( GLenum dataType )
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef OSX
|
#if 1 //ifndef OS
|
||||||
|
|
||||||
void GLMContext::DrawRangeElementsNonInline( GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices, uint baseVertex, CGLMBuffer *pIndexBuf )
|
void GLMContext::DrawRangeElementsNonInline( GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices, uint baseVertex, CGLMBuffer *pIndexBuf )
|
||||||
{
|
{
|
||||||
|
10
togl/wscript
10
togl/wscript
@ -23,9 +23,6 @@ def build(bld):
|
|||||||
'linuxwin/glentrypoints.cpp',
|
'linuxwin/glentrypoints.cpp',
|
||||||
'linuxwin/glmgr.cpp',
|
'linuxwin/glmgr.cpp',
|
||||||
'linuxwin/glmgrbasics.cpp',
|
'linuxwin/glmgrbasics.cpp',
|
||||||
#'linuxwin/glmgrcocoa.mm', [$OSXALL]
|
|
||||||
#'linuxwin/intelglmallocworkaround.cpp', [$OSXALL]
|
|
||||||
#'linuxwin/mach_override.c', [$OSXALL]
|
|
||||||
'linuxwin/cglmtex.cpp',
|
'linuxwin/cglmtex.cpp',
|
||||||
'linuxwin/cglmfbo.cpp',
|
'linuxwin/cglmfbo.cpp',
|
||||||
'linuxwin/cglmprogram.cpp',
|
'linuxwin/cglmprogram.cpp',
|
||||||
@ -33,6 +30,10 @@ def build(bld):
|
|||||||
'linuxwin/cglmquery.cpp',
|
'linuxwin/cglmquery.cpp',
|
||||||
'linuxwin/asanstubs.cpp'
|
'linuxwin/asanstubs.cpp'
|
||||||
]
|
]
|
||||||
|
if bld.env.DEST_OS == "darwin":
|
||||||
|
source += [
|
||||||
|
'linuxwin/glmgrcocoa.mm',
|
||||||
|
]
|
||||||
|
|
||||||
includes = [
|
includes = [
|
||||||
'.',
|
'.',
|
||||||
@ -45,6 +46,9 @@ def build(bld):
|
|||||||
|
|
||||||
libs = ['tier0','tier1','tier2','vstdlib','mathlib']
|
libs = ['tier0','tier1','tier2','vstdlib','mathlib']
|
||||||
|
|
||||||
|
if bld.env.DEST_OS == "darwin":
|
||||||
|
libs += ["OPENGL", "CARBON"]
|
||||||
|
|
||||||
install_path = bld.env.LIBDIR
|
install_path = bld.env.LIBDIR
|
||||||
|
|
||||||
bld.shlib(
|
bld.shlib(
|
||||||
|
@ -5326,7 +5326,7 @@ HRESULT IDirect3DDevice9::DrawPrimitiveUP(D3DPRIMITIVETYPE PrimitiveType,UINT Pr
|
|||||||
// [in] Number of primitives to render. The number of vertices used is a function of the primitive count and the primitive type. The maximum number of primitives allowed is determined by checking the MaxPrimitiveCount member of the D3DCAPS9 structure.
|
// [in] Number of primitives to render. The number of vertices used is a function of the primitive count and the primitive type. The maximum number of primitives allowed is determined by checking the MaxPrimitiveCount member of the D3DCAPS9 structure.
|
||||||
|
|
||||||
// BE VERY CAREFUL what you do in this function. It's extremely hot, and calling the wrong GL API's in here will crush perf. on NVidia threaded drivers.
|
// BE VERY CAREFUL what you do in this function. It's extremely hot, and calling the wrong GL API's in here will crush perf. on NVidia threaded drivers.
|
||||||
#ifndef OSX
|
#if 1 //ifndef OSX
|
||||||
|
|
||||||
HRESULT IDirect3DDevice9::DrawIndexedPrimitive( D3DPRIMITIVETYPE Type, INT BaseVertexIndex, UINT MinVertexIndex, UINT NumVertices, UINT startIndex, UINT primCount )
|
HRESULT IDirect3DDevice9::DrawIndexedPrimitive( D3DPRIMITIVETYPE Type, INT BaseVertexIndex, UINT MinVertexIndex, UINT NumVertices, UINT startIndex, UINT primCount )
|
||||||
{
|
{
|
||||||
|
@ -2692,6 +2692,7 @@ GLMContext::GLMContext( IDirect3DDevice9 *pDevice, GLMDisplayParams *params )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
if ( m_caps.m_badDriver108Intel )
|
if ( m_caps.m_badDriver108Intel )
|
||||||
{
|
{
|
||||||
// this way we have something to look for in terminal spew if users report issues related to this in the future.
|
// this way we have something to look for in terminal spew if users report issues related to this in the future.
|
||||||
@ -2701,6 +2702,7 @@ GLMContext::GLMContext( IDirect3DDevice9 *pDevice, GLMDisplayParams *params )
|
|||||||
Warning( "Unable to enable OSX 10.8 / Intel HD4000 workaround, there might be crashes.\n" );
|
Warning( "Unable to enable OSX 10.8 / Intel HD4000 workaround, there might be crashes.\n" );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
// also, set the remote convar "gl_can_query_fast" to 1 if perf package present, else 0.
|
// also, set the remote convar "gl_can_query_fast" to 1 if perf package present, else 0.
|
||||||
@ -4899,7 +4901,7 @@ static inline uint GetDataTypeSizeInBytes( GLenum dataType )
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef OSX
|
#if 1 //ifndef OSX
|
||||||
|
|
||||||
void GLMContext::DrawRangeElementsNonInline( GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices, uint baseVertex, CGLMBuffer *pIndexBuf )
|
void GLMContext::DrawRangeElementsNonInline( GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices, uint baseVertex, CGLMBuffer *pIndexBuf )
|
||||||
{
|
{
|
||||||
|
@ -23,7 +23,6 @@ def build(bld):
|
|||||||
'linuxwin/glentrypoints.cpp',
|
'linuxwin/glentrypoints.cpp',
|
||||||
'linuxwin/glmgr.cpp',
|
'linuxwin/glmgr.cpp',
|
||||||
'linuxwin/glmgrbasics.cpp',
|
'linuxwin/glmgrbasics.cpp',
|
||||||
#'linuxwin/glmgrcocoa.mm', [$OSXALL]
|
|
||||||
#'linuxwin/intelglmallocworkaround.cpp', [$OSXALL]
|
#'linuxwin/intelglmallocworkaround.cpp', [$OSXALL]
|
||||||
#'linuxwin/mach_override.c', [$OSXALL]
|
#'linuxwin/mach_override.c', [$OSXALL]
|
||||||
'linuxwin/cglmtex.cpp',
|
'linuxwin/cglmtex.cpp',
|
||||||
@ -35,6 +34,9 @@ def build(bld):
|
|||||||
'linuxwin/decompress.c'
|
'linuxwin/decompress.c'
|
||||||
]
|
]
|
||||||
|
|
||||||
|
if bld.env.DEST_OS == "darwin":
|
||||||
|
source += ['linuxwin/glmgrcocoa.mm']
|
||||||
|
|
||||||
includes = [
|
includes = [
|
||||||
'.',
|
'.',
|
||||||
'../public',
|
'../public',
|
||||||
@ -46,6 +48,9 @@ def build(bld):
|
|||||||
|
|
||||||
libs = ['tier0','tier1','tier2','vstdlib','mathlib']
|
libs = ['tier0','tier1','tier2','vstdlib','mathlib']
|
||||||
|
|
||||||
|
if bld.env.DEST_OS == "darwin":
|
||||||
|
libs += ["OPENGL", "CARBON"]
|
||||||
|
|
||||||
install_path = bld.env.LIBDIR
|
install_path = bld.env.LIBDIR
|
||||||
|
|
||||||
bld.shlib(
|
bld.shlib(
|
||||||
|
@ -7,7 +7,11 @@
|
|||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#ifdef OSX
|
||||||
|
#include <malloc/malloc.h>
|
||||||
|
#else
|
||||||
#include <malloc.h>
|
#include <malloc.h>
|
||||||
|
#endif
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include "tier1/strtools.h"
|
#include "tier1/strtools.h"
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
|
@ -62,6 +62,8 @@ def build(bld):
|
|||||||
|
|
||||||
if bld.env.DEST_OS == 'win32':
|
if bld.env.DEST_OS == 'win32':
|
||||||
libs += ['USER32', 'IMM32', 'GDI32', 'SHELL32', 'OLE32', 'SHLWAPI', 'vgui_surfacelib', 'WINMM']
|
libs += ['USER32', 'IMM32', 'GDI32', 'SHELL32', 'OLE32', 'SHLWAPI', 'vgui_surfacelib', 'WINMM']
|
||||||
|
elif bld.env.DEST_OS == 'darwin':
|
||||||
|
libs += ['APPLICATIONSERVICES']
|
||||||
|
|
||||||
install_path = bld.env.LIBDIR
|
install_path = bld.env.LIBDIR
|
||||||
|
|
||||||
|
@ -34,6 +34,8 @@ def build(bld):
|
|||||||
|
|
||||||
if bld.env.DEST_OS == 'win32':
|
if bld.env.DEST_OS == 'win32':
|
||||||
libs += ['USER32']
|
libs += ['USER32']
|
||||||
|
elif bld.env.DEST_OS == 'darwin':
|
||||||
|
libs += ['COREGRAPHICS']
|
||||||
|
|
||||||
install_path = bld.env.LIBDIR
|
install_path = bld.env.LIBDIR
|
||||||
|
|
||||||
|
@ -285,7 +285,7 @@ private:
|
|||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
JOB_INTERFACE IThreadPool *CreateThreadPool()
|
JOB_INTERFACE IThreadPool *CreateThreadPool1()
|
||||||
{
|
{
|
||||||
return new CThreadPool;
|
return new CThreadPool;
|
||||||
}
|
}
|
||||||
|
@ -51,6 +51,8 @@ def build(bld):
|
|||||||
|
|
||||||
if bld.env.DEST_OS == 'android':
|
if bld.env.DEST_OS == 'android':
|
||||||
libs += ['ANDROID_SUPPORT']
|
libs += ['ANDROID_SUPPORT']
|
||||||
|
elif bld.env.DEST_OS == 'darwin':
|
||||||
|
libs += ['ICONV', 'COREFOUNDATION', 'CORESERVICES']
|
||||||
|
|
||||||
install_path = bld.env.LIBDIR
|
install_path = bld.env.LIBDIR
|
||||||
|
|
||||||
|
40
wscript
40
wscript
@ -212,6 +212,14 @@ def define_platform(conf):
|
|||||||
'_ALLOW_MSC_VER_MISMATCH',
|
'_ALLOW_MSC_VER_MISMATCH',
|
||||||
'NO_X360_XDK'
|
'NO_X360_XDK'
|
||||||
])
|
])
|
||||||
|
elif conf.env.DEST_OS == 'darwin':
|
||||||
|
conf.env.append_unique('DEFINES', [
|
||||||
|
'OSX=1', '_OSX=1',
|
||||||
|
'POSIX=1', '_POSIX=1', 'PLATFORM_POSIX=1',
|
||||||
|
'GNUC',
|
||||||
|
'NO_HOOK_MALLOC',
|
||||||
|
'_DLL_EXT=.dylib'
|
||||||
|
])
|
||||||
|
|
||||||
if conf.options.DEBUG_ENGINE:
|
if conf.options.DEBUG_ENGINE:
|
||||||
conf.env.append_unique('DEFINES', [
|
conf.env.append_unique('DEFINES', [
|
||||||
@ -302,8 +310,7 @@ def configure(conf):
|
|||||||
conf.env.BIT32_MANDATORY = not conf.options.ALLOW64
|
conf.env.BIT32_MANDATORY = not conf.options.ALLOW64
|
||||||
if conf.env.BIT32_MANDATORY:
|
if conf.env.BIT32_MANDATORY:
|
||||||
Logs.info('WARNING: will build engine for 32-bit target')
|
Logs.info('WARNING: will build engine for 32-bit target')
|
||||||
|
conf.load('force_32bit')
|
||||||
conf.load('force_32bit')
|
|
||||||
|
|
||||||
if conf.options.DISABLE_WARNS:
|
if conf.options.DISABLE_WARNS:
|
||||||
compiler_optional_flags = ['-w']
|
compiler_optional_flags = ['-w']
|
||||||
@ -353,7 +360,7 @@ def configure(conf):
|
|||||||
]
|
]
|
||||||
|
|
||||||
flags += ['-funwind-tables', '-fvisibility=default']
|
flags += ['-funwind-tables', '-fvisibility=default']
|
||||||
elif conf.env.COMPILER_CC != 'msvc':
|
elif conf.env.COMPILER_CC not in ['msvc', 'clang']:
|
||||||
flags += ['-march=native']
|
flags += ['-march=native']
|
||||||
|
|
||||||
if conf.env.DEST_CPU in ['x86', 'x86_64']:
|
if conf.env.DEST_CPU in ['x86', 'x86_64']:
|
||||||
@ -444,7 +451,10 @@ def configure(conf):
|
|||||||
else:
|
else:
|
||||||
conf.check_pkg('freetype2', 'FT2', FT2_CHECK)
|
conf.check_pkg('freetype2', 'FT2', FT2_CHECK)
|
||||||
conf.check_pkg('fontconfig', 'FC', FC_CHECK)
|
conf.check_pkg('fontconfig', 'FC', FC_CHECK)
|
||||||
conf.check_cfg(package='openal', uselib_store='OPENAL', args=['--cflags', '--libs'])
|
if conf.env.DEST_OS == "darwin":
|
||||||
|
conf.env.FRAMEWORK_OPENAL = "OpenAL"
|
||||||
|
else:
|
||||||
|
conf.check_cfg(package='openal', uselib_store='OPENAL', args=['--cflags', '--libs'])
|
||||||
conf.check_cfg(package='libjpeg', uselib_store='JPEG', args=['--cflags', '--libs'])
|
conf.check_cfg(package='libjpeg', uselib_store='JPEG', args=['--cflags', '--libs'])
|
||||||
conf.check_cfg(package='libpng', uselib_store='PNG', args=['--cflags', '--libs'])
|
conf.check_cfg(package='libpng', uselib_store='PNG', args=['--cflags', '--libs'])
|
||||||
conf.check_cfg(package='libcurl', uselib_store='CURL', args=['--cflags', '--libs'])
|
conf.check_cfg(package='libcurl', uselib_store='CURL', args=['--cflags', '--libs'])
|
||||||
@ -466,6 +476,21 @@ def configure(conf):
|
|||||||
conf.check(lib='android_support', uselib_store='ANDROID_SUPPORT')
|
conf.check(lib='android_support', uselib_store='ANDROID_SUPPORT')
|
||||||
conf.check(lib='opus', uselib_store='OPUS')
|
conf.check(lib='opus', uselib_store='OPUS')
|
||||||
|
|
||||||
|
if conf.env.DEST_OS == "darwin":
|
||||||
|
conf.check(lib='iconv', uselib_store='ICONV')
|
||||||
|
conf.env.FRAMEWORK_APPKIT = "AppKit"
|
||||||
|
conf.env.FRAMEWORK_IOKIT = "IOKit"
|
||||||
|
conf.env.FRAMEWORK_FOUNDATION = "Foundation"
|
||||||
|
conf.env.FRAMEWORK_COREFOUNDATION = "CoreFoundation"
|
||||||
|
conf.env.FRAMEWORK_COREGRAPHICS = "CoreGraphics"
|
||||||
|
conf.env.FRAMEWORK_OPENGL = "OpenGL"
|
||||||
|
conf.env.FRAMEWORK_CARBON = "Carbon"
|
||||||
|
conf.env.FRAMEWORK_APPLICATIONSERVICES = "ApplicationServices"
|
||||||
|
conf.env.FRAMEWORK_CORESERVICES = "CoreServices"
|
||||||
|
conf.env.FRAMEWORK_COREAUDIO = "CoreAudio"
|
||||||
|
conf.env.FRAMEWORK_AUDIOTOOLBOX = "AudioToolbox"
|
||||||
|
conf.env.FRAMEWORK_SYSTEMCONFIGURATION = "SystemConfiguration"
|
||||||
|
|
||||||
if conf.env.DEST_OS != 'win32':
|
if conf.env.DEST_OS != 'win32':
|
||||||
conf.check_cc(lib='dl', mandatory=False)
|
conf.check_cc(lib='dl', mandatory=False)
|
||||||
conf.check_cc(lib='bz2', mandatory=False)
|
conf.check_cc(lib='bz2', mandatory=False)
|
||||||
@ -535,6 +560,13 @@ def configure(conf):
|
|||||||
else:
|
else:
|
||||||
conf.add_subproject(projects['game'])
|
conf.add_subproject(projects['game'])
|
||||||
|
|
||||||
|
from waflib import TaskGen
|
||||||
|
@TaskGen.extension('.mm')
|
||||||
|
def m_hook(self, node):
|
||||||
|
"""Alias .mm files to be compiled the same as .cpp files, gcc will do the right thing."""
|
||||||
|
return self.create_compiled_task('cxx', node)
|
||||||
|
|
||||||
|
|
||||||
def build(bld):
|
def build(bld):
|
||||||
os.environ["CCACHE_DIR"] = os.path.abspath('.ccache/'+bld.env.COMPILER_CC+'/'+bld.env.DEST_OS+'/'+bld.env.DEST_CPU)
|
os.environ["CCACHE_DIR"] = os.path.abspath('.ccache/'+bld.env.COMPILER_CC+'/'+bld.env.DEST_OS+'/'+bld.env.DEST_CPU)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user