From 53c6cfdf56405f0fd4dc06a06891fe64ffce7ae9 Mon Sep 17 00:00:00 2001 From: hybrid Date: Sat, 26 Oct 2013 12:13:26 +0000 Subject: [PATCH] Fixed OGL-ES2 for win32 as well. Not yet properly running with my emulator, though. So setup might still be incomplete here. git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/branches/ogl-es@4597 dfc29bdd-3216-0410-991c-e03cc46cb475 --- source/Irrlicht/CIrrDeviceWin32.cpp | 13 +++++++++---- source/Irrlicht/COGLES2Driver.cpp | 27 +++++++++++++++++++-------- source/Irrlicht/COGLES2Driver.h | 5 ++--- source/Irrlicht/COGLESDriver.cpp | 4 +++- source/Irrlicht/Irrlicht10.0.vcxproj | 2 +- 5 files changed, 34 insertions(+), 17 deletions(-) diff --git a/source/Irrlicht/CIrrDeviceWin32.cpp b/source/Irrlicht/CIrrDeviceWin32.cpp index a6e8b1b1..c106cc00 100644 --- a/source/Irrlicht/CIrrDeviceWin32.cpp +++ b/source/Irrlicht/CIrrDeviceWin32.cpp @@ -66,7 +66,13 @@ namespace irr #endif #ifdef _IRR_COMPILE_WITH_OGLES2_ - IVideoDriver* createOGLES2Driver(const SIrrlichtCreationParameters& params, video::SExposedVideoData& data, io::IFileSystem* io); + IVideoDriver* createOGLES2Driver(const SIrrlichtCreationParameters& params, video::SExposedVideoData& data, io::IFileSystem* io +#if defined(_IRR_COMPILE_WITH_X11_DEVICE_) || defined(_IRR_WINDOWS_API_) || defined(_IRR_COMPILE_WITH_ANDROID_DEVICE_) + , IContextManager* contextManager +#elif defined(_IRR_COMPILE_WITH_IPHONE_DEVICE_) + , CIrrDeviceIPhone* device +#endif + ); #endif } } // end namespace irr @@ -1158,8 +1164,6 @@ void CIrrDeviceWin32::createDriver() data.OpenGLWin32.HWnd=HWnd; ContextManager = new video::CEGLManager(CreationParams,&data); - ContextManager->initialize(); - ContextManager->createSurface(); switchToFullScreen(); VideoDriver = video::createOGLES1Driver(CreationParams, data, FileSystem, ContextManager); @@ -1179,9 +1183,10 @@ void CIrrDeviceWin32::createDriver() video::SExposedVideoData data; data.OpenGLWin32.HWnd=HWnd; + ContextManager = new video::CEGLManager(CreationParams,&data); switchToFullScreen(); - VideoDriver = video::createOGLES2Driver(CreationParams, data, FileSystem); + VideoDriver = video::createOGLES2Driver(CreationParams, data, FileSystem, ContextManager); if (!VideoDriver) { os::Printer::log("Could not create OpenGL-ES2 driver.", ELL_ERROR); diff --git a/source/Irrlicht/COGLES2Driver.cpp b/source/Irrlicht/COGLES2Driver.cpp index 9847a08e..5100b9df 100644 --- a/source/Irrlicht/COGLES2Driver.cpp +++ b/source/Irrlicht/COGLES2Driver.cpp @@ -39,7 +39,7 @@ namespace video COGLES2Driver::COGLES2Driver(const SIrrlichtCreationParameters& params, const SExposedVideoData& data, io::IFileSystem* io #if defined(_IRR_COMPILE_WITH_X11_DEVICE_) || defined(_IRR_WINDOWS_API_) || defined(_IRR_COMPILE_WITH_ANDROID_DEVICE_) - , CEGLManager* eglManager + , IContextManager* contextManager #elif defined(_IRR_COMPILE_WITH_IPHONE_DEVICE_) , CIrrDeviceIPhone* device #endif @@ -48,7 +48,7 @@ COGLES2Driver::COGLES2Driver(const SIrrlichtCreationParameters& params, Transformation3DChanged(true), AntiAlias(params.AntiAlias), BridgeCalls(0), RenderTargetTexture(0), CurrentRendertargetSize(0, 0), ColorFormat(ECF_R8G8B8) #if defined(_IRR_COMPILE_WITH_X11_DEVICE_) || defined(_IRR_WINDOWS_API_) || defined(_IRR_COMPILE_WITH_ANDROID_DEVICE_) - , EGLManager(eglManager) + , ContextManager(contextManager) #elif defined(_IRR_COMPILE_WITH_IPHONE_DEVICE_) , Device(device), ViewFramebuffer(0), ViewRenderbuffer(0), ViewDepthRenderbuffer(0) @@ -62,7 +62,13 @@ COGLES2Driver::COGLES2Driver(const SIrrlichtCreationParameters& params, core::dimension2d WindowSize(0, 0); #if defined(_IRR_COMPILE_WITH_X11_DEVICE_) || defined(_IRR_WINDOWS_API_) || defined(_IRR_COMPILE_WITH_ANDROID_DEVICE_) - EGLManager->createContext(); + if (!ContextManager) + return; + + ContextManager->grab(); + ContextManager->initialize(); + ContextManager->createSurface(); + ContextManager->createContext(); WindowSize = params.WindowSize; #elif defined(_IRR_COMPILE_WITH_IPHONE_DEVICE_) @@ -110,7 +116,11 @@ COGLES2Driver::~COGLES2Driver() delete BridgeCalls; #if defined(_IRR_COMPILE_WITH_X11_DEVICE_) || defined(_IRR_WINDOWS_API_) || defined(_IRR_COMPILE_WITH_ANDROID_DEVICE_) - EGLManager->destroyContext(); + if (ContextManager) + { + ContextManager->destroyContext(); + ContextManager->drop(); + } #elif defined(_IRR_COMPILE_WITH_IPHONE_DEVICE_) if (0 != ViewFramebuffer) { @@ -426,7 +436,8 @@ bool COGLES2Driver::endScene() CNullDriver::endScene(); #if defined(_IRR_COMPILE_WITH_X11_DEVICE_) || defined(_IRR_WINDOWS_API_) || defined(_IRR_COMPILE_WITH_ANDROID_DEVICE_) - EGLManager->swapBuffers(); + if (ContextManager) + ContextManager->swapBuffers(); #elif defined(_IRR_COMPILE_WITH_IPHONE_DEVICE_) glFlush(); glBindRenderbufferOES(GL_RENDERBUFFER_OES, ViewRenderbuffer); @@ -2857,13 +2868,13 @@ namespace video { #ifndef _IRR_COMPILE_WITH_OGLES2_ -class CEGLManager; +class IContextManager; #endif IVideoDriver* createOGLES2Driver(const SIrrlichtCreationParameters& params, video::SExposedVideoData& data, io::IFileSystem* io #if defined(_IRR_COMPILE_WITH_X11_DEVICE_) || defined(_IRR_WINDOWS_API_) || defined(_IRR_COMPILE_WITH_ANDROID_DEVICE_) - , CEGLManager* eglManager + , IContextManager* contextManager #elif defined(_IRR_COMPILE_WITH_IPHONE_DEVICE_) , CIrrDeviceIPhone* device #endif @@ -2872,7 +2883,7 @@ IVideoDriver* createOGLES2Driver(const SIrrlichtCreationParameters& params, #ifdef _IRR_COMPILE_WITH_OGLES2_ return new COGLES2Driver(params, data, io #if defined(_IRR_COMPILE_WITH_X11_DEVICE_) || defined(_IRR_WINDOWS_API_) || defined(_IRR_COMPILE_WITH_ANDROID_DEVICE_) - , eglManager + , contextManager #elif defined(_IRR_COMPILE_WITH_IPHONE_DEVICE_) , device #endif diff --git a/source/Irrlicht/COGLES2Driver.h b/source/Irrlicht/COGLES2Driver.h index 51f4e356..8fe77102 100644 --- a/source/Irrlicht/COGLES2Driver.h +++ b/source/Irrlicht/COGLES2Driver.h @@ -65,7 +65,7 @@ namespace video COGLES2Driver(const SIrrlichtCreationParameters& params, const SExposedVideoData& data, io::IFileSystem* io #if defined(_IRR_COMPILE_WITH_X11_DEVICE_) || defined(_IRR_WINDOWS_API_) || defined(_IRR_COMPILE_WITH_ANDROID_DEVICE_) - , CEGLManager* eglManager + , IContextManager* contextManager #elif defined(_IRR_COMPILE_WITH_IPHONE_DEVICE_) , CIrrDeviceIPhone* device #endif @@ -459,7 +459,7 @@ namespace video GLuint ViewRenderbuffer; GLuint ViewDepthRenderbuffer; #elif defined(_IRR_COMPILE_WITH_X11_DEVICE_) || defined(_IRR_WINDOWS_API_) || defined(_IRR_COMPILE_WITH_ANDROID_DEVICE_) - CEGLManager* EGLManager; + IContextManager* ContextManager; #endif }; @@ -534,4 +534,3 @@ namespace video #endif // _IRR_COMPILE_WITH_OPENGL_ #endif - diff --git a/source/Irrlicht/COGLESDriver.cpp b/source/Irrlicht/COGLESDriver.cpp index 7d3542f9..434cddb7 100644 --- a/source/Irrlicht/COGLESDriver.cpp +++ b/source/Irrlicht/COGLESDriver.cpp @@ -53,6 +53,8 @@ COGLES1Driver::COGLES1Driver(const SIrrlichtCreationParameters& params, return; ContextManager->grab(); + ContextManager->initialize(); + ContextManager->createSurface(); ContextManager->createContext(); WindowSize = params.WindowSize; @@ -3029,7 +3031,7 @@ namespace video #ifndef _IRR_COMPILE_WITH_OGLES1_ class IVideoDriver; -class CEGLManager; +class IContextManager; #endif IVideoDriver* createOGLES1Driver(const SIrrlichtCreationParameters& params, diff --git a/source/Irrlicht/Irrlicht10.0.vcxproj b/source/Irrlicht/Irrlicht10.0.vcxproj index 40cfa2b3..ff6f41a7 100644 --- a/source/Irrlicht/Irrlicht10.0.vcxproj +++ b/source/Irrlicht/Irrlicht10.0.vcxproj @@ -335,7 +335,7 @@ /MACHINE:I386 %(AdditionalOptions) - kernel32.lib;user32.lib;gdi32.lib;libEGL.lib;libgles_cm.lib;%(AdditionalDependencies) + kernel32.lib;user32.lib;gdi32.lib;libEGL.lib;libglesv2.lib;%(AdditionalDependencies) ..\..\bin\Win32-visualstudio\Irrlicht.dll %(AdditionalLibraryDirectories) libci.lib;%(IgnoreSpecificDefaultLibraries)