Revision: 1590
          http://rigsofrods.svn.sourceforge.net/rigsofrods/?rev=1590&view=rev
Author:   rorthomas
Date:     2011-01-22 00:07:00 +0000 (Sat, 22 Jan 2011)

Log Message:
-----------
improved embedded mode
fixed rtshader cache path

Modified Paths:
--------------
    trunk/source/main/InputEngine.cpp
    trunk/source/main/RigsOfRods.cpp
    trunk/source/main/RigsOfRods.h
    trunk/source/main/RoRFrameListener.cpp
    trunk/source/main/RoRFrameListener.h
    trunk/source/main/SelectorWindow.cpp
    trunk/source/main/main.cpp

Modified: trunk/source/main/InputEngine.cpp
===================================================================
--- trunk/source/main/InputEngine.cpp   2011-01-21 01:58:23 UTC (rev 1589)
+++ trunk/source/main/InputEngine.cpp   2011-01-22 00:07:00 UTC (rev 1590)
@@ -34,6 +34,8 @@
 #include <OgreWindowEventUtilities.h>
 #include "Settings.h"
 
+#include "errorutils.h"
+
 #ifndef NOOGRE
 #include "IngameConsole.h"
 #include "gui_manager.h"
@@ -1584,9 +1586,6 @@
                ParamList pl;
                String hwnd_str = Ogre::StringConverter::toString(hwnd);
                pl.insert(OIS::ParamList::value_type("WINDOW", hwnd_str));
-        //pl.insert(std::make_pair(std::string("w32_keyboard"), 
std::string("DISCL_FOREGROUND") ));
-        //pl.insert(std::make_pair(std::string("w32_keyboard"), 
std::string("DISCL_NONEXCLUSIVE") ));
-
                if(grabMode == GRAB_ALL)
                {
                } else if(grabMode == GRAB_DYNAMICALLY || grabMode == GRAB_NONE)
@@ -1596,8 +1595,14 @@
                        pl.insert(OIS::ParamList::value_type("XAutoRepeatOn", 
"false"));
                        pl.insert(OIS::ParamList::value_type("x11_mouse_grab", 
"false"));
                        
pl.insert(OIS::ParamList::value_type("x11_keyboard_grab", "false"));
-#endif
+#else
+                       pl.insert(OIS::ParamList::value_type("w32_mouse", 
"DISCL_FOREGROUND"));
+                       pl.insert(OIS::ParamList::value_type("w32_mouse", 
"DISCL_NONEXCLUSIVE"));
+                       pl.insert(OIS::ParamList::value_type("w32_keyboard", 
"DISCL_FOREGROUND"));
+                       pl.insert(OIS::ParamList::value_type("w32_keyboard", 
"DISCL_NONEXCLUSIVE"));
                }
+#endif // LINUX
+
 #ifndef NOOGRE
                LogManager::getSingleton().logMessage("*** OIS WINDOW: 
"+hwnd_str);
 #endif //NOOGRE
@@ -1624,8 +1629,14 @@
                mKeyboard=0;
                if(captureKbd)
                {
-                       mKeyboard = 
static_cast<Keyboard*>(mInputManager->createInputObject( OISKeyboard, true ));
-                       mKeyboard->setTextTranslation(OIS::Keyboard::Unicode);
+                       try
+                       {
+                               mKeyboard = 
static_cast<Keyboard*>(mInputManager->createInputObject( OISKeyboard, true ));
+                               
mKeyboard->setTextTranslation(OIS::Keyboard::Unicode);
+                       } catch(OIS::Exception &ex)
+                       {
+                               
LogManager::getSingleton().logMessage(String("Exception raised on keyboard 
creation: ") + String(ex.eText));
+                       }
                }
 
 
@@ -1667,21 +1678,28 @@
                if(capturemouse)
                {
                        printf(">>> MOUSE ADDED\n");
-                       mMouse = 
static_cast<Mouse*>(mInputManager->createInputObject( OISMouse, true ));
+                       try
+                       {
+                               mMouse = 
static_cast<Mouse*>(mInputManager->createInputObject( OISMouse, true ));
+                       } catch(OIS::Exception &ex)
+                       {
+                               
LogManager::getSingleton().logMessage(String("Exception raised on mouse 
creation: ") + String(ex.eText));
+                       }
                }
 
                //Set initial mouse clipping size
                //windowResized(win);
 
                // set Callbacks
-               if(mKeyboard)
+               if(mKeyboard && mKeyboard)
                        mKeyboard->setEventCallback(this);
-               if(capturemouse)
+               if(capturemouse && mMouse)
+               {
                        mMouse->setEventCallback(this);
 
-               // init states (not required for keyboard)
-               if(capturemouse)
+                       // init states (not required for keyboard)
                        mouseState = mMouse->getMouseState();
+               }
                if(free_joysticks)
                {
                        for(int i=0;i<free_joysticks;i++)

Modified: trunk/source/main/RigsOfRods.cpp
===================================================================
--- trunk/source/main/RigsOfRods.cpp    2011-01-21 01:58:23 UTC (rev 1589)
+++ trunk/source/main/RigsOfRods.cpp    2011-01-22 00:07:00 UTC (rev 1590)
@@ -23,7 +23,6 @@
 #include "errorutils.h"
 
 #include <OgreHeaderPrefix.h>
-#include <OgreRTShaderSystem.h>
 
 /** This class simply demonstrates basic usage of the CRTShader system.
 It sub class the material manager listener class and when a target scheme 
callback
@@ -72,7 +71,7 @@
        RTShader::ShaderGenerator*              mShaderGenerator;               
        // The shader generator instance.
 };
 
-RigsOfRods::RigsOfRods(Ogre::String name, unsigned int hwnd) :
+RigsOfRods::RigsOfRods(Ogre::String name, unsigned int hwnd, unsigned int 
mainhwnd) :
        mRoot(0),
        mCamera(0),
        mSceneMgr(0),
@@ -80,6 +79,7 @@
        mWindow(0),
        ssm(0),
        hwnd(hwnd),
+       mainhwnd(mainhwnd),
        name(name)
 {
        useogreconfig=false;
@@ -357,7 +357,7 @@
 
        LogManager::getSingleton().logMessage("Adding Frame Listener");
        bool isEmbedded = (hwnd != 0);
-       mFrameListener = new RoRFrameListener(mWindow, mCamera, mSceneMgr, 
mRoot, isEmbedded);
+       mFrameListener = new RoRFrameListener(mWindow, mCamera, mSceneMgr, 
mRoot, isEmbedded, mainhwnd);
        mRoot->addFrameListener(mFrameListener);
 
        LogManager::getSingleton().logMessage("Setup finished successfully");
@@ -370,7 +370,7 @@
                return;
 
        // Grab the shader generator pointer.
-       Ogre::RTShader::ShaderGenerator *mShaderGenerator = 
Ogre::RTShader::ShaderGenerator::getSingletonPtr();
+       mShaderGenerator = Ogre::RTShader::ShaderGenerator::getSingletonPtr();
 
        // Set the scene manager.
        mShaderGenerator->addSceneManager(mSceneMgr);
@@ -379,21 +379,10 @@
        loadMainResource("rtshader");
 
        // Set shader cache path.
-       mShaderGenerator->setShaderCachePath(SETTINGS.getSetting("User 
Path")+"cache");
+       mShaderGenerator->setShaderCachePath(SETTINGS.getSetting("Cache Path"));
 
        ShaderGeneratorTechniqueResolverListener *mMaterialMgrListener = new 
ShaderGeneratorTechniqueResolverListener(mShaderGenerator);
        MaterialManager::getSingleton().addListener(mMaterialMgrListener);
-
-       // add per pixel lighting
-       /*
-       RTShader::ShaderGenerator* shaderGenerator = 
RTShader::ShaderGenerator::getSingletonPtr();
-       RTShader::RenderState* renderState = 
shaderGenerator->getRenderState(RTShader::ShaderGenerator::DEFAULT_SCHEME_NAME);
-       renderState->reset();
-       RTShader::SubRenderState* perPixelLightModel = 
shaderGenerator->createSubRenderState(RTShader::PerPixelLighting::Type);
-       renderState->addTemplateSubRenderState(perPixelLightModel);
-       // Invalidate the scheme in order to re-generate all shaders based 
technique related to this scheme.
-       
shaderGenerator->invalidateScheme(RTShader::ShaderGenerator::DEFAULT_SCHEME_NAME);
-       */
 }
 
 void RigsOfRods::createScene(void)

Modified: trunk/source/main/RigsOfRods.h
===================================================================
--- trunk/source/main/RigsOfRods.h      2011-01-21 01:58:23 UTC (rev 1589)
+++ trunk/source/main/RigsOfRods.h      2011-01-22 00:07:00 UTC (rev 1590)
@@ -27,11 +27,13 @@
 #ifndef RIGSOFRODS_H__
 #define RIGSOFRODS_H__
 
-#include "Ogre.h"
-#include "OgreConfigFile.h"
+#include <Ogre.h>
+#include <OgreRTShaderSystem.h>
+#include <OgreConfigFile.h>
+#include <OgreConfigDialog.h>
+
 #include "RoRFrameListener.h"
 //#include "OgrePlatformManager.h"
-#include "OgreConfigDialog.h"
 #ifdef HAS_EDITOR
 #include "spincontrol.h"
 #endif
@@ -54,7 +56,7 @@
 class RigsOfRods
 {
 public:
-       RigsOfRods(Ogre::String name = Ogre::String("RoR"), unsigned int 
hwnd=0);
+       RigsOfRods(Ogre::String name = Ogre::String("RoR"), unsigned int 
hwnd=0, unsigned int mainhwnd=0);
        ~RigsOfRods();
        // creates Ogre Root
        bool setup(void);
@@ -72,6 +74,8 @@
        Root *getRoot() { return mRoot; };
        RoRFrameListener *getRoRFrameListener() { return mFrameListener; };
 
+       Ogre::RTShader::ShaderGenerator *getShaderGenerator() { return 
mShaderGenerator; };
+
 protected:
        Root *mRoot;
        Camera* mCamera;
@@ -80,8 +84,9 @@
        RenderWindow* mWindow;
        SoundScriptManager* ssm;
        Viewport* vp;
-       unsigned int hwnd;
+       unsigned int hwnd, mainhwnd;
        Ogre::String name;
+       Ogre::RTShader::ShaderGenerator *mShaderGenerator;
 
 #ifdef HAS_EDITOR
        SpinControlOverlayElementFactory* spinfact;

Modified: trunk/source/main/RoRFrameListener.cpp
===================================================================
--- trunk/source/main/RoRFrameListener.cpp      2011-01-21 01:58:23 UTC (rev 
1589)
+++ trunk/source/main/RoRFrameListener.cpp      2011-01-22 00:07:00 UTC (rev 
1590)
@@ -752,11 +752,12 @@
 }
 
 // Constructor takes a RenderWindow because it uses that to determine input 
context
-RoRFrameListener::RoRFrameListener(RenderWindow* win, Camera* cam, 
SceneManager* scm, Root* root, bool isEmbedded) :
+RoRFrameListener::RoRFrameListener(RenderWindow* win, Camera* cam, 
SceneManager* scm, Root* root, bool isEmbedded, unsigned int inputhwnd) :
        initialized(false),
        mCollisionTools(0),
        isEmbedded(isEmbedded),
-       ow(0)
+       ow(0),
+       inputhwnd(inputhwnd)
 {
        for (int i=0; i<MAX_TRUCKS; i++) trucks[i]=0;
 
@@ -898,13 +899,20 @@
        else if(SETTINGS.getSetting("Input Grab") == "None")
                inputGrabMode = GRAB_NONE;
 
-       // start input engine
-       size_t hWnd = 0;
-       win->getCustomAttribute("WINDOW", &hWnd);
+       if(!isEmbedded)
+       {
 
+               // start input engine
+               size_t hWnd = 0;
+               win->getCustomAttribute("WINDOW", &hWnd);
 
-       if(!benchmarking && !isEmbedded)
-               INPUTENGINE.setup(hWnd, true, true, inputGrabMode);
+               if(!benchmarking && !isEmbedded)
+                       INPUTENGINE.setup(hWnd, true, true, inputGrabMode);
+       } else
+       {
+               INPUTENGINE.setup(inputhwnd, true, true, GRAB_NONE);
+       }
+
 #ifdef USE_MYGUI
        // init GUI
        new GUIManager(root, scm, win);
@@ -1063,6 +1071,7 @@
        camCollided=false;
        camPosColl=Vector3::ZERO;
        cameramode=0;
+       if(isEmbedded) cameramode=CAMERA_FREE;
        road=0;
 
        objcounter=0;
@@ -1276,8 +1285,11 @@
                //}
 
                //load preselected truck
-               if(preselected_truck != "")
+               if(preselected_truck == "none")
                {
+                       // do not load truck
+               } else if(preselected_truck != "")
+               {
                        loading_state=TERRAIN_LOADED;
                        std::vector<String> *tconfig = 0;
                        if(!preselected_truckConfig.empty())
@@ -4173,6 +4185,12 @@
        {
                //no terrain or truck loaded
 
+               // in embedded mode we wont show that loading stuff
+               if(isEmbedded)
+               {
+                       loading_state=ALL_LOADED;
+                       LoadingWindow::get()->hide();
+               }
                //uiloader->updateEvents(dt);
 
 

Modified: trunk/source/main/RoRFrameListener.h
===================================================================
--- trunk/source/main/RoRFrameListener.h        2011-01-21 01:58:23 UTC (rev 
1589)
+++ trunk/source/main/RoRFrameListener.h        2011-01-22 00:07:00 UTC (rev 
1590)
@@ -309,9 +309,10 @@
        bool updateTruckMirrors(float dt);
        void gridScreenshots(Ogre::RenderWindow* pRenderWindow, Ogre::Camera* 
pCamera, const int& pGridSize, const Ogre::String& path, const Ogre::String& 
pFileName, const Ogre::String& pFileExtention, const bool& pStitchGridImages);
        void initDust();
+       unsigned int inputhwnd;
 public:
        // Constructor takes a RenderWindow because it uses that to determine 
input context
-       RoRFrameListener(RenderWindow* win, Camera* cam, SceneManager* scm, 
Root* root, bool isEmbedded=false);
+       RoRFrameListener(RenderWindow* win, Camera* cam, SceneManager* scm, 
Root* root, bool isEmbedded=false, unsigned int inputhwnd=0);
        virtual ~RoRFrameListener();
 
        void removeBeam(Beam *);

Modified: trunk/source/main/SelectorWindow.cpp
===================================================================
--- trunk/source/main/SelectorWindow.cpp        2011-01-21 01:58:23 UTC (rev 
1589)
+++ trunk/source/main/SelectorWindow.cpp        2011-01-22 00:07:00 UTC (rev 
1590)
@@ -29,7 +29,7 @@
 #include "skinmanager.h"
 #include "BeamData.h"
 
-SelectorWindow::SelectorWindow()
+SelectorWindow::SelectorWindow() : mSelectedTruck(0)
 {
        initialiseByAttributes(this);
 

Modified: trunk/source/main/main.cpp
===================================================================
--- trunk/source/main/main.cpp  2011-01-21 01:58:23 UTC (rev 1589)
+++ trunk/source/main/main.cpp  2011-01-22 00:07:00 UTC (rev 1590)
@@ -17,6 +17,8 @@
 You should have received a copy of the GNU General Public License
 along with Rigs of Rods.  If not, see <http://www.gnu.org/licenses/>.
 */
+#ifndef ROR_EMBEDDED
+
 #include "RigsOfRods.h"
 #include "language.h"
 #include "errorutils.h"
@@ -310,3 +312,5 @@
 #ifdef __cplusplus
 }
 #endif
+
+#endif //ROR_EMBEDDED
\ No newline at end of file


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

------------------------------------------------------------------------------
Special Offer-- Download ArcSight Logger for FREE (a $49 USD value)!
Finally, a world-class log management solution at an even better price-free!
Download using promo code Free_Logger_4_Dev2Dev. Offer expires 
February 28th, so secure your free ArcSight Logger TODAY! 
http://p.sf.net/sfu/arcsight-sfd2d
_______________________________________________
Rigsofrods-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/rigsofrods-devel

Reply via email to