浏览代码

Merge pull request #7429 from BastiaanOlij/glew3-osx

Fixing compilation errors for gles3 for Mac OS X
Rémi Verschelde 8 年之前
父节点
当前提交
e39a6242ac

+ 1 - 1
.travis.yml

@@ -12,7 +12,7 @@ os:
 
 
 env:
 env:
   #- GODOT_TARGET=iphone
   #- GODOT_TARGET=iphone
-  #- GODOT_TARGET=osx
+  - GODOT_TARGET=osx
   - GODOT_TARGET=x11
   - GODOT_TARGET=x11
   #- GODOT_TARGET=android
   #- GODOT_TARGET=android
   - GODOT_TARGET=windows
   - GODOT_TARGET=windows

+ 14 - 0
drivers/gl_context/glad/glad.h

@@ -150,12 +150,26 @@ typedef unsigned int GLhandleARB;
 typedef unsigned short GLhalfARB;
 typedef unsigned short GLhalfARB;
 typedef unsigned short GLhalf;
 typedef unsigned short GLhalf;
 typedef GLint GLfixed;
 typedef GLint GLfixed;
+// Temporary work around for upstream issue: https://github.com/Dav1dde/glad/issues/70
+// Originally fixed by Algorithmus, reapplied in master
+#if defined(__APPLE__)
+typedef long GLintptr;
+typedef long GLsizeiptr;
+#else
 typedef ptrdiff_t GLintptr;
 typedef ptrdiff_t GLintptr;
 typedef ptrdiff_t GLsizeiptr;
 typedef ptrdiff_t GLsizeiptr;
+#endif
 typedef int64_t GLint64;
 typedef int64_t GLint64;
 typedef uint64_t GLuint64;
 typedef uint64_t GLuint64;
+// Temporary work around for upstream issue: https://github.com/Dav1dde/glad/issues/70
+// Originally fixed by Algorithmus, reapplied in master
+#if defined(__APPLE__)
+typedef long GLintptrARB;
+typedef long GLsizeiptrARB;
+#else
 typedef ptrdiff_t GLintptrARB;
 typedef ptrdiff_t GLintptrARB;
 typedef ptrdiff_t GLsizeiptrARB;
 typedef ptrdiff_t GLsizeiptrARB;
+#endif
 typedef int64_t GLint64EXT;
 typedef int64_t GLint64EXT;
 typedef uint64_t GLuint64EXT;
 typedef uint64_t GLuint64EXT;
 typedef struct __GLsync *GLsync;
 typedef struct __GLsync *GLsync;

+ 4 - 0
drivers/gles3/rasterizer_gles3.cpp

@@ -136,9 +136,13 @@ void RasterizerGLES3::initialize() {
 		ERR_PRINT("Error initializing GLAD");
 		ERR_PRINT("Error initializing GLAD");
 	}
 	}
 
 
+#ifdef __APPLE__
+	// FIXME glDebugMessageCallbackARB does not seem to work on Mac OS X and opengl 3, this may be an issue with our opengl canvas..
+#else
 	glEnable(_EXT_DEBUG_OUTPUT_SYNCHRONOUS_ARB);
 	glEnable(_EXT_DEBUG_OUTPUT_SYNCHRONOUS_ARB);
 	glDebugMessageCallbackARB(_gl_debug_print, NULL);
 	glDebugMessageCallbackARB(_gl_debug_print, NULL);
 	glEnable(_EXT_DEBUG_OUTPUT);
 	glEnable(_EXT_DEBUG_OUTPUT);
+#endif
 
 
 #endif
 #endif
 
 

+ 3 - 2
platform/osx/os_osx.h

@@ -35,7 +35,7 @@
 #include "drivers/unix/os_unix.h"
 #include "drivers/unix/os_unix.h"
 #include "main/input_default.h"
 #include "main/input_default.h"
 #include "servers/visual_server.h"
 #include "servers/visual_server.h"
-#include "servers/visual/visual_server_wrap_mt.h"
+// #include "servers/visual/visual_server_wrap_mt.h"
 #include "servers/visual/rasterizer.h"
 #include "servers/visual/rasterizer.h"
 #include "servers/physics_server.h"
 #include "servers/physics_server.h"
 #include "servers/audio/audio_server_sw.h"
 #include "servers/audio/audio_server_sw.h"
@@ -58,7 +58,8 @@
 class OS_OSX : public OS_Unix {
 class OS_OSX : public OS_Unix {
 public:
 public:
 	bool force_quit;
 	bool force_quit;
-	Rasterizer *rasterizer;
+//  rasterizer seems to no longer be given to visual server, its using GLES3 directly?
+//	Rasterizer *rasterizer;
 	VisualServer *visual_server;
 	VisualServer *visual_server;
 
 
 	List<String> args;
 	List<String> args;

+ 17 - 18
platform/osx/os_osx.mm

@@ -38,13 +38,14 @@
 #include "servers/visual/visual_server_raster.h"
 #include "servers/visual/visual_server_raster.h"
 //#include "drivers/opengl/rasterizer_gl.h"
 //#include "drivers/opengl/rasterizer_gl.h"
 //#include "drivers/gles2/rasterizer_gles2.h"
 //#include "drivers/gles2/rasterizer_gles2.h"
+#include "drivers/gles3/rasterizer_gles3.h"
 #include "os_osx.h"
 #include "os_osx.h"
 #include <stdio.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <stdlib.h>
 #include "print_string.h"
 #include "print_string.h"
 #include "servers/physics/physics_server_sw.h"
 #include "servers/physics/physics_server_sw.h"
-#include "drivers/gles2/rasterizer_instance_gles2.h"
-#include "servers/visual/visual_server_wrap_mt.h"
+// #include "drivers/gles2/rasterizer_instance_gles2.h"
+// #include "servers/visual/visual_server_wrap_mt.h"
 #include "main/main.h"
 #include "main/main.h"
 #include "os/keyboard.h"
 #include "os/keyboard.h"
 #include "dir_access_osx.h"
 #include "dir_access_osx.h"
@@ -986,13 +987,11 @@ void OS_OSX::initialize(const VideoMode& p_desired,int p_video_driver,int p_audi
 	window_size.width = p_desired.width;
 	window_size.width = p_desired.width;
 	window_size.height = p_desired.height;
 	window_size.height = p_desired.height;
 
 
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1070
 	if (floor(NSAppKitVersionNumber) > NSAppKitVersionNumber10_6 && display_scale>1) {
 	if (floor(NSAppKitVersionNumber) > NSAppKitVersionNumber10_6 && display_scale>1) {
 	    [window_view setWantsBestResolutionOpenGLSurface:YES];
 	    [window_view setWantsBestResolutionOpenGLSurface:YES];
 	    //if (current_videomode.resizable)
 	    //if (current_videomode.resizable)
 		[window_object setCollectionBehavior:NSWindowCollectionBehaviorFullScreenPrimary];
 		[window_object setCollectionBehavior:NSWindowCollectionBehaviorFullScreenPrimary];
 	}
 	}
-#endif /*MAC_OS_X_VERSION_MAX_ALLOWED*/
 
 
 //	[window_object setTitle:[NSString stringWithUTF8String:"GodotEnginies"]];
 //	[window_object setTitle:[NSString stringWithUTF8String:"GodotEnginies"]];
 	[window_object setContentView:window_view];
 	[window_object setContentView:window_view];
@@ -1000,10 +999,8 @@ void OS_OSX::initialize(const VideoMode& p_desired,int p_video_driver,int p_audi
 	[window_object setAcceptsMouseMovedEvents:YES];
 	[window_object setAcceptsMouseMovedEvents:YES];
 	[window_object center];
 	[window_object center];
 
 
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1070
 	if (floor(NSAppKitVersionNumber) > NSAppKitVersionNumber10_6)
 	if (floor(NSAppKitVersionNumber) > NSAppKitVersionNumber10_6)
 		[window_object setRestorable:NO];
 		[window_object setRestorable:NO];
-#endif /*MAC_OS_X_VERSION_MAX_ALLOWED*/
 
 
 	unsigned int attributeCount = 0;
 	unsigned int attributeCount = 0;
 
 
@@ -1022,10 +1019,8 @@ void OS_OSX::initialize(const VideoMode& p_desired,int p_video_driver,int p_audi
 	ADD_ATTR(NSOpenGLPFADoubleBuffer);
 	ADD_ATTR(NSOpenGLPFADoubleBuffer);
 	ADD_ATTR(NSOpenGLPFAClosestPolicy);
 	ADD_ATTR(NSOpenGLPFAClosestPolicy);
 
 
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1070
-	if (false/* use gl3*/)
-		ADD_ATTR2(NSOpenGLPFAOpenGLProfile, NSOpenGLProfileVersion3_2Core);
-#endif /*MAC_OS_X_VERSION_MAX_ALLOWED*/
+//	we now need OpenGL 3 or better, maybe even change this to 3_3Core ?
+	ADD_ATTR2(NSOpenGLPFAOpenGLProfile, NSOpenGLProfileVersion3_2Core);
 
 
 	ADD_ATTR2(NSOpenGLPFAColorSize, colorBits);
 	ADD_ATTR2(NSOpenGLPFAColorSize, colorBits);
 
 
@@ -1084,15 +1079,19 @@ void OS_OSX::initialize(const VideoMode& p_desired,int p_video_driver,int p_audi
 
 
 	AudioDriverManagerSW::add_driver(&audio_driver_osx);
 	AudioDriverManagerSW::add_driver(&audio_driver_osx);
 
 
+	// only opengl support here... 
+	RasterizerGLES3::register_config();
+	RasterizerGLES3::make_current();
 
 
-	rasterizer = instance_RasterizerGLES2();
-
-	visual_server = memnew( VisualServerRaster(rasterizer) );
-
-	if (get_render_thread_mode()!=RENDER_THREAD_UNSAFE) {
+//	rasterizer = instance_RasterizerGLES2();
+//	visual_server = memnew( VisualServerRaster(rasterizer) );
 
 
-		visual_server =memnew(VisualServerWrapMT(visual_server,get_render_thread_mode()==RENDER_SEPARATE_THREAD));
-	}
+	visual_server = memnew( VisualServerRaster );
+	// FIXME: Reimplement threaded rendering? Or remove?
+//	if (get_render_thread_mode()!=RENDER_THREAD_UNSAFE) {
+//
+//		visual_server =memnew(VisualServerWrapMT(visual_server,get_render_thread_mode()==RENDER_SEPARATE_THREAD));
+//	}
 	visual_server->init();
 	visual_server->init();
 	visual_server->cursor_set_visible(false, 0);
 	visual_server->cursor_set_visible(false, 0);
 
 
@@ -1176,7 +1175,7 @@ void OS_OSX::finalize() {
 
 
 	visual_server->finish();
 	visual_server->finish();
 	memdelete(visual_server);
 	memdelete(visual_server);
-	memdelete(rasterizer);
+//	memdelete(rasterizer);
 
 
 	physics_server->finish();
 	physics_server->finish();
 	memdelete(physics_server);
 	memdelete(physics_server);

+ 3 - 2
platform/osx/platform_config.h

@@ -28,6 +28,7 @@
 /*************************************************************************/
 /*************************************************************************/
 #include <alloca.h>
 #include <alloca.h>
 
 
-#define GLES2_INCLUDE_H "GL/glew.h"
-#define GLES3_INCLUDE_H "GL/glew.h"
+//#define GLES2_INCLUDE_H "GL/glew.h"
+//#define GLES3_INCLUDE_H "GL/glew.h"
+#define GLES3_INCLUDE_H "gl_context/glad/glad.h"
 #define PTHREAD_RENAME_SELF
 #define PTHREAD_RENAME_SELF

+ 5 - 3
platform/windows/os_windows.cpp

@@ -1087,13 +1087,15 @@ void OS_Windows::initialize(const VideoMode& p_desired,int p_video_driver,int p_
 
 
 	RasterizerGLES3::make_current();
 	RasterizerGLES3::make_current();
 #else
 #else
- #ifdef DX9_ENABLED
+	// FIXME: Does DX support still work now that rasterizer is no longer used?
+#ifdef DX9_ENABLED
 	rasterizer = memnew( RasterizerDX9(hWnd) );
 	rasterizer = memnew( RasterizerDX9(hWnd) );
- #endif
+#endif
 #endif
 #endif
 
 
 	visual_server = memnew( VisualServerRaster );
 	visual_server = memnew( VisualServerRaster );
-	//if (get_render_thread_mode()!=RENDER_THREAD_UNSAFE) {
+ 	// FIXME: Reimplement threaded rendering? Or remove?
+//	if (get_render_thread_mode()!=RENDER_THREAD_UNSAFE) {
 //
 //
 //		visual_server =memnew(VisualServerWrapMT(visual_server,get_render_thread_mode()==RENDER_SEPARATE_THREAD));
 //		visual_server =memnew(VisualServerWrapMT(visual_server,get_render_thread_mode()==RENDER_SEPARATE_THREAD));
 //	}
 //	}

+ 5 - 0
servers/visual/shader_language.h

@@ -151,6 +151,11 @@ public:
 
 
 	/* COMPILER */
 	/* COMPILER */
 
 
+	// lame work around to Apple defining this as a macro in 10.12 SDK
+	#ifdef TYPE_BOOL
+	#undef TYPE_BOOL
+	#endif
+
 	enum DataType {
 	enum DataType {
 		TYPE_VOID,
 		TYPE_VOID,
 		TYPE_BOOL,
 		TYPE_BOOL,