diff --git a/Engine/source/gfx/sim/cubemapData.cpp b/Engine/source/gfx/sim/cubemapData.cpp index c967bf2c3..35e921b5b 100644 --- a/Engine/source/gfx/sim/cubemapData.cpp +++ b/Engine/source/gfx/sim/cubemapData.cpp @@ -27,13 +27,14 @@ #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" - IMPLEMENT_CONOBJECT( CubemapData ); CubemapData::CubemapData() @@ -76,7 +77,10 @@ void CubemapData::initPersistFields() " - cubeFace[3] is +Z\n" " - cubeFace[4] is -Y\n" " - cubeFace[5] is +Y\n" ); - Parent::initPersistFields(); + + addField("cubeMap", TypeStringFilename, Offset(mCubeMapFile, CubemapData), + "@brief Cubemap dds file.\n\n"); + } bool CubemapData::onAdd() @@ -95,21 +99,31 @@ void CubemapData::createMap() if( !mCubemap ) { bool initSuccess = true; - - for( U32 i=0; i<6; i++ ) + //check mCubeMapFile first + if (!mCubeMapFile.isEmpty()) { - if( !mCubeFaceFile[i].isEmpty() ) - { - if(!mCubeFace[i].set(mCubeFaceFile[i], &GFXStaticTextureSRGBProfile, avar("%s() - mCubeFace[%d] (line %d)", __FUNCTION__, i, __LINE__) )) - { + mCubemap = TEXMGR->createCubemap(mCubeMapFile); + return; + } + else + { + for (U32 i = 0; i < 6; i++) + { + if (!mCubeFaceFile[i].isEmpty()) + { + if (!mCubeFace[i].set(mCubeFaceFile[i], &GFXStaticTextureSRGBProfile, avar("%s() - mCubeFace[%d] (line %d)", __FUNCTION__, i, __LINE__))) + { Con::errorf("CubemapData::createMap - Failed to load texture '%s'", mCubeFaceFile[i].c_str()); initSuccess = false; - } - } + } + } + } } + if( initSuccess ) { mCubemap = GFX->createCubemap(); + if (mCubeFace == NULL || mCubeFace->isNull()) return; mCubemap->initStatic( mCubeFace ); } } @@ -121,12 +135,21 @@ void CubemapData::updateFaces() for( U32 i=0; i<6; i++ ) { - if( !mCubeFaceFile[i].isEmpty() ) + //check mCubeMapFile first + if (!mCubeMapFile.isEmpty()) { - if(!mCubeFace[i].set(mCubeFaceFile[i], &GFXStaticTextureProfile, avar("%s() - mCubeFace[%d] (line %d)", __FUNCTION__, i, __LINE__) )) + mCubemap = TEXMGR->createCubemap(mCubeMapFile); + return; + } + else + { + if (!mCubeFaceFile[i].isEmpty()) { - initSuccess = false; - Con::errorf("CubemapData::createMap - Failed to load texture '%s'", mCubeFaceFile[i].c_str()); + if (!mCubeFace[i].set(mCubeFaceFile[i], &GFXStaticTextureProfile, avar("%s() - mCubeFace[%d] (line %d)", __FUNCTION__, i, __LINE__))) + { + initSuccess = false; + Con::errorf("CubemapData::createMap - Failed to load texture '%s'", mCubeFaceFile[i].c_str()); + } } } } @@ -140,6 +163,14 @@ void CubemapData::updateFaces() } } +void CubemapData::setCubeFaceFile(U32 index, FileName newFaceFile) +{ + if (index >= 6) + return; + + mCubeFaceFile[index] = newFaceFile; +} + DefineEngineMethod( CubemapData, updateFaces, void, (),, "Update the assigned cubemaps faces." ) { @@ -151,4 +182,4 @@ DefineEngineMethod( CubemapData, getFilename, const char*, (),, "defined. This is used by the material editor." ) { return object->getFilename(); -} \ No newline at end of file +} diff --git a/Engine/source/gfx/sim/cubemapData.h b/Engine/source/gfx/sim/cubemapData.h index cd0560ac0..981b78539 100644 --- a/Engine/source/gfx/sim/cubemapData.h +++ b/Engine/source/gfx/sim/cubemapData.h @@ -63,8 +63,11 @@ public: // Update a static cubemap @ pos void updateFaces(); -protected: + void setCubeFaceFile(U32 index, FileName newFaceFile); + GFXTexHandle* getCubeMapFace(U32 faceIdx) { return &mCubeFace[faceIdx]; } +protected: + FileName mCubeMapFile; FileName mCubeFaceFile[6]; GFXTexHandle mCubeFace[6]; @@ -73,4 +76,3 @@ protected: }; #endif // CUBEMAPDATA -