DDS cubemap support

This commit is contained in:
rextimmy 2017-07-07 15:59:02 +10:00
parent e3145d8f5d
commit 8bdccb3ff3
2 changed files with 50 additions and 17 deletions

View file

@ -27,13 +27,14 @@
#include "console/consoleTypes.h" #include "console/consoleTypes.h"
#include "gfx/gfxCubemap.h" #include "gfx/gfxCubemap.h"
#include "gfx/gfxDevice.h" #include "gfx/gfxDevice.h"
#include "gfx/gfxTextureManager.h"
#include "gfx/gfxTransformSaver.h" #include "gfx/gfxTransformSaver.h"
#include "gfx/gfxDebugEvent.h" #include "gfx/gfxDebugEvent.h"
#include "gfx/gfxAPI.h"
#include "scene/sceneManager.h" #include "scene/sceneManager.h"
#include "console/engineAPI.h" #include "console/engineAPI.h"
#include "math/mathUtils.h" #include "math/mathUtils.h"
IMPLEMENT_CONOBJECT( CubemapData ); IMPLEMENT_CONOBJECT( CubemapData );
CubemapData::CubemapData() CubemapData::CubemapData()
@ -76,7 +77,10 @@ void CubemapData::initPersistFields()
" - cubeFace[3] is +Z\n" " - cubeFace[3] is +Z\n"
" - cubeFace[4] is -Y\n" " - cubeFace[4] is -Y\n"
" - cubeFace[5] 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() bool CubemapData::onAdd()
@ -95,21 +99,31 @@ void CubemapData::createMap()
if( !mCubemap ) if( !mCubemap )
{ {
bool initSuccess = true; bool initSuccess = true;
//check mCubeMapFile first
for( U32 i=0; i<6; i++ ) if (!mCubeMapFile.isEmpty())
{ {
if( !mCubeFaceFile[i].isEmpty() ) mCubemap = TEXMGR->createCubemap(mCubeMapFile);
{ return;
if(!mCubeFace[i].set(mCubeFaceFile[i], &GFXStaticTextureSRGBProfile, avar("%s() - mCubeFace[%d] (line %d)", __FUNCTION__, i, __LINE__) )) }
{ 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()); Con::errorf("CubemapData::createMap - Failed to load texture '%s'", mCubeFaceFile[i].c_str());
initSuccess = false; initSuccess = false;
} }
} }
}
} }
if( initSuccess ) if( initSuccess )
{ {
mCubemap = GFX->createCubemap(); mCubemap = GFX->createCubemap();
if (mCubeFace == NULL || mCubeFace->isNull()) return;
mCubemap->initStatic( mCubeFace ); mCubemap->initStatic( mCubeFace );
} }
} }
@ -121,12 +135,21 @@ void CubemapData::updateFaces()
for( U32 i=0; i<6; i++ ) 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; if (!mCubeFace[i].set(mCubeFaceFile[i], &GFXStaticTextureProfile, avar("%s() - mCubeFace[%d] (line %d)", __FUNCTION__, i, __LINE__)))
Con::errorf("CubemapData::createMap - Failed to load texture '%s'", mCubeFaceFile[i].c_str()); {
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, (),, DefineEngineMethod( CubemapData, updateFaces, void, (),,
"Update the assigned cubemaps faces." ) "Update the assigned cubemaps faces." )
{ {
@ -151,4 +182,4 @@ DefineEngineMethod( CubemapData, getFilename, const char*, (),,
"defined. This is used by the material editor." ) "defined. This is used by the material editor." )
{ {
return object->getFilename(); return object->getFilename();
} }

View file

@ -63,8 +63,11 @@ public:
// Update a static cubemap @ pos // Update a static cubemap @ pos
void updateFaces(); void updateFaces();
protected: void setCubeFaceFile(U32 index, FileName newFaceFile);
GFXTexHandle* getCubeMapFace(U32 faceIdx) { return &mCubeFace[faceIdx]; }
protected:
FileName mCubeMapFile;
FileName mCubeFaceFile[6]; FileName mCubeFaceFile[6];
GFXTexHandle mCubeFace[6]; GFXTexHandle mCubeFace[6];
@ -73,4 +76,3 @@ protected:
}; };
#endif // CUBEMAPDATA #endif // CUBEMAPDATA