Revision: 1539
          http://rigsofrods.svn.sourceforge.net/rigsofrods/?rev=1539&view=rev
Author:   rorthomas
Date:     2010-09-05 22:53:54 +0000 (Sun, 05 Sep 2010)

Log Message:
-----------
fixed some compiler warnings under MSVC
fixed caelum moon shadow: only one light/shadow source now
added new RTShader enable/disable key (CTRL+SHIFT+S)

Modified Paths:
--------------
    trunk/source/main/Beam.cpp
    trunk/source/main/InputEngine.cpp
    trunk/source/main/InputEngine.h
    trunk/source/main/RigsOfRods.cpp
    trunk/source/main/RoRFrameListener.cpp
    trunk/source/main/RoRFrameListener.h
    trunk/source/main/SkyManager.cpp
    trunk/source/main/network.cpp

Modified: trunk/source/main/Beam.cpp
===================================================================
--- trunk/source/main/Beam.cpp  2010-09-04 17:19:29 UTC (rev 1538)
+++ trunk/source/main/Beam.cpp  2010-09-05 22:53:54 UTC (rev 1539)
@@ -11092,7 +11092,7 @@
        if(SETTINGS.getSetting("NoCrashRpt").empty())
        {
                // add the crash handler for this thread
-               CrThreadAutoInstallHelper cr_thread_install_helper();
+               CrThreadAutoInstallHelper cr_thread_install_helper;
                assert(cr_thread_install_helper.m_nInstallStatus==0);
        }
 #endif //USE_CRASHRPT

Modified: trunk/source/main/InputEngine.cpp
===================================================================
--- trunk/source/main/InputEngine.cpp   2010-09-04 17:19:29 UTC (rev 1538)
+++ trunk/source/main/InputEngine.cpp   2010-09-05 22:53:54 UTC (rev 1539)
@@ -1472,6 +1472,8 @@
        { "DOF_DEBUG_FOCUS_OUT", EV_DOF_DEBUG_FOCUS_OUT, "Keyboard EXPL+4", 
_L("move focus out") },
 
        { "TRUCKEDIT_RELOAD", EV_TRUCKEDIT_RELOAD, "Keyboard 
EXPL+SHIFT+CTRL+R", _L("reload truck") },
+       
+       { "TOGGLESHADERS", EV_TOGGLESHADERS, "Keyboard EXPL+SHIFT+CTRL+S", 
_L("toggle shader usage") },
 
        // the end, DO NOT MODIFY
        {"", -1, "", ""},

Modified: trunk/source/main/InputEngine.h
===================================================================
--- trunk/source/main/InputEngine.h     2010-09-04 17:19:29 UTC (rev 1538)
+++ trunk/source/main/InputEngine.h     2010-09-05 22:53:54 UTC (rev 1539)
@@ -355,6 +355,8 @@
 
        EV_TRUCKEDIT_RELOAD,
 
+       EV_TOGGLESHADERS,
+
        // the end, DO NOT MODIFY
        EV_MODE_BEFORELAST,
        EV_MODE_LAST

Modified: trunk/source/main/RigsOfRods.cpp
===================================================================
--- trunk/source/main/RigsOfRods.cpp    2010-09-04 17:19:29 UTC (rev 1538)
+++ trunk/source/main/RigsOfRods.cpp    2010-09-05 22:53:54 UTC (rev 1539)
@@ -22,8 +22,58 @@
 #include "language.h"
 #include "errorutils.h"
 
-#include "OgreRTShaderSystem.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
+is invoked with the shader generator scheme it tries to create an equvialent 
shader
+based technique based on the default technique of the given material.
+*/
+class ShaderGeneratorTechniqueResolverListener : public 
MaterialManager::Listener
+{
+public:
+
+       ShaderGeneratorTechniqueResolverListener(RTShader::ShaderGenerator* 
pShaderGenerator)
+       {
+               mShaderGenerator = pShaderGenerator;
+       }
+
+       virtual Technique* handleSchemeNotFound(unsigned short schemeIndex, 
+               const String& schemeName, Material* originalMaterial, unsigned 
short lodIndex, 
+               const Renderable* rend)
+       {               
+               // Case this is the default shader generator scheme.
+               if (schemeName == 
RTShader::ShaderGenerator::DEFAULT_SCHEME_NAME)
+               {
+                       MaterialRegisterIterator itFind = 
mRegisteredMaterials.find(originalMaterial);
+                       bool techniqueCreated = false;
+
+                       // This material was not registered before.
+                       if (itFind == mRegisteredMaterials.end())
+                       {
+                               techniqueCreated = 
mShaderGenerator->createShaderBasedTechnique(
+                                       originalMaterial->getName(), 
+                                       MaterialManager::DEFAULT_SCHEME_NAME, 
+                                       schemeName);                            
+                       }
+                       mRegisteredMaterials[originalMaterial] = 
techniqueCreated;
+               }
+
+               return NULL;
+       }
+
+protected:
+       typedef std::map<Material*, bool>               MaterialRegisterMap;
+       typedef MaterialRegisterMap::iterator   MaterialRegisterIterator;
+
+
+protected:
+       MaterialRegisterMap                             mRegisteredMaterials;   
        // Registered material map.
+       RTShader::ShaderGenerator*              mShaderGenerator;               
        // The shader generator instance.
+};
+
+
 RigsOfRods::RigsOfRods(Ogre::String name, unsigned int hwnd) :
        mRoot(0),
        mCamera(0),
@@ -323,14 +373,29 @@
        // Grab the shader generator pointer.
        Ogre::RTShader::ShaderGenerator *mShaderGenerator = 
Ogre::RTShader::ShaderGenerator::getSingletonPtr();
 
+       // Set the scene manager.
+       mShaderGenerator->addSceneManager(mSceneMgr);
+
+
        // Add the shader libs resource location.
        loadMainResource("rtshader");
 
        // Set shader cache path.
-       mShaderGenerator->setShaderCachePath(SETTINGS.getSetting("User 
Path")+"cache");         
+       mShaderGenerator->setShaderCachePath(SETTINGS.getSetting("User 
Path")+"cache");
 
-       // Set the scene manager.
-       mShaderGenerator->addSceneManager(mSceneMgr);
+       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/RoRFrameListener.cpp
===================================================================
--- trunk/source/main/RoRFrameListener.cpp      2010-09-04 17:19:29 UTC (rev 
1538)
+++ trunk/source/main/RoRFrameListener.cpp      2010-09-05 22:53:54 UTC (rev 
1539)
@@ -125,6 +125,8 @@
 #include "errorutils.h"
 #include "DustManager.h"
 
+#include <OgreHeaderPrefix.h>
+#include <OgreRTShaderSystem.h>
 
 #if OGRE_PLATFORM == OGRE_PLATFORM_WIN32
        #include <Windows.h>
@@ -779,6 +781,8 @@
        enablePosStor = (SETTINGS.getSetting("Position Storage")=="Yes");
        objectCounter=0;
        hdrListener=0;
+       shaderSchemeMode=1;
+
        netPointToUID=-1;
        netcheckGUITimer=0;
        mDOF=0;
@@ -2352,6 +2356,24 @@
                mDOFDebug = !mDOFDebug;
                mDOF->setDebugEnabled(mDOFDebug);
        }
+       
+       if (INPUTENGINE.getEventBoolValueBounce(EV_TOGGLESHADERS, 0.5f))
+       {
+               if(shaderSchemeMode)
+               {
+                       shaderSchemeMode=0;
+                       
mCamera->getViewport()->setMaterialScheme(MaterialManager::DEFAULT_SCHEME_NAME);
+                       LogManager::getSingleton().logMessage("shaders 
disabled");
+                       if(ow) ow->flashMessage("shaders disabled");
+               } else
+               {
+                       shaderSchemeMode=1;
+                       
mCamera->getViewport()->setMaterialScheme(RTShader::ShaderGenerator::DEFAULT_SCHEME_NAME);
+                       LogManager::getSingleton().logMessage("shaders 
enabled");
+                       if(ow) ow->flashMessage("shaders enabled");
+               }
+       }
+
        if (INPUTENGINE.getEventBoolValueBounce(EV_COMMON_SCREENSHOT_BIG, 0.5f))
        {
                // hide flash messages

Modified: trunk/source/main/RoRFrameListener.h
===================================================================
--- trunk/source/main/RoRFrameListener.h        2010-09-04 17:19:29 UTC (rev 
1538)
+++ trunk/source/main/RoRFrameListener.h        2010-09-05 22:53:54 UTC (rev 
1539)
@@ -224,6 +224,7 @@
        bool mDOFDebug;
        int mouseX;
        int mouseY;
+       int shaderSchemeMode;
        int inputGrabMode;
        int mouseGrabState;
        bool switchMouseButtons;

Modified: trunk/source/main/SkyManager.cpp
===================================================================
--- trunk/source/main/SkyManager.cpp    2010-09-04 17:19:29 UTC (rev 1538)
+++ trunk/source/main/SkyManager.cpp    2010-09-05 22:53:54 UTC (rev 1539)
@@ -54,10 +54,6 @@
        mCaelumSystem = new Caelum::CaelumSystem (Root::getSingletonPtr(), 
mScene, Caelum::CaelumSystem::CAELUM_COMPONENTS_NONE);
        mCaelumSystem->attachViewport(mCamera->getViewport());
 
-       // overwrite some settings
-       mCaelumSystem->setEnsureSingleShadowSource(true);
-       mCaelumSystem->setEnsureSingleLightSource(true);
-
        /*
        // TODO: set real time, and let the user select his true location
        mCaelumSystem->getUniversalClock()->setGregorianDateTime(2008, 4, 9, 6, 
33, 0);
@@ -77,6 +73,20 @@
        try
        {
                CaelumPlugin::getSingleton().loadCaelumSystemFromScript 
(mCaelumSystem, script);
+
+
+               // overwrite some settings
+               if(mCaelumSystem->getMoon())
+               {
+                       mCaelumSystem->getMoon()->setAutoDisable(true);
+                       mCaelumSystem->getMoon()->setAutoDisableThreshold(1);
+                       mCaelumSystem->getMoon()->setForceDisable(true);
+                       
mCaelumSystem->getMoon()->getMainLight()->setCastShadows(false);
+               }
+
+               mCaelumSystem->setEnsureSingleShadowSource(true);
+               mCaelumSystem->setEnsureSingleLightSource(true);
+
        } catch(Ogre::Exception& e)
        {
                LogManager::getSingleton().logMessage("exception upon loading 
sky script: " + e.getFullDescription());

Modified: trunk/source/main/network.cpp
===================================================================
--- trunk/source/main/network.cpp       2010-09-04 17:19:29 UTC (rev 1538)
+++ trunk/source/main/network.cpp       2010-09-05 22:53:54 UTC (rev 1539)
@@ -58,7 +58,7 @@
        if(SETTINGS.getSetting("NoCrashRpt").empty())
        {
                // add the crash handler for this thread
-               CrThreadAutoInstallHelper cr_thread_install_helper();
+               CrThreadAutoInstallHelper cr_thread_install_helper;
                assert(cr_thread_install_helper.m_nInstallStatus==0);
        }
 #endif //USE_CRASHRPT
@@ -72,7 +72,7 @@
        if(SETTINGS.getSetting("NoCrashRpt").empty())
        {
                // add the crash handler for this thread
-               CrThreadAutoInstallHelper cr_thread_install_helper();
+               CrThreadAutoInstallHelper cr_thread_install_helper(0);
                assert(cr_thread_install_helper.m_nInstallStatus==0);
        }
 #endif //USE_CRASHRPT


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

------------------------------------------------------------------------------
This SF.net Dev2Dev email is sponsored by:

Show off your parallel programming skills.
Enter the Intel(R) Threading Challenge 2010.
http://p.sf.net/sfu/intel-thread-sfd
_______________________________________________
Rigsofrods-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/rigsofrods-devel

Reply via email to