mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-03-03 04:20:30 +00:00
Merge pull request #721 from Azaezel/CubemapCleanup
deprecated functionality. T3D handles this in the reflector class.
This commit is contained in:
commit
561e26ea07
2 changed files with 16 additions and 160 deletions
|
|
@ -39,14 +39,6 @@ IMPLEMENT_CONOBJECT( CubemapData );
|
|||
CubemapData::CubemapData()
|
||||
{
|
||||
mCubemap = NULL;
|
||||
mDynamic = false;
|
||||
mDynamicSize = 512;
|
||||
mDynamicNearDist = 0.1f;
|
||||
mDynamicFarDist = 100.0f;
|
||||
mDynamicObjectTypeMask = 0;
|
||||
#ifdef INIT_HACK
|
||||
mInit = false;
|
||||
#endif
|
||||
}
|
||||
|
||||
CubemapData::~CubemapData()
|
||||
|
|
@ -84,22 +76,6 @@ void CubemapData::initPersistFields()
|
|||
" - cubeFace[3] is +Z\n"
|
||||
" - cubeFace[4] is -Y\n"
|
||||
" - cubeFace[5] is +Y\n" );
|
||||
|
||||
addField("dynamic", TypeBool, Offset(mDynamic, CubemapData),
|
||||
"Set to true if this is a dynamic cubemap. The default is false." );
|
||||
|
||||
addField("dynamicSize", TypeS32, Offset(mDynamicSize, CubemapData),
|
||||
"The size of each dynamic cubemap face in pixels." );
|
||||
|
||||
addField("dynamicNearDist", TypeF32, Offset(mDynamicNearDist, CubemapData),
|
||||
"The near clip distance used when rendering to the dynamic cubemap." );
|
||||
|
||||
addField("dynamicFarDist", TypeF32, Offset(mDynamicFarDist, CubemapData),
|
||||
"The far clip distance used when rendering to the dynamic cubemap." );
|
||||
|
||||
addField("dynamicObjectTypeMask", TypeS32, Offset(mDynamicObjectTypeMask, CubemapData),
|
||||
"The typemask used to filter the objects rendered to the dynamic cubemap." );
|
||||
|
||||
Parent::initPersistFields();
|
||||
}
|
||||
|
||||
|
|
@ -118,136 +94,27 @@ void CubemapData::createMap()
|
|||
{
|
||||
if( !mCubemap )
|
||||
{
|
||||
if( mDynamic )
|
||||
{
|
||||
mCubemap = GFX->createCubemap();
|
||||
mCubemap->initDynamic( mDynamicSize );
|
||||
mDepthBuff = GFXTexHandle( mDynamicSize, mDynamicSize, GFXFormatD24S8,
|
||||
&GFXDefaultZTargetProfile, avar("%s() - mDepthBuff (line %d)", __FUNCTION__, __LINE__));
|
||||
mRenderTarget = GFX->allocRenderToTextureTarget();
|
||||
}
|
||||
else
|
||||
{
|
||||
bool initSuccess = true;
|
||||
|
||||
for( U32 i=0; i<6; i++ )
|
||||
{
|
||||
if( !mCubeFaceFile[i].isEmpty() )
|
||||
{
|
||||
bool initSuccess = true;
|
||||
|
||||
for( U32 i=0; i<6; i++ )
|
||||
{
|
||||
if( !mCubeFaceFile[i].isEmpty() )
|
||||
{
|
||||
if(!mCubeFace[i].set(mCubeFaceFile[i], &GFXDefaultStaticDiffuseProfile, 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());
|
||||
initSuccess = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if( initSuccess )
|
||||
{
|
||||
mCubemap = GFX->createCubemap();
|
||||
mCubemap->initStatic( mCubeFace );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if( initSuccess )
|
||||
{
|
||||
mCubemap = GFX->createCubemap();
|
||||
mCubemap->initStatic( mCubeFace );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CubemapData::updateDynamic(SceneManager* sm, const Point3F& pos)
|
||||
{
|
||||
AssertFatal(mDynamic, "This is not a dynamic cubemap!");
|
||||
|
||||
GFXDEBUGEVENT_SCOPE( CubemapData_updateDynamic, ColorI::WHITE );
|
||||
|
||||
#ifdef INIT_HACK
|
||||
if( mInit ) return;
|
||||
mInit = true;
|
||||
#endif
|
||||
|
||||
GFX->pushActiveRenderTarget();
|
||||
mRenderTarget->attachTexture(GFXTextureTarget::DepthStencil, mDepthBuff );
|
||||
|
||||
// store current matrices
|
||||
GFXTransformSaver saver;
|
||||
F32 oldVisibleDist = sm->getVisibleDistance();
|
||||
|
||||
// set projection to 90 degrees vertical and horizontal
|
||||
{
|
||||
F32 left, right, top, bottom;
|
||||
MathUtils::makeFrustum( &left, &right, &top, &bottom, M_HALFPI_F, 1.0f, mDynamicNearDist );
|
||||
GFX->setFrustum( left, right, bottom, top, mDynamicNearDist, mDynamicFarDist );
|
||||
}
|
||||
sm->setVisibleDistance(mDynamicFarDist);
|
||||
|
||||
// We don't use a special clipping projection, but still need to initialize
|
||||
// this for objects like SkyBox which will use it during a reflect pass.
|
||||
gClientSceneGraph->setNonClipProjection( (MatrixF&) GFX->getProjectionMatrix() );
|
||||
|
||||
// Loop through the six faces of the cube map.
|
||||
for(U32 i=0; i<6; i++)
|
||||
{
|
||||
// Standard view that will be overridden below.
|
||||
VectorF vLookatPt(0.0f, 0.0f, 0.0f), vUpVec(0.0f, 0.0f, 0.0f), vRight(0.0f, 0.0f, 0.0f);
|
||||
|
||||
switch( i )
|
||||
{
|
||||
case 0 : // D3DCUBEMAP_FACE_POSITIVE_X:
|
||||
vLookatPt = VectorF( 1.0f, 0.0f, 0.0f );
|
||||
vUpVec = VectorF( 0.0f, 1.0f, 0.0f );
|
||||
break;
|
||||
case 1 : // D3DCUBEMAP_FACE_NEGATIVE_X:
|
||||
vLookatPt = VectorF( -1.0f, 0.0f, 0.0f );
|
||||
vUpVec = VectorF( 0.0f, 1.0f, 0.0f );
|
||||
break;
|
||||
case 2 : // D3DCUBEMAP_FACE_POSITIVE_Y:
|
||||
vLookatPt = VectorF( 0.0f, 1.0f, 0.0f );
|
||||
vUpVec = VectorF( 0.0f, 0.0f,-1.0f );
|
||||
break;
|
||||
case 3 : // D3DCUBEMAP_FACE_NEGATIVE_Y:
|
||||
vLookatPt = VectorF( 0.0f, -1.0f, 0.0f );
|
||||
vUpVec = VectorF( 0.0f, 0.0f, 1.0f );
|
||||
break;
|
||||
case 4 : // D3DCUBEMAP_FACE_POSITIVE_Z:
|
||||
vLookatPt = VectorF( 0.0f, 0.0f, 1.0f );
|
||||
vUpVec = VectorF( 0.0f, 1.0f, 0.0f );
|
||||
break;
|
||||
case 5: // D3DCUBEMAP_FACE_NEGATIVE_Z:
|
||||
vLookatPt = VectorF( 0.0f, 0.0f, -1.0f );
|
||||
vUpVec = VectorF( 0.0f, 1.0f, 0.0f );
|
||||
break;
|
||||
}
|
||||
|
||||
// create camera matrix
|
||||
VectorF cross = mCross( vUpVec, vLookatPt );
|
||||
cross.normalizeSafe();
|
||||
|
||||
MatrixF matView(true);
|
||||
matView.setColumn( 0, cross );
|
||||
matView.setColumn( 1, vLookatPt );
|
||||
matView.setColumn( 2, vUpVec );
|
||||
matView.setPosition( pos );
|
||||
matView.inverse();
|
||||
|
||||
GFX->pushWorldMatrix();
|
||||
GFX->setWorldMatrix(matView);
|
||||
|
||||
mRenderTarget->attachTexture( GFXTextureTarget::Color0, mCubemap, i );
|
||||
GFX->setActiveRenderTarget( mRenderTarget );
|
||||
GFX->clear( GFXClearStencil | GFXClearTarget | GFXClearZBuffer, ColorI( 64, 64, 64 ), 1.f, 0 );
|
||||
|
||||
// render scene
|
||||
sm->renderScene( SPT_Reflect, mDynamicObjectTypeMask );
|
||||
|
||||
// Resolve render target for each face
|
||||
mRenderTarget->resolve();
|
||||
GFX->popWorldMatrix();
|
||||
}
|
||||
|
||||
// restore render surface and depth buffer
|
||||
GFX->popActiveRenderTarget();
|
||||
|
||||
mRenderTarget->attachTexture(GFXTextureTarget::Color0, NULL);
|
||||
sm->setVisibleDistance(oldVisibleDist);
|
||||
}
|
||||
|
||||
void CubemapData::updateFaces()
|
||||
{
|
||||
bool initSuccess = true;
|
||||
|
|
|
|||
|
|
@ -60,16 +60,8 @@ public:
|
|||
// Force creation of cubemap
|
||||
void createMap();
|
||||
|
||||
// Update a dynamic cubemap @ pos
|
||||
void updateDynamic(SceneManager* sm, const Point3F& pos);
|
||||
// Update a static cubemap @ pos
|
||||
void updateFaces();
|
||||
|
||||
// Dynamic cube map support
|
||||
bool mDynamic;
|
||||
U32 mDynamicSize;
|
||||
F32 mDynamicNearDist;
|
||||
F32 mDynamicFarDist;
|
||||
U32 mDynamicObjectTypeMask;
|
||||
|
||||
protected:
|
||||
|
||||
|
|
@ -78,9 +70,6 @@ protected:
|
|||
|
||||
GFXTexHandle mDepthBuff;
|
||||
GFXTextureTargetRef mRenderTarget;
|
||||
#ifdef INIT_HACK
|
||||
bool mInit;
|
||||
#endif
|
||||
};
|
||||
|
||||
#endif // CUBEMAPDATA
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue