From 929f5a3b8de35d10e45c3089ce3b7e7bf9877c8e Mon Sep 17 00:00:00 2001 From: kervala Date: Sat, 12 Jun 2010 16:31:39 +0200 Subject: [PATCH] Changed: #970 Move all window and input related methods to a new file from OpenGL driver --- .../driver/opengl/driver_opengl_extension.cpp | 6 +- .../3d/driver/opengl/driver_opengl_window.cpp | 142 +++++++++++------- 2 files changed, 89 insertions(+), 59 deletions(-) diff --git a/code/nel/src/3d/driver/opengl/driver_opengl_extension.cpp b/code/nel/src/3d/driver/opengl/driver_opengl_extension.cpp index 97f81d00d..f329b067f 100644 --- a/code/nel/src/3d/driver/opengl/driver_opengl_extension.cpp +++ b/code/nel/src/3d/driver/opengl/driver_opengl_extension.cpp @@ -1248,6 +1248,7 @@ void registerGlExtensions(CGlExtensions &ext) // Disable feature ??? if(!ext.DisableHardwareVertexArrayAGP) ext.NVVertexArrayRange= setupNVVertexArrayRange(glext); + if(ext.NVVertexArrayRange) { GLint nverts; @@ -1255,7 +1256,6 @@ void registerGlExtensions(CGlExtensions &ext) ext.NVVertexArrayRangeMaxVertex= nverts; } - // Compression S3TC OK iff ARBTextureCompression. ext.EXTTextureCompressionS3TC= (ext.ARBTextureCompression && setupEXTTextureCompressionS3TC(glext)); @@ -1268,7 +1268,6 @@ void registerGlExtensions(CGlExtensions &ext) // Check NVTextureEnvCombine4. ext.NVTextureEnvCombine4= setupNVTextureEnvCombine4(glext); - // Check for cube mapping ext.ARBTextureCubeMap = setupARBTextureCubeMap(glext); @@ -1304,8 +1303,6 @@ void registerGlExtensions(CGlExtensions &ext) ext.ARBFragmentProgram = false; } - - // For now, the only way to know if emulation, is to test some extension which exist only on GeForce3. // if GL_NV_texture_shader is not here, then we are not on GeForce3. ext.NVVertexProgramEmulated= ext.NVVertexProgram && (strstr(glext, "GL_NV_texture_shader")==NULL); @@ -1318,6 +1315,7 @@ void registerGlExtensions(CGlExtensions &ext) // Check NVVertexArrayRange2 ext.NVVertexArrayRange2= setupNVVertexArrayRange2(glext); + // if supported if(ext.NVVertexArrayRange2) // VBHard swap without flush of the VAR. diff --git a/code/nel/src/3d/driver/opengl/driver_opengl_window.cpp b/code/nel/src/3d/driver/opengl/driver_opengl_window.cpp index 497348cf1..7bb327de4 100644 --- a/code/nel/src/3d/driver/opengl/driver_opengl_window.cpp +++ b/code/nel/src/3d/driver/opengl/driver_opengl_window.cpp @@ -1570,26 +1570,32 @@ NLMISC::IMouseDevice* CDriverGL::enableLowLevelMouse(bool enable, bool exclusive { H_AUTO_OGL(CDriverGL_enableLowLevelMouse) + NLMISC::IMouseDevice *res = NULL; + #ifdef NL_OS_WINDOWS - if (_EventEmitter.getNumEmitters() < 2) return NULL; - NLMISC::CDIEventEmitter *diee = NLMISC::safe_cast(_EventEmitter.getEmitter(1)); - if (enable) + + NLMISC::CDIEventEmitter *diee = NULL; + + if (_EventEmitter.getNumEmitters() > 1) + diee = NLMISC::safe_cast(_EventEmitter.getEmitter(1)); + + if (enable) + { + try { - try - { - NLMISC::IMouseDevice *md = diee->getMouseDevice(exclusive); - return md; - } - catch (EDirectInput &) - { - return NULL; - } + if (diee) + res = diee->getMouseDevice(exclusive); } - else + catch (EDirectInput &) { + } + } + else + { + if (diee) diee->releaseMouse(); - return NULL; - } + } + #elif defined(NL_OS_MAC) && defined(NL_MAC_NATIVE) # warning "OpenGL Driver: Missing Mac Implementation" nlwarning("OpenGL Driver: Missing Mac Implementation"); @@ -1597,33 +1603,41 @@ NLMISC::IMouseDevice* CDriverGL::enableLowLevelMouse(bool enable, bool exclusive #elif defined (NL_OS_UNIX) #endif - return NULL; + + return res; } // *************************************************************************** NLMISC::IKeyboardDevice* CDriverGL::enableLowLevelKeyboard(bool enable) { H_AUTO_OGL(CDriverGL_enableLowLevelKeyboard) + + NLMISC::IKeyboardDevice *res = NULL; + #ifdef NL_OS_WINDOWS - if (_EventEmitter.getNumEmitters() < 2) return NULL; - NLMISC::CDIEventEmitter *diee = NLMISC::safe_cast(_EventEmitter.getEmitter(1)); - if (enable) + + NLMISC::CDIEventEmitter *diee = NULL; + + if (_EventEmitter.getNumEmitters() > 1) + diee = NLMISC::safe_cast(_EventEmitter.getEmitter(1)); + + if (enable) + { + try { - try - { - NLMISC::IKeyboardDevice *md = diee->getKeyboardDevice(); - return md; - } - catch (EDirectInput &) - { - return NULL; - } + if (diee) + res = diee->getKeyboardDevice(); } - else + catch (EDirectInput &) { + } + } + else + { + if (diee) diee->releaseKeyboard(); - return NULL; - } + } + #elif defined(NL_OS_MAC) && defined(NL_MAC_NATIVE) # warning "OpenGL Driver: Missing Mac Implementation" nlwarning("OpenGL Driver: Missing Mac Implementation"); @@ -1631,17 +1645,22 @@ NLMISC::IKeyboardDevice* CDriverGL::enableLowLevelKeyboard(bool enable) #elif defined (NL_OS_UNIX) #endif - return NULL; + + return res; } // *************************************************************************** NLMISC::IInputDeviceManager* CDriverGL::getLowLevelInputDeviceManager() { H_AUTO_OGL(CDriverGL_getLowLevelInputDeviceManager) + + NLMISC::IInputDeviceManager *res = NULL; + #ifdef NL_OS_WINDOWS - if (_EventEmitter.getNumEmitters() < 2) return NULL; - NLMISC::CDIEventEmitter *diee = NLMISC::safe_cast(_EventEmitter.getEmitter(1)); - return diee; + + if (_EventEmitter.getNumEmitters() > 1) + res = NLMISC::safe_cast(_EventEmitter.getEmitter(1)); + #elif defined(NL_OS_MAC) && defined(NL_MAC_NATIVE) # warning "OpenGL Driver: Missing Mac Implementation" nlwarning("OpenGL Driver: Missing Mac Implementation"); @@ -1649,7 +1668,8 @@ NLMISC::IInputDeviceManager* CDriverGL::getLowLevelInputDeviceManager() #elif defined (NL_OS_UNIX) #endif - return NULL; + + return res; } // *************************************************************************** @@ -1657,37 +1677,49 @@ uint CDriverGL::getDoubleClickDelay(bool hardwareMouse) { H_AUTO_OGL(CDriverGL_getDoubleClickDelay) + uint res = 250; + #ifdef NL_OS_WINDOWS - NLMISC::IMouseDevice *md = NULL; - if (_EventEmitter.getNumEmitters() >= 2) + + NLMISC::IMouseDevice *md = NULL; + + if (_EventEmitter.getNumEmitters() >= 2) + { + NLMISC::CDIEventEmitter *diee = NLMISC::safe_cast(_EventEmitter.getEmitter(1)); + if (diee->isMouseCreated()) { - NLMISC::CDIEventEmitter *diee = NLMISC::safe_cast(_EventEmitter.getEmitter(1)); - if (diee->isMouseCreated()) + try { - try - { - md = diee->getMouseDevice(hardwareMouse); - } - catch (EDirectInput &) - { - // could not get device .. - } + md = diee->getMouseDevice(hardwareMouse); + } + catch (EDirectInput &) + { + // could not get device .. } } - if (md) - { - return md->getDoubleClickDelay(); - } + } + + if (md) + { + res = md->getDoubleClickDelay(); + } + else + { // try to read the good value from windows - return ::GetDoubleClickTime(); + res = ::GetDoubleClickTime(); + } + #elif defined(NL_OS_MAC) && defined(NL_MAC_NATIVE) # warning "OpenGL Driver: Missing Mac Implementation" nlwarning("OpenGL Driver: Missing Mac Implementation"); #elif defined (NL_OS_UNIX) - // TODO for Linux FIXME: FAKE FIX - return 250; + + // TODO for Linux + #endif + + return res; } // ***************************************************************************