Browse Source

Merge branch 'Preview4_0' of https://github.com/TorqueGameEngines/Torque3D into Preview4_0

Areloch 4 years ago
parent
commit
9a809dfb6b

+ 7 - 8
Engine/source/T3D/fx/precipitation.cpp

@@ -127,7 +127,7 @@ ConsoleDocClass( PrecipitationData,
 //----------------------------------------------------------
 PrecipitationData::PrecipitationData()
 {
-   soundProfile      = NULL;
+   INIT_SOUNDASSET(Sound);
 
    INIT_IMAGEASSET(Drop);
 
@@ -143,8 +143,7 @@ PrecipitationData::PrecipitationData()
 
 void PrecipitationData::initPersistFields()
 {
-   addField( "soundProfile", TYPEID< SFXTrack >(), Offset(soundProfile, PrecipitationData),
-      "Looping SFXProfile effect to play while Precipitation is active." );
+   INITPERSISTFIELD_SOUNDASSET(Sound, PrecipitationData, "Looping SFXProfile effect to play while Precipitation is active.");
 
    addProtectedField( "dropTexture", TypeFilename, Offset(mDropName, PrecipitationData), &_setDropData, &defaultProtectedGetFn,
       "@brief Texture filename for drop particles.\n\n"
@@ -190,7 +189,7 @@ bool PrecipitationData::preload( bool server, String &errorStr )
    if( Parent::preload( server, errorStr) == false)
       return false;
 
-   if( !server && !sfxResolve( &soundProfile, errorStr ) )
+   if (!server && !getSFXProfile())
       return false;
 
    return true;
@@ -200,7 +199,7 @@ void PrecipitationData::packData(BitStream* stream)
 {
    Parent::packData(stream);
 
-   sfxWrite( stream, soundProfile );
+   PACKDATA_SOUNDASSET(Sound);
 
    PACKDATA_IMAGEASSET(Drop);
 
@@ -217,7 +216,7 @@ void PrecipitationData::unpackData(BitStream* stream)
 {
    Parent::unpackData(stream);
 
-   sfxRead( stream, &soundProfile );
+   UNPACKDATA_SOUNDASSET(Sound);
 
    UNPACKDATA_IMAGEASSET(Drop);
 
@@ -598,9 +597,9 @@ bool Precipitation::onNewDataBlock( GameBaseData *dptr, bool reload )
    {
       SFX_DELETE( mAmbientSound );
 
-      if ( mDataBlock->soundProfile )
+      if ( mDataBlock->getSFXProfile())
       {
-         mAmbientSound = SFX->createSource( mDataBlock->soundProfile, &getTransform() );
+         mAmbientSound = SFX->createSource(mDataBlock->getSFXProfile(), &getTransform() );
          if ( mAmbientSound )
             mAmbientSound->play();
       }

+ 29 - 19
Engine/source/T3D/fx/precipitation.h

@@ -34,8 +34,9 @@
 #endif
 
 #include "T3D/assets/ImageAsset.h"
+#include "T3D/assets/SoundAsset.h"
 
-class SFXTrack;
+//class SFXTrack;
 class SFXSource;
 
 //--------------------------------------------------------------------------
@@ -45,30 +46,39 @@ class PrecipitationData : public GameBaseData
    typedef GameBaseData Parent;
 
   public:
-   SFXTrack*     soundProfile;
+   //SFXTrack*     soundProfile;
+     DECLARE_SOUNDASSET(PrecipitationData, Sound);
+     DECLARE_SOUNDASSET_SETGET(PrecipitationData, Sound);
 
-   DECLARE_IMAGEASSET(PrecipitationData, Drop, onDropChanged, GFXStaticTextureSRGBProfile); ///< Texture for drop particles
-   DECLARE_IMAGEASSET_SETGET(PrecipitationData, Drop);
+      DECLARE_IMAGEASSET(PrecipitationData, Drop, onDropChanged, GFXStaticTextureSRGBProfile); ///< Texture for drop particles
+      DECLARE_IMAGEASSET_SETGET(PrecipitationData, Drop);
 
-   StringTableEntry mDropShaderName;   ///< The name of the shader used for raindrops
+      StringTableEntry mDropShaderName;   ///< The name of the shader used for raindrops
 
-   DECLARE_IMAGEASSET(PrecipitationData, Splash, onSplashChanged, GFXStaticTextureSRGBProfile); ///< Texture for splash particles
-   DECLARE_IMAGEASSET_SETGET(PrecipitationData, Splash);
+      DECLARE_IMAGEASSET(PrecipitationData, Splash, onSplashChanged, GFXStaticTextureSRGBProfile); ///< Texture for splash particles
+      DECLARE_IMAGEASSET_SETGET(PrecipitationData, Splash);
 
-   StringTableEntry mSplashShaderName; ///< The name of the shader used for raindrops
+      StringTableEntry mSplashShaderName; ///< The name of the shader used for raindrops
 
-   S32  mDropsPerSide;     ///< How many drops are on a side of the raindrop texture.
-   S32  mSplashesPerSide;  ///< How many splash are on a side of the splash texture.
+      S32  mDropsPerSide;     ///< How many drops are on a side of the raindrop texture.
+      S32  mSplashesPerSide;  ///< How many splash are on a side of the splash texture.
    
-   PrecipitationData();
-   DECLARE_CONOBJECT(PrecipitationData);
-   bool preload( bool server, String& errorStr );
-   static void  initPersistFields();
-   virtual void packData(BitStream* stream);
-   virtual void unpackData(BitStream* stream);
-
-   void onDropChanged() {}
-   void onSplashChanged() {}
+      PrecipitationData();
+      DECLARE_CONOBJECT(PrecipitationData);
+      bool preload( bool server, String& errorStr );
+      static void  initPersistFields();
+      virtual void packData(BitStream* stream);
+      virtual void unpackData(BitStream* stream);
+
+      void onDropChanged() {}
+      void onSplashChanged() {}
+
+      SFXProfile* getSFXProfile() {
+         if (mSoundAsset.notNull())
+            return mSoundAsset->getSfxProfile();
+         else
+            return NULL;
+      }
 };
 
 struct Raindrop

+ 1 - 1
Engine/source/gfx/gfxInit.cpp

@@ -290,7 +290,7 @@ GFXAdapter *GFXInit::getBestAdapterChoice()
    {
      S32 adapterIdx = dAtoi(adapterDevice.c_str());
      if (adapterIdx == -1)
-        adapter = chooseAdapter(adapterType, outputDevice.c_str());
+        adapter = chooseAdapter(NullDevice, outputDevice.c_str());
      else
         adapter = chooseAdapter(adapterType, adapterIdx);
    }

+ 1 - 1
Engine/source/gfx/gl/gfxGLDevice.cpp

@@ -933,7 +933,7 @@ void GFXGLDevice::setupGenericShaders( GenericShaderType type )
 }
 GFXShader* GFXGLDevice::createShader()
 {
-   GFXGLShader* shader = new GFXGLShader();
+   GFXGLShader* shader = new GFXGLShader(this);
    shader->registerResourceWithDevice( this );
    return shader;
 }

+ 5 - 3
Engine/source/gfx/gl/gfxGLShader.cpp

@@ -382,10 +382,11 @@ void GFXGLShaderConstBuffer::onShaderReload( GFXGLShader *shader )
    mWasLost = true;
 }
 
-GFXGLShader::GFXGLShader() :
+GFXGLShader::GFXGLShader(GFXGLDevice* device) :
    mVertexShader(0),
    mPixelShader(0),
    mProgram(0),
+   mDevice(device),
    mConstBufferSize(0),
    mConstBuffer(NULL)
 {
@@ -706,7 +707,8 @@ void GFXGLShader::initHandles()
    dMemset(mConstBuffer, 0, mConstBufferSize);
    
    // Set our program so uniforms are assigned properly.
-   glUseProgram(mProgram);
+   mDevice->setShader(this, false);
+
    // Iterate through uniforms to set sampler numbers.
    for (HandleMap::Iterator iter = mHandles.begin(); iter != mHandles.end(); ++iter)
    {
@@ -723,7 +725,6 @@ void GFXGLShader::initHandles()
          dMemcpy(mConstBuffer + handle->mOffset, &handle->mSamplerNum, handle->getSize());
       }
    }
-   glUseProgram(0);
 
    //instancing
    if (!mInstancingFormat)
@@ -830,6 +831,7 @@ void GFXGLShader::setConstantsFromBuffer(GFXGLShaderConstBuffer* buffer)
          
       // Copy new value into our const buffer and set in GL.
       dMemcpy(mConstBuffer + handle->mOffset, buffer->mBuffer + handle->mOffset, handle->getSize());
+
       switch(handle->mDesc.constType)
       {
          case GFXSCT_Float:

+ 4 - 2
Engine/source/gfx/gl/gfxGLShader.h

@@ -32,14 +32,15 @@
 class GFXGLShaderConstHandle;
 class FileStream;
 class GFXGLShaderConstBuffer;
+class GFXGLDevice;
 
 class GFXGLShader : public GFXShader
 {
    typedef Map<String, GFXGLShaderConstHandle*> HandleMap;
 public:
-   GFXGLShader();
+   GFXGLShader(GFXGLDevice* device);
    virtual ~GFXGLShader();
-   
+
    /// @name GFXShader interface
    /// @{
    virtual GFXShaderConstHandle* getShaderConstHandle(const String& name);
@@ -99,6 +100,7 @@ protected:
    U32 mConstBufferSize;
    U8* mConstBuffer;
    HandleMap mHandles;
+   GFXGLDevice* mDevice;
    Vector<GFXGLShaderConstHandle*> mValidHandles;
 };
 

+ 8 - 6
Engine/source/gui/core/guiCanvas.cpp

@@ -258,17 +258,19 @@ bool GuiCanvas::onAdd()
    // Make sure we're able to render.
    newDevice->setAllowRender( true );
 
-   if(mDisplayWindow)
+   // NULL device returns a nullptr for getPlatformWindow
+   PlatformWindow* window = getPlatformWindow();
+   if (mDisplayWindow && window)
    {
-      getPlatformWindow()->show();
+      window->show();
       WindowManager->setDisplayWindow(true);
-      getPlatformWindow()->setDisplayWindow(true);
+      window->setDisplayWindow(true);
    }
-   else
+   else if (window)
    {
-      getPlatformWindow()->hide();
+      window->hide();
       WindowManager->setDisplayWindow(false);
-      getPlatformWindow()->setDisplayWindow(false);
+      window->setDisplayWindow(false);
    }
 
    // Propagate add to parents.

+ 9 - 5
Templates/BaseGame/game/main.tscript.in

@@ -1,10 +1,6 @@
 $Core::windowIcon = "data/icon.png";
 $Core::splashWindowImage = "data/splash.png";
 
-// Display a splash window immediately to improve app responsiveness before
-// engine is initialized and main window created.
-displaySplashWindow($Core::splashWindowImage);
-
 // Console does something.
 setLogMode(6);
 
@@ -20,6 +16,13 @@ ModuleDatabase.setModuleExtension("module");
 ModuleDatabase.scanModules( "core", false );
 ModuleDatabase.LoadExplicit( "CoreModule" );
 
+// Display a splash window immediately to improve app responsiveness before
+// engine is initialized and main window created.
+if ($Server::Dedicated == false)
+    displaySplashWindow($Core::splashWindowImage);
+else
+    $Video::forceDisplayAdapter = -1;
+    
 //-----------------------------------------------------------------------------
 // Load any gameplay modules
 ModuleDatabase.scanModules( "data", false );
@@ -42,6 +45,7 @@ else
    }
 }
 
-closeSplashWindow();
+if ($Server::Dedicated == false)
+    closeSplashWindow();
 
 echo("Engine initialized...");

+ 1 - 1
Templates/BaseGame/game/tools/projectImporter/scripts/pre40/T3Dpre4ProjectImporter.tscript

@@ -919,7 +919,7 @@ T3Dpre4ProjectImporter::genProcessor("DebrisData", "shape shapeAsset shapeFile s
 T3Dpre4ProjectImporter::genProcessor("DecalData", "material materialAsset");
 T3Dpre4ProjectImporter::genProcessor("ExplosionData", "explosionShape explosionShapeAsset");
 T3Dpre4ProjectImporter::genProcessor("ParticleData", "texture textureAsset textureName textureAsset textureExt textureExtAsset textureExtName textureExtAsset");
-T3Dpre4ProjectImporter::genProcessor("PrecipitationData", "drop dropAsset dropTexture dropAsset splash splashAsset splashTexture splashAsset");
+T3Dpre4ProjectImporter::genProcessor("PrecipitationData", "drop dropAsset dropTexture dropAsset splash splashAsset splashTexture splashAsset soundProfile soundAsset");
 T3Dpre4ProjectImporter::genProcessor("SplashData", "texture textureAsset");
 T3Dpre4ProjectImporter::genProcessor("LightFlareData", "flareTexture flareTextureAsset");
 T3Dpre4ProjectImporter::genProcessor("PhysicsDebrisData", "shape shapeAsset shapeFile shapeAsset");

+ 38 - 12
Templates/BaseGame/game/tools/projectImporter/scripts/projectImporter.tscript

@@ -556,23 +556,49 @@ function processLegacyField(%line, %originalFieldName, %newFieldName)
       %targetFilename = sanitizeFilename(%value);
       
       if(isObject(%targetFilename))
+      {
+         if(%originalFieldName $= "soundProfile")
+         {
+            $ProjectImporter::assetQuery.clear();
+            %foundAssets = AssetDatabase.findAssetName($ProjectImporter::assetQuery, %targetFilename);
+            if(%foundAssets != 0)
+            {
+               %assetId = $ProjectImporter::assetQuery.getAsset(0);  
+            }
+         }
+         else
          {
-         //likely a material name, so handle it that way
-         %assetId = MaterialAsset::getAssetIdByMaterialName(%targetFilename);
+            //likely a material name, so handle it that way
+            %assetId = MaterialAsset::getAssetIdByMaterialName(%targetFilename);
+         }
       }
       else
       {
          if(!isFile(%targetFilename))
-      {
-         error("Legacy Project Importer - file described in line could not be found/is not valid");
-         return %line;
-      }
-      
-      $ProjectImporter::assetQuery.clear();
-      %foundAssets = AssetDatabase.findAssetLooseFile($ProjectImporter::assetQuery, %targetFilename);
-      if(%foundAssets != 0)
-      {
-         %assetId = $ProjectImporter::assetQuery.getAsset(0);
+         {
+            if(%originalFieldName $= "soundProfile")
+            {
+               $ProjectImporter::assetQuery.clear();
+               %foundAssets = AssetDatabase.findAssetName($ProjectImporter::assetQuery, %targetFilename);
+               if(%foundAssets != 0)
+               {
+                  %assetId = $ProjectImporter::assetQuery.getAsset(0);  
+               }
+            }
+            else
+            {
+               error("Legacy Project Importer - file described in line could not be found/is not valid");
+               return %line;
+            }
+         }
+         else
+         {
+            $ProjectImporter::assetQuery.clear();
+            %foundAssets = AssetDatabase.findAssetLooseFile($ProjectImporter::assetQuery, %targetFilename);
+            if(%foundAssets != 0)
+            {
+               %assetId = $ProjectImporter::assetQuery.getAsset(0);
+            }
          }
       }