diff --git a/GNUmakefile b/GNUmakefile index 3a8ab3528..8ae2efab5 100755 --- a/GNUmakefile +++ b/GNUmakefile @@ -11,6 +11,17 @@ ifeq ($(GNUSTEP_HOST_OS),mingw32) endif GNUSTEP_OBJ_DIR_BASENAME := $(GNUSTEP_OBJ_DIR_NAME) +# decide whether we are building legacy or modern based on gcc version, +# which is available to all dev environments +GCCVERSION := $(shell gcc --version | grep ^gcc | sed 's/^.* //g') +ifeq ($(GCCVERSION),4.7.1) + $(info Compiling legacy build) + modern = no +else + $(info Compiling modern build) + modern = yes +endif + ifeq ($(GNUSTEP_HOST_OS),mingw32) vpath %.rc src/SDL/OOResourcesWin @@ -23,18 +34,33 @@ ifeq ($(GNUSTEP_HOST_OS),mingw32) JS_IMPORT_LIBRARY = js32ECMAv5 endif - ADDITIONAL_INCLUDE_DIRS = -I$(WIN_DEPS_DIR)/include -I$(JS_INC_DIR) -Isrc/SDL -Isrc/Core -Isrc/BSDCompat -Isrc/Core/Scripting -Isrc/Core/Materials -Isrc/Core/Entities -Isrc/Core/OXPVerifier -Isrc/Core/Debug -Isrc/Core/Tables -Isrc/Core/MiniZip -Isrc/SDL/EXRSnapshotSupport - ADDITIONAL_OBJC_LIBS = -L$(WIN_DEPS_DIR)/lib -lglu32 -lopengl32 -lopenal32.dll -lpng14.dll -lmingw32 -lSDLmain -lSDL -lvorbisfile.dll -lvorbis.dll -lz -lgnustep-base -l$(JS_IMPORT_LIBRARY) -lshlwapi -ldwmapi -lwinmm -mwindows - ADDITIONAL_CFLAGS = -DWIN32 -DNEED_STRLCPY `sdl-config --cflags` -mtune=generic -DWINVER=0x0601 -D_WIN32_WINNT=0x0601 + ifeq ($(modern),yes) + SPEECH_LIBRARY_NAME = espeak-ng + OPENAL_LIBRARY_NAME = openal + LIBPNG_LIBRARY_NAME = png + else + SPEECH_LIBRARY_NAME = espeak + OPENAL_LIBRARY_NAME = openal32 + LIBPNG_LIBRARY_NAME = png14 + endif + + ADDITIONAL_INCLUDE_DIRS = -Isrc/SDL -Isrc/Core -Isrc/BSDCompat -Isrc/Core/Scripting -Isrc/Core/Materials -Isrc/Core/Entities -Isrc/Core/OXPVerifier -Isrc/Core/Debug -Isrc/Core/Tables -Isrc/Core/MiniZip -Isrc/SDL/EXRSnapshotSupport + ADDITIONAL_OBJC_LIBS = -lglu32 -lopengl32 -l$(OPENAL_LIBRARY_NAME).dll -l$(LIBPNG_LIBRARY_NAME).dll -lmingw32 -lSDLmain -lSDL -lvorbisfile.dll -lvorbis.dll -lz -lgnustep-base -l$(JS_IMPORT_LIBRARY) -lshlwapi -ldwmapi -lwinmm -mwindows + ADDITIONAL_CFLAGS = -DWIN32 -DNEED_STRLCPY `sdl-config --cflags` -mtune=generic -DWINVER=0x0601 -D_WIN32_WINNT=0x0601 -DNTDDI_VERSION=0x0A00000F # note the vpath stuff above isn't working for me, so adding src/SDL and src/Core explicitly - ADDITIONAL_OBJCFLAGS = -DLOADSAVEGUI -DWIN32 -DXP_WIN -Wno-import -std=gnu99 `sdl-config --cflags` -mtune=generic -DWINVER=0x0601 -D_WIN32_WINNT=0x0601 + ADDITIONAL_OBJCFLAGS = -DLOADSAVEGUI -DWIN32 -DXP_WIN -Wno-import -std=gnu99 `sdl-config --cflags` -mtune=generic -DWINVER=0x0601 -D_WIN32_WINNT=0x0601 -DNTDDI_VERSION=0x0A00000F # oolite_LIB_DIRS += -L$(GNUSTEP_LOCAL_ROOT)/lib -L$(WIN_DEPS_DIR)/lib -L$(JS_LIB_DIR) ifeq ($(ESPEAK),yes) - ADDITIONAL_OBJC_LIBS += -lespeak.dll + ADDITIONAL_OBJC_LIBS += -l$(SPEECH_LIBRARY_NAME).dll ADDITIONAL_OBJCFLAGS +=-DHAVE_LIBESPEAK=1 GNUSTEP_OBJ_DIR_NAME := $(GNUSTEP_OBJ_DIR_NAME).spk endif + + ifneq ($(modern),yes) + ADDITIONAL_INCLUDE_DIRS += -I$(WIN_DEPS_DIR)/include -I$(JS_INC_DIR) + ADDITIONAL_OBJC_LIBS += -L$(WIN_DEPS_DIR)/lib + endif else LIBJS_DIR = deps/Linux-deps/x86_64/mozilla LIBJS_INC_DIR = deps/Linux-deps/x86_64/mozilla/include @@ -74,11 +100,10 @@ else endif endif -# Add flag if building with GNUStep and Clang -ifneq '' '$(GNUSTEP_HOST_OS)' - ifneq '' '$(findstring clang++,$(CXX))' - ADDITIONAL_OBJCFLAGS += -fobjc-runtime=gnustep-1.9 - endif +# Add specific flag if building modern +ifeq ($(modern),yes) + ADDITIONAL_CFLAGS += -DOOLITE_MODERN_BUILD=1 + ADDITIONAL_OBJCFLAGS += -DOOLITE_MODERN_BUILD=1 endif OBJC_PROGRAM_NAME = oolite diff --git a/GNUmakefile.postamble b/GNUmakefile.postamble index 5d9745929..e4eb71de7 100644 --- a/GNUmakefile.postamble +++ b/GNUmakefile.postamble @@ -44,7 +44,16 @@ after-all:: $(CP) $(CP_FLAGS) Schemata $(PROGDIR)/Resources ifeq ($(ESPEAK),yes) ifeq ($(GNUSTEP_HOST_OS),mingw32) - $(CP) $(CP_FLAGS) deps/Cross-platform-deps/espeak-data $(PROGDIR)/Resources + ifeq ($(modern),yes) + $(CP) $(CP_FLAGS) $(MINGW_PREFIX)/share/espeak-ng-data $(PROGDIR)/Resources + # replace f2 voice and set the default voice as well + $(RM) $(PROGDIR)/Resources/espeak-ng-data/voices/!v/f2 + # copy required files from the existing cross-platform-deps repo + $(CP) $(CP_FLAGS) deps/Cross-platform-deps/espeak-data/voices/!v/f2 $(PROGDIR)/Resources/espeak-ng-data/voices/!v/f2 + $(CP) $(CP_FLAGS) deps/Cross-platform-deps/espeak-data/voices/default $(PROGDIR)/Resources/espeak-ng-data/voices/default + else + $(CP) $(CP_FLAGS) deps/Cross-platform-deps/espeak-data $(PROGDIR)/Resources + endif else ifeq ($(use_deps),yes) $(CP) $(CP_FLAGS) deps/Cross-platform-deps/espeak-data $(PROGDIR)/Resources @@ -57,10 +66,14 @@ ifeq ($(strip),yes) $(STRIP) $(PROGDIR)/$(DEST_BIN) endif ifeq ($(GNUSTEP_HOST_OS),mingw32) - ifeq ($(GNUSTEP_HOST_CPU),x86_64) - $(CP) $(CP_FLAGS) deps/Windows-deps/x86_64/DLLs/*.dll $(PROGDIR) + ifeq ($(modern),yes) + ldd $(PROGDIR)/oolite.exe | grep $(MINGW_PREFIX) | awk '{print $$3}' | xargs -I {} $(CP) $(CP_FLAGS) {} $(PROGDIR) else - $(CP) $(CP_FLAGS) deps/Windows-deps/x86/DLLs/*.dll $(PROGDIR) + ifeq ($(GNUSTEP_HOST_CPU),x86_64) + $(CP) $(CP_FLAGS) deps/Windows-deps/x86_64/DLLs/*.dll $(PROGDIR) + else + $(CP) $(CP_FLAGS) deps/Windows-deps/x86/DLLs/*.dll $(PROGDIR) + endif endif ifeq ($(debug),yes) $(RM) $(PROGDIR)/js32ECMAv5.dll diff --git a/Makefile b/Makefile index 456e1ee7e..ea24d4e56 100755 --- a/Makefile +++ b/Makefile @@ -236,7 +236,11 @@ pkg-debclean: # And here are our Windows packager targets # +ifneq '' '$(MINGW_PREFIX)' +NSIS=$(MINGW_PREFIX)/bin/makensis +else NSIS=/nsis/makensis.exe +endif NSISVERSIONS=installers/win32/OoliteVersions.nsh # Passing arguments cause problems with some versions of NSIS. diff --git a/files.make b/files.make index 894e91781..d40b8b1bc 100644 --- a/files.make +++ b/files.make @@ -258,6 +258,7 @@ OOLITE_MISC_FILES = \ AIGraphViz.m \ GameController.m \ GameController+SDLFullScreen.m \ + NSUserDefaults+Override.m \ OOJoystickManager.m \ OOJoystickProfile.m \ OOSDLJoystickManager.m \ diff --git a/src/Cocoa/Info-Oolite.plist b/src/Cocoa/Info-Oolite.plist index 465e4e0ed..9b46c3508 100644 --- a/src/Cocoa/Info-Oolite.plist +++ b/src/Cocoa/Info-Oolite.plist @@ -70,7 +70,7 @@ CFBundleIconFile oolite-icon CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) + OoliteDefaults CFBundleInfoDictionaryVersion 6.0 CFBundleName diff --git a/src/Core/GameController.m b/src/Core/GameController.m index 90da44240..565fa74d9 100644 --- a/src/Core/GameController.m +++ b/src/Core/GameController.m @@ -646,7 +646,7 @@ - (NSURL *) snapshotsURLCreatingIfNeeded:(BOOL)create NSFileManager *fmgr = [NSFileManager defaultManager]; if (![fmgr fileExistsAtPath:path]) { - [fmgr createDirectoryAtPath:path attributes:nil]; + [fmgr oo_createDirectoryAtPath:path attributes:nil]; } } return url; diff --git a/src/Core/NSFileManagerOOExtensions.m b/src/Core/NSFileManagerOOExtensions.m index 57e403e2f..00edc8930 100644 --- a/src/Core/NSFileManagerOOExtensions.m +++ b/src/Core/NSFileManagerOOExtensions.m @@ -172,13 +172,13 @@ - (NSArray *) oo_directoryContentsAtPath:(NSString *)path - (BOOL) oo_createDirectoryAtPath:(NSString *)path attributes:(NSDictionary *)attributes { -#if OOLITE_WINDOWS - return [self createDirectoryAtPath:path attributes:attributes]; -#else + #if OOLITE_WINDOWS && !OOLITE_MODERN_BUILD + return [self createDirectoryAtPath:path attributes:attributes]; + #else // has been in GNUStep since 2008, so it's probably safe to use now. // .... why do I say things like that, of course it's not safe - CIM return [self createDirectoryAtPath:path withIntermediateDirectories:YES attributes:attributes error:NULL]; -#endif + #endif } @@ -217,7 +217,7 @@ - (BOOL) chdirToSnapshotPath if (![self changeCurrentDirectoryPath: savedir]) { // it probably doesn't exist. - if (![self createDirectoryAtPath: savedir attributes: nil]) + if (![self oo_createDirectoryAtPath: savedir attributes: nil]) { OOLog(@"savedSnapshot.defaultPath.create.failed", @"Unable to create directory %@", savedir); return NO; diff --git a/src/Core/NSUserDefaults+Override.h b/src/Core/NSUserDefaults+Override.h new file mode 100644 index 000000000..885a4d4d2 --- /dev/null +++ b/src/Core/NSUserDefaults+Override.h @@ -0,0 +1,38 @@ +/* + +NSUserDefaults+Override.h + +Oolite +Copyright (C) 2004-2025 Giles C Williams and contributors + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, +MA 02110-1301, USA. + +*/ + +#import "OOCocoa.h" + +#if OOLITE_MODERN_BUILD + +#import + +@interface NSUserDefaults (Override) + +- (BOOL) writeDictionary: (NSDictionary*)dict + toFile: (NSString*)file; + +@end + +#endif diff --git a/src/Core/NSUserDefaults+Override.m b/src/Core/NSUserDefaults+Override.m new file mode 100644 index 000000000..9a537f948 --- /dev/null +++ b/src/Core/NSUserDefaults+Override.m @@ -0,0 +1,76 @@ +/* + +NSUserDefaults+Override.m + +Oolite +Copyright (C) 2004-2025 Giles C Williams and contributors + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, +MA 02110-1301, USA. + +*/ + + +#import "NSUserDefaults+Override.h" +#import +#import +#import + +#if OOLITE_MODERN_BUILD + +@implementation NSUserDefaults (Override) + +- (BOOL) writeDictionary: (NSDictionary*)dict + toFile: (NSString*)file +{ + if ([file length] == 0) + { + NSLog(@"Defaults database filename is empty when writing"); + } + else if (nil == dict) + { + NSFileManager *mgr = [NSFileManager defaultManager]; + + return [mgr removeFileAtPath: file handler: nil]; + } + else + { + NSData *data; + NSString *err; + + err = nil; + data = [NSPropertyListSerialization dataFromPropertyList: dict + format: NSPropertyListOpenStepFormat + errorDescription: &err]; + if (data == nil) + { + NSLog(@"Failed to serialize defaults database for writing: %@", err); + } + else if ([data writeToFile: file atomically: YES] == NO) + { + NSLog(@"Failed to write defaults database to file: %@", file); + } + else + { + return YES; + } + } + + return NO; +} + +@end + +#endif // OOLITE_MODERN_BUILD diff --git a/src/Core/OOCache.m b/src/Core/OOCache.m index 8652ab858..09a7a02ff 100644 --- a/src/Core/OOCache.m +++ b/src/Core/OOCache.m @@ -126,6 +126,33 @@ - (id) copy; typedef struct OOCacheImpl OOCacheImpl; typedef struct OOCacheNode OOCacheNode; +struct OOCacheImpl +{ + // Splay tree root + OOCacheNode *root; + + // Ends of age list + OOCacheNode *oldest, *youngest; + + unsigned count; + NSString *name; +}; + + +struct OOCacheNode +{ + // Payload + id key; + id value; + + // Splay tree + OOCacheNode *leftChild, *rightChild; + + // Age list + OOCacheNode *younger, *older; +}; + + enum { kCountUnknown = -1U }; @@ -389,32 +416,6 @@ - (void)loadFromArray:(NSArray *)array /***** Most of the implementation. In C. Because I'm inconsistent and slightly m. *****/ -struct OOCacheImpl -{ - // Splay tree root - OOCacheNode *root; - - // Ends of age list - OOCacheNode *oldest, *youngest; - - unsigned count; - NSString *name; -}; - - -struct OOCacheNode -{ - // Payload - id key; - id value; - - // Splay tree - OOCacheNode *leftChild, *rightChild; - - // Age list - OOCacheNode *younger, *older; -}; - static OOCacheNode *CacheNodeAllocate(id key, id value); static void CacheNodeFree(OOCacheImpl *cache, OOCacheNode *node); static id CacheNodeGetValue(OOCacheNode *node); diff --git a/src/Core/OOCocoa.h b/src/Core/OOCocoa.h index 4a29a8020..333a52964 100644 --- a/src/Core/OOCocoa.h +++ b/src/Core/OOCocoa.h @@ -48,6 +48,14 @@ MA 02110-1301, USA. #ifdef GNUSTEP #define OOLITE_GNUSTEP 1 + #if (((GNUSTEP_BASE_MAJOR_VERSION == 1 && GNUSTEP_BASE_MINOR_VERSION >= 31) || (GNUSTEP_BASE_MAJOR_VERSION > 1)) && !OOLITE_MODERN_BUILD) + #error Oolite legacy build cannot be generated using GNUstep 1.31 or higher. + #endif + + #if ((GNUSTEP_BASE_MAJOR_VERSION == 1 && GNUSTEP_BASE_MINOR_VERSION < 28) && OOLITE_MODERN_BUILD) + #error Oolite modern build cannot be generated using GNUstep earlier than 1.28. + #endif + #if (GNUSTEP_BASE_MAJOR_VERSION == 1 && GNUSTEP_BASE_MINOR_VERSION >= 20) || (GNUSTEP_BASE_MAJOR_VERSION > 1) #define OOLITE_GNUSTEP_1_20 1 #else diff --git a/src/Core/OOOXZManager.m b/src/Core/OOOXZManager.m index 4089f838f..28b2f83b8 100644 --- a/src/Core/OOOXZManager.m +++ b/src/Core/OOOXZManager.m @@ -580,6 +580,7 @@ - (void) setProgressStatus:(NSString *)new - (BOOL) updateManifests { NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:[self dataURL]]]; + [request setHTTPShouldHandleCookies:NO]; if (_downloadStatus != OXZ_DOWNLOAD_NONE) { return NO; diff --git a/src/Core/OOOpenGLExtensionManager.h b/src/Core/OOOpenGLExtensionManager.h index 6650b8fcd..a243ada17 100644 --- a/src/Core/OOOpenGLExtensionManager.h +++ b/src/Core/OOOpenGLExtensionManager.h @@ -198,88 +198,88 @@ OOINLINE BOOL OOShadersSupported(void) #if OO_SHADERS // Shader functions -PFNGLUSEPROGRAMOBJECTARBPROC glUseProgramObjectARB; -PFNGLGETUNIFORMLOCATIONARBPROC glGetUniformLocationARB; -PFNGLUNIFORM1IARBPROC glUniform1iARB; -PFNGLUNIFORM1FARBPROC glUniform1fARB; -PFNGLUNIFORMMATRIX3FVARBPROC glUniformMatrix3fvARB; -PFNGLUNIFORMMATRIX4FVARBPROC glUniformMatrix4fvARB; -PFNGLUNIFORM4FVARBPROC glUniform4fvARB; -PFNGLGETOBJECTPARAMETERIVARBPROC glGetObjectParameterivARB; -PFNGLCREATESHADEROBJECTARBPROC glCreateShaderObjectARB; -PFNGLGETINFOLOGARBPROC glGetInfoLogARB; -PFNGLCREATEPROGRAMOBJECTARBPROC glCreateProgramObjectARB; -PFNGLATTACHOBJECTARBPROC glAttachObjectARB; -PFNGLDELETEOBJECTARBPROC glDeleteObjectARB; -PFNGLLINKPROGRAMARBPROC glLinkProgramARB; -PFNGLCOMPILESHADERARBPROC glCompileShaderARB; -PFNGLSHADERSOURCEARBPROC glShaderSourceARB; -PFNGLUNIFORM2FVARBPROC glUniform2fvARB; -PFNGLBINDATTRIBLOCATIONARBPROC glBindAttribLocationARB; -PFNGLENABLEVERTEXATTRIBARRAYARBPROC glEnableVertexAttribArrayARB; -PFNGLVERTEXATTRIBPOINTERARBPROC glVertexAttribPointerARB; -PFNGLDISABLEVERTEXATTRIBARRAYARBPROC glDisableVertexAttribArrayARB; -PFNGLVALIDATEPROGRAMARBPROC glValidateProgramARB; +extern PFNGLUSEPROGRAMOBJECTARBPROC glUseProgramObjectARB; +extern PFNGLGETUNIFORMLOCATIONARBPROC glGetUniformLocationARB; +extern PFNGLUNIFORM1IARBPROC glUniform1iARB; +extern PFNGLUNIFORM1FARBPROC glUniform1fARB; +extern PFNGLUNIFORMMATRIX3FVARBPROC glUniformMatrix3fvARB; +extern PFNGLUNIFORMMATRIX4FVARBPROC glUniformMatrix4fvARB; +extern PFNGLUNIFORM4FVARBPROC glUniform4fvARB; +extern PFNGLGETOBJECTPARAMETERIVARBPROC glGetObjectParameterivARB; +extern PFNGLCREATESHADEROBJECTARBPROC glCreateShaderObjectARB; +extern PFNGLGETINFOLOGARBPROC glGetInfoLogARB; +extern PFNGLCREATEPROGRAMOBJECTARBPROC glCreateProgramObjectARB; +extern PFNGLATTACHOBJECTARBPROC glAttachObjectARB; +extern PFNGLDELETEOBJECTARBPROC glDeleteObjectARB; +extern PFNGLLINKPROGRAMARBPROC glLinkProgramARB; +extern PFNGLCOMPILESHADERARBPROC glCompileShaderARB; +extern PFNGLSHADERSOURCEARBPROC glShaderSourceARB; +extern PFNGLUNIFORM2FVARBPROC glUniform2fvARB; +extern PFNGLBINDATTRIBLOCATIONARBPROC glBindAttribLocationARB; +extern PFNGLENABLEVERTEXATTRIBARRAYARBPROC glEnableVertexAttribArrayARB; +extern PFNGLVERTEXATTRIBPOINTERARBPROC glVertexAttribPointerARB; +extern PFNGLDISABLEVERTEXATTRIBARRAYARBPROC glDisableVertexAttribArrayARB; +extern PFNGLVALIDATEPROGRAMARBPROC glValidateProgramARB; #endif // OO_SHADERS #if OO_SHADERS || OO_MULTITEXTURE -PFNGLACTIVETEXTUREARBPROC glActiveTextureARB; +extern PFNGLACTIVETEXTUREARBPROC glActiveTextureARB; #endif #if OO_MULTITEXTURE -PFNGLCLIENTACTIVETEXTUREARBPROC glClientActiveTextureARB; +extern PFNGLCLIENTACTIVETEXTUREARBPROC glClientActiveTextureARB; #endif #if OO_USE_VBO -PFNGLGENBUFFERSARBPROC glGenBuffersARB; -PFNGLDELETEBUFFERSARBPROC glDeleteBuffersARB; -PFNGLBINDBUFFERARBPROC glBindBufferARB; -PFNGLBUFFERDATAARBPROC glBufferDataARB; +extern PFNGLGENBUFFERSARBPROC glGenBuffersARB; +extern PFNGLDELETEBUFFERSARBPROC glDeleteBuffersARB; +extern PFNGLBINDBUFFERARBPROC glBindBufferARB; +extern PFNGLBUFFERDATAARBPROC glBufferDataARB; #endif #if OO_USE_FBO -PFNGLGENFRAMEBUFFERSEXTPROC glGenFramebuffersEXT; -PFNGLBINDFRAMEBUFFEREXTPROC glBindFramebufferEXT; -PFNGLGENRENDERBUFFERSEXTPROC glGenRenderbuffersEXT; -PFNGLBINDRENDERBUFFEREXTPROC glBindRenderbufferEXT; -PFNGLRENDERBUFFERSTORAGEEXTPROC glRenderbufferStorageEXT; -PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC glFramebufferRenderbufferEXT; -PFNGLFRAMEBUFFERTEXTURE2DEXTPROC glFramebufferTexture2DEXT; -PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC glCheckFramebufferStatusEXT; -PFNGLDELETEFRAMEBUFFERSEXTPROC glDeleteFramebuffersEXT; -PFNGLDELETERENDERBUFFERSEXTPROC glDeleteRenderbuffersEXT; -PFNGLGENRENDERBUFFERSPROC glGenRenderbuffers; -PFNGLBINDRENDERBUFFERPROC glBindRenderbuffer; -PFNGLRENDERBUFFERSTORAGEPROC glRenderbufferStorage; -PFNGLGENFRAMEBUFFERSPROC glGenFramebuffers; -PFNGLBINDFRAMEBUFFERPROC glBindFramebuffer; -PFNGLFRAMEBUFFERRENDERBUFFERPROC glFramebufferRenderbuffer; -PFNGLFRAMEBUFFERTEXTURE2DPROC glFramebufferTexture2D; -PFNGLGENVERTEXARRAYSPROC glGenVertexArrays; -PFNGLGENBUFFERSPROC glGenBuffers; -PFNGLBINDVERTEXARRAYPROC glBindVertexArray; -PFNGLBINDBUFFERPROC glBindBuffer; -PFNGLBUFFERDATAPROC glBufferData; -PFNGLVERTEXATTRIBPOINTERPROC glVertexAttribPointer; -PFNGLENABLEVERTEXATTRIBARRAYPROC glEnableVertexAttribArray; -PFNGLUSEPROGRAMPROC glUseProgram; -PFNGLGETUNIFORMLOCATIONPROC glGetUniformLocation; -PFNGLUNIFORM1IPROC glUniform1i; -PFNGLACTIVETEXTUREPROC glActiveTexture; -PFNGLBLENDFUNCSEPARATEPROC glBlendFuncSeparate; -PFNGLUNIFORM1FPROC glUniform1f; -PFNGLUNIFORM2FVPROC glUniform2fv; -PFNGLDELETERENDERBUFFERSPROC glDeleteRenderbuffers; -PFNGLDELETEFRAMEBUFFERSPROC glDeleteFramebuffers; -PFNGLDELETEVERTEXARRAYSPROC glDeleteVertexArrays; -PFNGLDELETEBUFFERSPROC glDeleteBuffers; -PFNGLDRAWBUFFERSPROC glDrawBuffers; -PFNGLCHECKFRAMEBUFFERSTATUSPROC glCheckFramebufferStatus; -PFNGLTEXIMAGE2DMULTISAMPLEPROC glTexImage2DMultisample; -PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC glRenderbufferStorageMultisample; -PFNGLBLITFRAMEBUFFERPROC glBlitFramebuffer; -PFNGLCLAMPCOLORPROC glClampColor; +extern PFNGLGENFRAMEBUFFERSEXTPROC glGenFramebuffersEXT; +extern PFNGLBINDFRAMEBUFFEREXTPROC glBindFramebufferEXT; +extern PFNGLGENRENDERBUFFERSEXTPROC glGenRenderbuffersEXT; +extern PFNGLBINDRENDERBUFFEREXTPROC glBindRenderbufferEXT; +extern PFNGLRENDERBUFFERSTORAGEEXTPROC glRenderbufferStorageEXT; +extern PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC glFramebufferRenderbufferEXT; +extern PFNGLFRAMEBUFFERTEXTURE2DEXTPROC glFramebufferTexture2DEXT; +extern PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC glCheckFramebufferStatusEXT; +extern PFNGLDELETEFRAMEBUFFERSEXTPROC glDeleteFramebuffersEXT; +extern PFNGLDELETERENDERBUFFERSEXTPROC glDeleteRenderbuffersEXT; +extern PFNGLGENRENDERBUFFERSPROC glGenRenderbuffers; +extern PFNGLBINDRENDERBUFFERPROC glBindRenderbuffer; +extern PFNGLRENDERBUFFERSTORAGEPROC glRenderbufferStorage; +extern PFNGLGENFRAMEBUFFERSPROC glGenFramebuffers; +extern PFNGLBINDFRAMEBUFFERPROC glBindFramebuffer; +extern PFNGLFRAMEBUFFERRENDERBUFFERPROC glFramebufferRenderbuffer; +extern PFNGLFRAMEBUFFERTEXTURE2DPROC glFramebufferTexture2D; +extern PFNGLGENVERTEXARRAYSPROC glGenVertexArrays; +extern PFNGLGENBUFFERSPROC glGenBuffers; +extern PFNGLBINDVERTEXARRAYPROC glBindVertexArray; +extern PFNGLBINDBUFFERPROC glBindBuffer; +extern PFNGLBUFFERDATAPROC glBufferData; +extern PFNGLVERTEXATTRIBPOINTERPROC glVertexAttribPointer; +extern PFNGLENABLEVERTEXATTRIBARRAYPROC glEnableVertexAttribArray; +extern PFNGLUSEPROGRAMPROC glUseProgram; +extern PFNGLGETUNIFORMLOCATIONPROC glGetUniformLocation; +extern PFNGLUNIFORM1IPROC glUniform1i; +extern PFNGLACTIVETEXTUREPROC glActiveTexture; +extern PFNGLBLENDFUNCSEPARATEPROC glBlendFuncSeparate; +extern PFNGLUNIFORM1FPROC glUniform1f; +extern PFNGLUNIFORM2FVPROC glUniform2fv; +extern PFNGLDELETERENDERBUFFERSPROC glDeleteRenderbuffers; +extern PFNGLDELETEFRAMEBUFFERSPROC glDeleteFramebuffers; +extern PFNGLDELETEVERTEXARRAYSPROC glDeleteVertexArrays; +extern PFNGLDELETEBUFFERSPROC glDeleteBuffers; +extern PFNGLDRAWBUFFERSPROC glDrawBuffers; +extern PFNGLCHECKFRAMEBUFFERSTATUSPROC glCheckFramebufferStatus; +extern PFNGLTEXIMAGE2DMULTISAMPLEPROC glTexImage2DMultisample; +extern PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC glRenderbufferStorageMultisample; +extern PFNGLBLITFRAMEBUFFERPROC glBlitFramebuffer; +extern PFNGLCLAMPCOLORPROC glClampColor; #endif #endif // OOLITE_WINDOWS diff --git a/src/Core/OXPVerifier/OOOXPVerifier.m b/src/Core/OXPVerifier/OOOXPVerifier.m index 0cf4487b8..c3c8d906f 100644 --- a/src/Core/OXPVerifier/OOOXPVerifier.m +++ b/src/Core/OXPVerifier/OOOXPVerifier.m @@ -34,7 +34,19 @@ of this software and associated documentation files (the "Software"), to deal #if OO_OXP_VERIFIER_ENABLED #if OOLITE_WINDOWS + +#ifdef __OBJC__ +#pragma push_macro("interface") +#undef interface +#define interface struct +#endif + #include + +#ifdef __OBJC__ +#pragma pop_macro("interface") +#endif + #include #endif diff --git a/src/Core/Universe.m b/src/Core/Universe.m index 75341a815..37b2ee413 100644 --- a/src/Core/Universe.m +++ b/src/Core/Universe.m @@ -780,7 +780,7 @@ - (id) initWithGameView:(MyOpenGLView *)inGameView }); #elif OOLITE_ESPEAK int volume = [OOSound masterVolume] * 100; - espeak_Initialize(AUDIO_OUTPUT_PLAYBACK, 100, NULL, 0); + espeak_Initialize(AUDIO_OUTPUT_PLAYBACK, 100, "Resources", 0); espeak_SetParameter(espeakPUNCTUATION, espeakPUNCT_NONE, 0); espeak_SetParameter(espeakVOLUME, volume, 0); espeak_voices = espeak_ListVoices(NULL);