cloud layer example

This commit is contained in:
marauder2k7 2024-12-21 12:23:57 +00:00
parent eca0820134
commit 24b374f545
4 changed files with 45 additions and 18 deletions

View file

@ -181,6 +181,17 @@ const String ImageAsset::mErrCodeStrings[] =
"UnKnown" "UnKnown"
}; };
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
ImageAsset::ImageAsset() :
mImageFile(StringTable->EmptyString()),
mUseMips(true),
mIsHDRImage(false),
mImageType(Albedo),
mTextureHandle(NULL)
{
mLoadedState = AssetErrCode::NotLoaded;
}
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
ImageAsset::~ImageAsset() ImageAsset::~ImageAsset()
@ -618,7 +629,7 @@ void GuiInspectorTypeImageAssetPtr::consoleInit()
{ {
Parent::consoleInit(); Parent::consoleInit();
ConsoleBaseType::getType(TypeImageAssetPtr)->setInspectorFieldType("GuiInspectorTypeImageAssetPtr"); ConsoleBaseType::getType(TypeImageAssetPtrRefactor)->setInspectorFieldType("GuiInspectorTypeImageAssetPtr");
} }
GuiControl* GuiInspectorTypeImageAssetPtr::constructEditControl() GuiControl* GuiInspectorTypeImageAssetPtr::constructEditControl()

View file

@ -592,7 +592,26 @@ if (m##name##AssetId[index] != StringTable->EmptyString())\
private: \ private: \
AssetPtr<ImageAsset> m##name##Asset; \ AssetPtr<ImageAsset> m##name##Asset; \
public: \ public: \
void _set##name(StringTableEntry _in); \ void _set##name(StringTableEntry _in){ \
if(m##name##Asset.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 = imageAssetId; \
} \
else \
{ \
m##name##Asset = _in; \
} \
}; \
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; } \

View file

@ -112,8 +112,6 @@ CloudLayer::CloudLayer()
mTexOffset[0] = mTexOffset[1] = mTexOffset[2] = Point2F::Zero; mTexOffset[0] = mTexOffset[1] = mTexOffset[2] = Point2F::Zero;
mHeight = 4.0f; mHeight = 4.0f;
INIT_ASSET(Texture);
} }
IMPLEMENT_CO_NETOBJECT_V1( CloudLayer ); IMPLEMENT_CO_NETOBJECT_V1( CloudLayer );
@ -131,8 +129,6 @@ bool CloudLayer::onAdd()
addToScene(); addToScene();
LOAD_IMAGEASSET(Texture);
if ( isClientObject() ) if ( isClientObject() )
{ {
_initBuffers(); _initBuffers();
@ -194,7 +190,7 @@ void CloudLayer::initPersistFields()
docsURL; docsURL;
addGroup( "CloudLayer" ); addGroup( "CloudLayer" );
INITPERSISTFIELD_IMAGEASSET(Texture, CloudLayer, "An RGBA texture which should contain normals and opacity (density)."); INITPERSISTFIELD_IMAGEASSET_REFACTOR(Texture, CloudLayer, "An RGBA texture which should contain normals and opacity (density).")
addArray( "Textures", TEX_COUNT ); addArray( "Textures", TEX_COUNT );
@ -243,7 +239,9 @@ U32 CloudLayer::packUpdate( NetConnection *conn, U32 mask, BitStream *stream )
{ {
U32 retMask = Parent::packUpdate( conn, mask, stream ); U32 retMask = Parent::packUpdate( conn, mask, stream );
PACK_ASSET(conn, Texture); if (stream->writeFlag(mTextureAsset.notNull())) {
NetStringHandle assetIdStr = mTextureAsset.getAssetId(); conn->packNetStringHandleU(stream, assetIdStr);
}
for ( U32 i = 0; i < TEX_COUNT; i++ ) for ( U32 i = 0; i < TEX_COUNT; i++ )
{ {
@ -265,10 +263,9 @@ void CloudLayer::unpackUpdate( NetConnection *conn, BitStream *stream )
{ {
Parent::unpackUpdate( conn, stream ); Parent::unpackUpdate( conn, stream );
UNPACK_ASSET(conn, Texture); if (stream->readFlag()) {
mTextureAsset.setAssetId(_getStringTable()->insert(conn->unpackNetStringHandleU(stream).getString()));
if(mTextureAssetId != StringTable->EmptyString()) }
mTextureAsset = mTextureAssetId;
for ( U32 i = 0; i < TEX_COUNT; i++ ) for ( U32 i = 0; i < TEX_COUNT; i++ )
{ {
@ -334,7 +331,7 @@ void CloudLayer::renderObject( ObjectRenderInst *ri, SceneRenderState *state, Ba
{ {
GFXTransformSaver saver; GFXTransformSaver saver;
if (!mTextureAsset || !mTextureAsset->isAssetValid()) if (!mTextureAsset)
return; return;
const Point3F &camPos = state->getCameraPosition(); const Point3F &camPos = state->getCameraPosition();
@ -385,7 +382,7 @@ void CloudLayer::renderObject( ObjectRenderInst *ri, SceneRenderState *state, Ba
mShaderConsts->setSafe( mExposureSC, mExposure ); mShaderConsts->setSafe( mExposureSC, mExposure );
GFX->setTexture( mNormalHeightMapSC->getSamplerRegister(), getTextureResource()); GFX->setTexture( mNormalHeightMapSC->getSamplerRegister(), mTextureAsset->getTexture(&GFXStaticTextureSRGBProfile));
GFX->setVertexBuffer( mVB ); GFX->setVertexBuffer( mVB );
GFX->setPrimitiveBuffer( mPB ); GFX->setPrimitiveBuffer( mPB );

View file

@ -61,7 +61,6 @@ class CloudLayer : public SceneObject
}; };
#define TEX_COUNT 3 #define TEX_COUNT 3
public: public:
CloudLayer(); CloudLayer();
@ -97,8 +96,9 @@ protected:
static U32 smVertCount; static U32 smVertCount;
static U32 smTriangleCount; static U32 smTriangleCount;
DECLARE_IMAGEASSET(CloudLayer, Texture, onImageChanged, GFXStaticTextureSRGBProfile); public:
DECLARE_ASSET_NET_SETGET(CloudLayer, Texture, CloudLayerMask);
DECLARE_IMAGEASSET_REFACTOR(CloudLayer,Texture, GFXStaticTextureSRGBProfile)
GFXShaderRef mShader; GFXShaderRef mShader;