소스 검색

DDS cubemap support

rextimmy 8 년 전
부모
커밋
a2fa9838e5
2개의 변경된 파일50개의 추가작업 그리고 17개의 파일을 삭제
  1. 46 15
      Engine/source/gfx/sim/cubemapData.cpp
  2. 4 2
      Engine/source/gfx/sim/cubemapData.h

+ 46 - 15
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();
-}
+}

+ 4 - 2
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
-