mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-07-15 16:44:36 +00:00
various cleanups and fixes
basicClouds refactored null dereference fixes in guiMenuBar
This commit is contained in:
parent
eb746a1142
commit
4d980e5406
6 changed files with 104 additions and 32 deletions
|
|
@ -618,7 +618,8 @@ public:
|
||||||
AssetPtr<ImageAsset> get##name##Asset(void) { return m##name##Asset; } \
|
AssetPtr<ImageAsset> get##name##Asset(void) { return m##name##Asset; } \
|
||||||
static bool _set##name##Data(void* obj, const char* index, const char* data) { static_cast<className*>(obj)->_set##name(_getStringTable()->insert(data)); return false;}
|
static bool _set##name##Data(void* obj, const char* index, const char* data) { static_cast<className*>(obj)->_set##name(_getStringTable()->insert(data)); return false;}
|
||||||
|
|
||||||
#define DECLARE_IMAGEASSET_NET_REFACTOR(className, name, profile, mask) \
|
|
||||||
|
#define DECLARE_IMAGEASSET_NET_REFACTOR(className, name, profile, mask) \
|
||||||
private: \
|
private: \
|
||||||
AssetPtr<ImageAsset> m##name##Asset; \
|
AssetPtr<ImageAsset> m##name##Asset; \
|
||||||
public: \
|
public: \
|
||||||
|
|
@ -647,7 +648,8 @@ public:
|
||||||
inline StringTableEntry _get##name(void) const { return m##name##Asset.getAssetId(); } \
|
inline StringTableEntry _get##name(void) const { return m##name##Asset.getAssetId(); } \
|
||||||
GFXTexHandle get##name() { return m##name##Asset.notNull() ? m##name##Asset->getTexture(&profile) : NULL; } \
|
GFXTexHandle get##name() { return m##name##Asset.notNull() ? m##name##Asset->getTexture(&profile) : NULL; } \
|
||||||
AssetPtr<ImageAsset> get##name##Asset(void) { return m##name##Asset; } \
|
AssetPtr<ImageAsset> get##name##Asset(void) { return m##name##Asset; } \
|
||||||
static bool _set##name##Data(void* obj, const char* index, const char* data) { static_cast<className*>(obj)->_set##name(_getStringTable()->insert(data)); return false;}
|
static bool _set##name##Data(void* obj, const char* index, const char* data) { static_cast<className*>(obj)->_set##name(_getStringTable()->insert(data)); return false;}
|
||||||
|
|
||||||
|
|
||||||
#define INITPERSISTFIELD_IMAGEASSET_REFACTOR(name, consoleClass, docs) \
|
#define INITPERSISTFIELD_IMAGEASSET_REFACTOR(name, consoleClass, docs) \
|
||||||
addProtectedField(assetText(name, Asset), TypeImageAssetPtrRefactor, Offset(m##name##Asset, consoleClass), _set##name##Data, &defaultProtectedGetFn, assetDoc(name, asset docs.));
|
addProtectedField(assetText(name, Asset), TypeImageAssetPtrRefactor, Offset(m##name##Asset, consoleClass), _set##name##Data, &defaultProtectedGetFn, assetDoc(name, asset docs.));
|
||||||
|
|
@ -683,6 +685,39 @@ public:
|
||||||
AssetPtr<ImageAsset> get##name##Asset(const U32& index) { return m##name##Asset[index]; } \
|
AssetPtr<ImageAsset> get##name##Asset(const U32& index) { return m##name##Asset[index]; } \
|
||||||
static bool _set##name##Data(void* obj, const char* index, const char* data) { static_cast<className*>(obj)->_set##name(_getStringTable()->insert(data), dAtoi(index)); return false;}
|
static bool _set##name##Data(void* obj, const char* index, const char* data) { static_cast<className*>(obj)->_set##name(_getStringTable()->insert(data), dAtoi(index)); return false;}
|
||||||
|
|
||||||
|
|
||||||
|
#define DECLARE_IMAGEASSET_ARRAY_NET_REFACTOR(className, name, profile, max, mask) \
|
||||||
|
private: \
|
||||||
|
AssetPtr<ImageAsset> m##name##Asset[max]; \
|
||||||
|
public: \
|
||||||
|
void _set##name(StringTableEntry _in, const U32& index){ \
|
||||||
|
if(m##name##Asset[index].getAssetId() == _in) \
|
||||||
|
return; \
|
||||||
|
\
|
||||||
|
if(!AssetDatabase.isDeclaredAsset(_in)) \
|
||||||
|
{ \
|
||||||
|
StringTableEntry imageAssetId = ImageAsset::smNoImageAssetFallback; \
|
||||||
|
AssetQuery query; \
|
||||||
|
S32 foundAssetcount = AssetDatabase.findAssetLooseFile(&query, _in); \
|
||||||
|
if (foundAssetcount != 0) \
|
||||||
|
{ \
|
||||||
|
imageAssetId = query.mAssetList[0]; \
|
||||||
|
} \
|
||||||
|
m##name##Asset[index] = imageAssetId; \
|
||||||
|
} \
|
||||||
|
else \
|
||||||
|
{ \
|
||||||
|
m##name##Asset[index] = _in; \
|
||||||
|
} \
|
||||||
|
setMaskBits(mask); \
|
||||||
|
}; \
|
||||||
|
\
|
||||||
|
inline StringTableEntry _get##name(const U32& index) const { return m##name##Asset[index].getAssetId(); } \
|
||||||
|
GFXTexHandle get##name(const U32& index) { return m##name##Asset[index].notNull() ? m##name##Asset[index]->getTexture(&profile) : NULL; } \
|
||||||
|
AssetPtr<ImageAsset> get##name##Asset(const U32& index) { return m##name##Asset[index]; } \
|
||||||
|
static bool _set##name##Data(void* obj, const char* index, const char* data) { static_cast<className*>(obj)->_set##name(_getStringTable()->insert(data), dAtoi(index)); return false;}
|
||||||
|
|
||||||
|
|
||||||
#define INITPERSISTFIELD_IMAGEASSET_ARRAY_REFACTOR(name, arraySize, consoleClass, docs) \
|
#define INITPERSISTFIELD_IMAGEASSET_ARRAY_REFACTOR(name, arraySize, consoleClass, docs) \
|
||||||
addProtectedField(assetText(name, Asset), TypeImageAssetPtrRefactor, Offset(m##name##Asset, consoleClass), _set##name##Data, &defaultProtectedGetFn, arraySize, assetDoc(name, asset docs.));
|
addProtectedField(assetText(name, Asset), TypeImageAssetPtrRefactor, Offset(m##name##Asset, consoleClass), _set##name##Data, &defaultProtectedGetFn, arraySize, assetDoc(name, asset docs.));
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -88,7 +88,7 @@ if (m##name##AssetId != StringTable->EmptyString())\
|
||||||
|
|
||||||
//network send - datablock
|
//network send - datablock
|
||||||
#define PACKDATA_ASSET_ARRAY_REFACTOR(name, max)\
|
#define PACKDATA_ASSET_ARRAY_REFACTOR(name, max)\
|
||||||
for (i = 0; i < max; i++)\
|
for (U32 i = 0; i < max; i++)\
|
||||||
{\
|
{\
|
||||||
if (stream->writeFlag(m##name##Asset[i].notNull()))\
|
if (stream->writeFlag(m##name##Asset[i].notNull()))\
|
||||||
{\
|
{\
|
||||||
|
|
@ -98,7 +98,7 @@ for (i = 0; i < max; i++)\
|
||||||
|
|
||||||
//network recieve - datablock
|
//network recieve - datablock
|
||||||
#define UNPACKDATA_ASSET_ARRAY_REFACTOR(name, max)\
|
#define UNPACKDATA_ASSET_ARRAY_REFACTOR(name, max)\
|
||||||
for (i = 0; i < max; i++)\
|
for (U32 i = 0; i < max; i++)\
|
||||||
{\
|
{\
|
||||||
if (stream->readFlag())\
|
if (stream->readFlag())\
|
||||||
{\
|
{\
|
||||||
|
|
@ -106,6 +106,27 @@ for (i = 0; i < max; i++)\
|
||||||
}\
|
}\
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//network send - object-instance
|
||||||
|
#define PACK_ASSET_ARRAY_REFACTOR(netconn, name, max)\
|
||||||
|
for (U32 i = 0; i < max; i++)\
|
||||||
|
{\
|
||||||
|
if (stream->writeFlag(m##name##Asset[i].notNull()))\
|
||||||
|
{\
|
||||||
|
NetStringHandle assetIdStr = m##name##Asset[i].getAssetId();\
|
||||||
|
netconn->packNetStringHandleU(stream, assetIdStr);\
|
||||||
|
}\
|
||||||
|
}
|
||||||
|
|
||||||
|
//network recieve - object-instance
|
||||||
|
#define UNPACK_ASSET_ARRAY_REFACTOR(netconn, name, max)\
|
||||||
|
for (U32 i = 0; i < max; i++)\
|
||||||
|
{\
|
||||||
|
if (stream->readFlag())\
|
||||||
|
{\
|
||||||
|
m##name##Asset[i] = StringTable->insert(netconn->unpackNetStringHandleU(stream).getString());\
|
||||||
|
}\
|
||||||
|
}
|
||||||
|
|
||||||
#define DEF_ASSET_BINDS_REFACTOR(className,name)\
|
#define DEF_ASSET_BINDS_REFACTOR(className,name)\
|
||||||
DefineEngineMethod(className, get##name, StringTableEntry, (), , "get name")\
|
DefineEngineMethod(className, get##name, StringTableEntry, (), , "get name")\
|
||||||
{\
|
{\
|
||||||
|
|
|
||||||
|
|
@ -183,6 +183,8 @@ void SplashData::packData(BitStream* stream)
|
||||||
stream->writeRangedU32(explosion->getId(), DataBlockObjectIdFirst, DataBlockObjectIdLast);
|
stream->writeRangedU32(explosion->getId(), DataBlockObjectIdFirst, DataBlockObjectIdLast);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PACKDATA_ASSET_ARRAY_REFACTOR(Texture, NUM_TEX);
|
||||||
|
|
||||||
S32 i;
|
S32 i;
|
||||||
for( i=0; i<NUM_EMITTERS; i++ )
|
for( i=0; i<NUM_EMITTERS; i++ )
|
||||||
{
|
{
|
||||||
|
|
@ -201,8 +203,6 @@ void SplashData::packData(BitStream* stream)
|
||||||
{
|
{
|
||||||
stream->write( times[i] );
|
stream->write( times[i] );
|
||||||
}
|
}
|
||||||
|
|
||||||
PACKDATA_ASSET_ARRAY_REFACTOR(Texture, NUM_TEX);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------
|
//--------------------------------------------------------------------------
|
||||||
|
|
@ -236,6 +236,8 @@ void SplashData::unpackData(BitStream* stream)
|
||||||
explosionId = stream->readRangedU32( DataBlockObjectIdFirst, DataBlockObjectIdLast );
|
explosionId = stream->readRangedU32( DataBlockObjectIdFirst, DataBlockObjectIdLast );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
UNPACKDATA_ASSET_ARRAY_REFACTOR(Texture, NUM_TEX);
|
||||||
|
|
||||||
U32 i;
|
U32 i;
|
||||||
for( i=0; i<NUM_EMITTERS; i++ )
|
for( i=0; i<NUM_EMITTERS; i++ )
|
||||||
{
|
{
|
||||||
|
|
@ -254,8 +256,6 @@ void SplashData::unpackData(BitStream* stream)
|
||||||
{
|
{
|
||||||
stream->read( ×[i] );
|
stream->read( ×[i] );
|
||||||
}
|
}
|
||||||
|
|
||||||
UNPACKDATA_ASSET_ARRAY_REFACTOR(Texture, NUM_TEX);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------
|
//--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
|
@ -98,9 +98,6 @@ BasicClouds::BasicClouds()
|
||||||
mTexOffset[0].set( 0.5f, 0.5f );
|
mTexOffset[0].set( 0.5f, 0.5f );
|
||||||
mTexOffset[1].set( 0.5f, 0.5f );
|
mTexOffset[1].set( 0.5f, 0.5f );
|
||||||
mTexOffset[2].set( 0.5f, 0.5f );
|
mTexOffset[2].set( 0.5f, 0.5f );
|
||||||
|
|
||||||
for (U32 i=0; i< TEX_COUNT;i++)
|
|
||||||
INIT_IMAGEASSET_ARRAY(Texture, GFXStaticTextureSRGBProfile, i);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
IMPLEMENT_CO_NETOBJECT_V1( BasicClouds );
|
IMPLEMENT_CO_NETOBJECT_V1( BasicClouds );
|
||||||
|
|
@ -177,7 +174,7 @@ void BasicClouds::initPersistFields()
|
||||||
addField( "layerEnabled", TypeBool, Offset( mLayerEnabled, BasicClouds ), TEX_COUNT,
|
addField( "layerEnabled", TypeBool, Offset( mLayerEnabled, BasicClouds ), TEX_COUNT,
|
||||||
"Enable or disable rendering of this layer." );
|
"Enable or disable rendering of this layer." );
|
||||||
|
|
||||||
INITPERSISTFIELD_IMAGEASSET_ARRAY(Texture, TEX_COUNT, BasicClouds, "Texture for this layer.");
|
INITPERSISTFIELD_IMAGEASSET_ARRAY_REFACTOR(Texture, TEX_COUNT, BasicClouds, "Texture for this layer.");
|
||||||
|
|
||||||
addField( "texScale", TypeF32, Offset( mTexScale, BasicClouds ), TEX_COUNT,
|
addField( "texScale", TypeF32, Offset( mTexScale, BasicClouds ), TEX_COUNT,
|
||||||
"Texture repeat for this layer." );
|
"Texture repeat for this layer." );
|
||||||
|
|
@ -215,12 +212,11 @@ U32 BasicClouds::packUpdate( NetConnection *conn, U32 mask, BitStream *stream )
|
||||||
{
|
{
|
||||||
U32 retMask = Parent::packUpdate( conn, mask, stream );
|
U32 retMask = Parent::packUpdate( conn, mask, stream );
|
||||||
|
|
||||||
|
PACK_ASSET_ARRAY_REFACTOR(conn, Texture, TEX_COUNT)
|
||||||
|
|
||||||
for ( U32 i = 0; i < TEX_COUNT; i++ )
|
for ( U32 i = 0; i < TEX_COUNT; i++ )
|
||||||
{
|
{
|
||||||
stream->writeFlag( mLayerEnabled[i] );
|
stream->writeFlag( mLayerEnabled[i] );
|
||||||
|
|
||||||
PACK_ASSET_ARRAY(conn, Texture, i);
|
|
||||||
|
|
||||||
stream->write( mTexScale[i] );
|
stream->write( mTexScale[i] );
|
||||||
mathWrite( *stream, mTexDirection[i] );
|
mathWrite( *stream, mTexDirection[i] );
|
||||||
stream->write( mTexSpeed[i] );
|
stream->write( mTexSpeed[i] );
|
||||||
|
|
@ -236,12 +232,11 @@ void BasicClouds::unpackUpdate( NetConnection *conn, BitStream *stream )
|
||||||
{
|
{
|
||||||
Parent::unpackUpdate( conn, stream );
|
Parent::unpackUpdate( conn, stream );
|
||||||
|
|
||||||
|
UNPACK_ASSET_ARRAY_REFACTOR(conn, Texture, TEX_COUNT)
|
||||||
|
|
||||||
for ( U32 i = 0; i < TEX_COUNT; i++ )
|
for ( U32 i = 0; i < TEX_COUNT; i++ )
|
||||||
{
|
{
|
||||||
mLayerEnabled[i] = stream->readFlag();
|
mLayerEnabled[i] = stream->readFlag();
|
||||||
|
|
||||||
UNPACK_ASSET_ARRAY(conn, Texture, i);
|
|
||||||
|
|
||||||
stream->read( &mTexScale[i] );
|
stream->read( &mTexScale[i] );
|
||||||
mathRead( *stream, &mTexDirection[i] );
|
mathRead( *stream, &mTexDirection[i] );
|
||||||
stream->read( &mTexSpeed[i] );
|
stream->read( &mTexSpeed[i] );
|
||||||
|
|
@ -315,14 +310,14 @@ void BasicClouds::renderObject( ObjectRenderInst *ri, SceneRenderState *state, B
|
||||||
|
|
||||||
for ( U32 i = 0; i < TEX_COUNT; i++ )
|
for ( U32 i = 0; i < TEX_COUNT; i++ )
|
||||||
{
|
{
|
||||||
if ( !mLayerEnabled[i] )
|
if ( !mLayerEnabled[i] || mTextureAsset[i].isNull())
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
mShaderConsts->setSafe( mTexScaleSC, mTexScale[i] );
|
mShaderConsts->setSafe( mTexScaleSC, mTexScale[i] );
|
||||||
mShaderConsts->setSafe( mTexDirectionSC, mTexDirection[i] * mTexSpeed[i] );
|
mShaderConsts->setSafe( mTexDirectionSC, mTexDirection[i] * mTexSpeed[i] );
|
||||||
mShaderConsts->setSafe( mTexOffsetSC, mTexOffset[i] );
|
mShaderConsts->setSafe( mTexOffsetSC, mTexOffset[i] );
|
||||||
|
|
||||||
GFX->setTexture( mDiffuseMapSC->getSamplerRegister(), mTexture[i] );
|
GFX->setTexture( mDiffuseMapSC->getSamplerRegister(), getTexture(i) );
|
||||||
GFX->setVertexBuffer( mVB[i] );
|
GFX->setVertexBuffer( mVB[i] );
|
||||||
|
|
||||||
GFX->drawIndexedPrimitive( GFXTriangleList, 0, 0, smVertCount, 0, smTriangleCount );
|
GFX->drawIndexedPrimitive( GFXTriangleList, 0, 0, smVertCount, 0, smTriangleCount );
|
||||||
|
|
@ -337,13 +332,11 @@ void BasicClouds::_initTexture()
|
||||||
{
|
{
|
||||||
for ( U32 i = 0; i < TEX_COUNT; i++ )
|
for ( U32 i = 0; i < TEX_COUNT; i++ )
|
||||||
{
|
{
|
||||||
if ( !mLayerEnabled[i] )
|
if ( mLayerEnabled[i] && mTextureAsset[i].notNull())
|
||||||
{
|
{
|
||||||
mTexture[i] = NULL;
|
// load the resource.
|
||||||
continue;
|
getTexture(i);
|
||||||
}
|
}
|
||||||
|
|
||||||
_setTexture(getTexture(i), i);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -94,9 +94,8 @@ protected:
|
||||||
static U32 smVertCount;
|
static U32 smVertCount;
|
||||||
static U32 smTriangleCount;
|
static U32 smTriangleCount;
|
||||||
|
|
||||||
DECLARE_IMAGEASSET_ARRAY(BasicClouds, Texture, TEX_COUNT, onTextureChanged);
|
DECLARE_IMAGEASSET_ARRAY_NET_REFACTOR(BasicClouds, Texture, GFXStaticTextureSRGBProfile, TEX_COUNT, -1)
|
||||||
DECLARE_IMAGEASSET_ARRAY_NET_SETGET(BasicClouds, Texture, -1);
|
|
||||||
void onTextureChanged() {}
|
|
||||||
GFXStateBlockRef mStateblock;
|
GFXStateBlockRef mStateblock;
|
||||||
|
|
||||||
GFXShaderRef mShader;
|
GFXShaderRef mShader;
|
||||||
|
|
|
||||||
|
|
@ -515,10 +515,22 @@ void GuiMenuBar::processTick()
|
||||||
|
|
||||||
void GuiMenuBar::insert(SimObject* pObject, S32 pos)
|
void GuiMenuBar::insert(SimObject* pObject, S32 pos)
|
||||||
{
|
{
|
||||||
PopupMenu* menu = dynamic_cast<PopupMenu*>(pObject);
|
PopupMenu* menu = nullptr;
|
||||||
|
if (pObject != nullptr)
|
||||||
|
{
|
||||||
|
menu = dynamic_cast<PopupMenu*>(pObject);
|
||||||
|
}
|
||||||
|
|
||||||
if (menu == nullptr)
|
if (menu == nullptr)
|
||||||
{
|
{
|
||||||
Con::errorf("GuiMenuBar::insert() - attempted to insert non-popupMenu object: %d", pObject->getId());
|
if (pObject != nullptr)
|
||||||
|
{
|
||||||
|
Con::errorf("GuiMenuBar::insert() - attempted to insert non-popupMenu object: %d", pObject->getId());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Con::errorf("GuiMenuBar::insert() - attempted to insert a nullptr object.");
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -541,10 +553,22 @@ void GuiMenuBar::insert(SimObject* pObject, S32 pos)
|
||||||
|
|
||||||
void GuiMenuBar::remove(SimObject* pObject)
|
void GuiMenuBar::remove(SimObject* pObject)
|
||||||
{
|
{
|
||||||
PopupMenu* menu = dynamic_cast<PopupMenu*>(pObject);
|
PopupMenu* menu = nullptr;
|
||||||
|
if (pObject != nullptr)
|
||||||
|
{
|
||||||
|
menu = dynamic_cast<PopupMenu*>(pObject);
|
||||||
|
}
|
||||||
|
|
||||||
if (menu == nullptr)
|
if (menu == nullptr)
|
||||||
{
|
{
|
||||||
Con::errorf("GuiMenuBar::remove() - attempted to remove non-popupMenu object: %d", pObject->getId());
|
if (pObject != nullptr)
|
||||||
|
{
|
||||||
|
Con::errorf("GuiMenuBar::insert() - attempted to insert non-popupMenu object: %d", pObject->getId());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Con::errorf("GuiMenuBar::insert() - attempted to insert a nullptr object.");
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue