| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223 | //-----------------------------------------------------------------------------// Copyright (c) 2012 GarageGames, LLC//// Permission is hereby granted, free of charge, to any person obtaining a copy// of this software and associated documentation files (the "Software"), to// deal in the Software without restriction, including without limitation the// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or// sell copies of the Software, and to permit persons to whom the Software is// furnished to do so, subject to the following conditions://// The above copyright notice and this permission notice shall be included in// all copies or substantial portions of the Software.//// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS// IN THE SOFTWARE.//-----------------------------------------------------------------------------#include "platform/platform.h"#include "gfx/sim/cubemapData.h"#include "core/stream/bitStream.h"#include "console/consoleTypes.h"#include "gfx/gfxCubemap.h"#include "gfx/gfxDevice.h"#include "gfx/gfxTextureManager.h"#include "gfx/gfxTransformSaver.h"#include "gfx/gfxDebugEvent.h"#include "gfx/gfxAPI.h"#include "scene/sceneManager.h"#include "console/engineAPI.h"#include "math/mathUtils.h"#include "gfx/bitmap/cubemapSaver.h"IMPLEMENT_CONOBJECT( CubemapData );CubemapData::CubemapData(){   mCubemap = NULL;   for (U32 i = 0; i < 6; i++)   {      INIT_IMAGEASSET_ARRAY(CubeMapFace, i);   }   INIT_IMAGEASSET(CubeMap);}CubemapData::~CubemapData(){   mCubemap = NULL;}ConsoleDocClass( CubemapData,    "@brief Used to create static or dynamic cubemaps.\n\n"   "This object is used with Material, WaterObject, and other objects for cubemap reflections.\n\n"   "A simple declaration of a static cubemap:\n"   "@tsexample\n"   "singleton CubemapData( SkyboxCubemap )\n"   "{\n"   "   cubeFace[0] = \"./skybox_1\";\n"   "   cubeFace[1] = \"./skybox_2\";\n"   "   cubeFace[2] = \"./skybox_3\";\n"   "   cubeFace[3] = \"./skybox_4\";\n"   "   cubeFace[4] = \"./skybox_5\";\n"   "   cubeFace[5] = \"./skybox_6\";\n"   "};\n"   "@endtsexample\n"   "@note The dynamic cubemap functionality in CubemapData has been depreciated in favor of ReflectorDesc.\n"   "@see ReflectorDesc\n"   "@ingroup GFX\n" );void CubemapData::initPersistFields(){   addProtectedField( "cubeFace", TypeStringFilename, Offset(mCubeMapFaceName, CubemapData), _setCubeMapFaceData, defaultProtectedGetFn, 6,      "@brief The 6 cubemap face textures for a static cubemap.\n\n"      "They are in the following order:\n"      "  - cubeFace[0] is -X\n"      "  - cubeFace[1] is +X\n"      "  - cubeFace[2] is -Z\n"      "  - cubeFace[3] is +Z\n"      "  - cubeFace[4] is -Y\n"      "  - cubeFace[5] is +Y\n", AbstractClassRep::FIELD_HideInInspectors );   INITPERSISTFIELD_IMAGEASSET_ARRAY(CubeMapFace, 6, CubemapData, "@brief The 6 cubemap face textures for a static cubemap.\n\n"      "They are in the following order:\n"      "  - cubeFace[0] is -X\n"      "  - cubeFace[1] is +X\n"      "  - cubeFace[2] is -Z\n"      "  - cubeFace[3] is +Z\n"      "  - cubeFace[4] is -Y\n"      "  - cubeFace[5] is +Y\n");   INITPERSISTFIELD_IMAGEASSET(CubeMap, CubemapData, "@brief Cubemap dds Image Asset.\n\n");}bool CubemapData::onAdd(){   if( !Parent::onAdd() )      return false;   // Do NOT call this here as it forces every single cubemap defined to load its images, immediately, without mercy   // createMap();   return true;}void CubemapData::createMap(){   if( !mCubemap )   {       bool initSuccess = true;       //check mCubeMapFile first       if (getCubeMap() != StringTable->EmptyString())       {          mCubemap = TEXMGR->createCubemap(getCubeMap());          return;       }       else       {          for (U32 i = 0; i < 6; i++)          {             if (!_setCubeMapFace(getCubeMapFace(i), i))             {                Con::errorf("CubemapData::createMap - Failed to load texture '%s'", getCubeMapFace(i));                initSuccess = false;             }          }       }       if( initSuccess )       {           mCubemap = GFX->createCubemap();           if (mCubeMapFace == NULL || mCubeMapFace->isNull())              return;           mCubemap->initStatic(mCubeMapFace);       }   }}void CubemapData::updateFaces(){	bool initSuccess = true;	for( U32 i=0; i<6; i++ )   {      //check mCubeMapFile first      if (getCubeMap() != StringTable->EmptyString())      {         mCubemap = TEXMGR->createCubemap(getCubeMap());         return;      }      else      {         if (!_setCubeMapFace(getCubeMapFace(i), i))         {            Con::errorf("CubemapData::createMap - Failed to load texture '%s'", getCubeMapFace(i));            initSuccess = false;         }      }   }	if( initSuccess )	{		mCubemap = NULL;		mCubemap = GFX->createCubemap();		mCubemap->initStatic( mCubeMapFace );	}}void CubemapData::setCubemapFile(FileName newCubemapFile){   mCubeMapName = newCubemapFile;}void CubemapData::setCubeFaceFile(U32 index, FileName newFaceFile){   if (index >= 6)      return;   mCubeMapFaceName[index] = newFaceFile;}void CubemapData::setCubeFaceTexture(U32 index, GFXTexHandle newFaceTexture){   if (index >= 6)      return;   mCubeMapFace[index] = newFaceTexture;}DefineEngineMethod( CubemapData, updateFaces, void, (),,   "Update the assigned cubemaps faces." ){	object->updateFaces();}DefineEngineMethod( CubemapData, getFilename, const char*, (),,   "Returns the script filename of where the CubemapData object was "   "defined.  This is used by the material editor." ){   return object->getFilename();}DefineEngineMethod(CubemapData, save, void, (const char* filename, const GFXFormat format), ("", GFXFormatBC1),	"Returns the script filename of where the CubemapData object was "	"defined.  This is used by the material editor."){   if (dStrEqual(filename, ""))      filename = object->getName();   //add dds extension if needed   String finalName = String(filename);   if(!finalName.endsWith(".dds") || !finalName.endsWith(".DDS"))      finalName += String(".dds");   CubemapSaver::save(object->mCubemap, finalName, format);}
 |