// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 #pragma once #include "MaxKrakatoaReferenceTarget.h" #include "Render Elements\IMaxKrakatoaRenderElement.h" #include template class MaxKrakatoaRenderElement : public MaxKrakatoaReferenceTarget, public IMaxKrakatoaRenderElement { protected: enum { kEnabled, kElementName, kBitmap, kDoFilter, kMaxKrakatoaRenderElementLastParamNum // Must be last element in this enum }; static void DefineParamBlock( ParamBlockDesc2* pParamDesc ); void write_back( krakatoa::render_element_interface& elem ); public: MaxKrakatoaRenderElement(); virtual ~MaxKrakatoaRenderElement(); // From Animatable virtual BaseInterface* GetInterface( Interface_ID id ); // From IRenderElement virtual void SetEnabled( BOOL enabled ); virtual BOOL IsEnabled() const; virtual void SetFilterEnabled( BOOL filterEnabled ); virtual BOOL IsFilterEnabled() const; virtual BOOL BlendOnMultipass() const; virtual BOOL AtmosphereApplied() const; virtual BOOL ShadowsApplied() const; virtual void SetElementName( const MCHAR* newName ); virtual const MCHAR* ElementName() const; virtual void SetPBBitmap( PBBitmap*& pPBBitmap ) const; virtual void GetPBBitmap( PBBitmap*& pPBBitmap ) const; virtual void* GetInterface( ULONG id ); virtual void ReleaseInterface( ULONG id, void* i ); #if MAX_RELEASE < 12000 virtual void SetElementName( TCHAR* name ) { SetElementName( (const TCHAR*)name ); } #endif virtual BOOL SetDlgThing( IRenderElementParamDlg* dlg ); virtual IRenderElementParamDlg* CreateParamDialog( IRendParams* ip ); }; template void MaxKrakatoaRenderElement::DefineParamBlock( ParamBlockDesc2* pParamDesc ) { pParamDesc->AddParam( kEnabled, _T("enabled"), TYPE_BOOL, P_RESET_DEFAULT, 0, p_end ); pParamDesc->ParamOption( kEnabled, p_default, TRUE, p_end ); pParamDesc->AddParam( kElementName, _T("elementName"), TYPE_STRING, P_RESET_DEFAULT, 0, p_end ); pParamDesc->AddParam( kBitmap, _T("bitmap"), TYPE_BITMAP, P_RESET_DEFAULT, 0, p_end ); pParamDesc->AddParam( kDoFilter, _T("doFilter"), TYPE_BOOL, P_RESET_DEFAULT, 0, p_end ); pParamDesc->ParamOption( kDoFilter, p_default, TRUE, p_end ); } template void MaxKrakatoaRenderElement::write_back( krakatoa::render_element_interface& elem ) { PBBitmap* pPBBmp = NULL; GetPBBitmap( pPBBmp ); if( pPBBmp && pPBBmp->bm ) elem.get_framebuffer().to_3dsMaxBitmap( pPBBmp->bm ); } template MaxKrakatoaRenderElement::MaxKrakatoaRenderElement() {} template MaxKrakatoaRenderElement::~MaxKrakatoaRenderElement() {} template BaseInterface* MaxKrakatoaRenderElement::GetInterface( Interface_ID id ) { if( id == IMaxKrakatoaRenderElementID ) return static_cast( static_cast( this ) ); return IRenderElement::GetInterface( id ); } template void MaxKrakatoaRenderElement::SetEnabled( BOOL enabled ) { m_pblock->SetValue( kEnabled, 0, enabled ); } template BOOL MaxKrakatoaRenderElement::IsEnabled() const { return m_pblock->GetInt( kEnabled ); } template void MaxKrakatoaRenderElement::SetFilterEnabled( BOOL filterEnabled ) { m_pblock->SetValue( kDoFilter, 0, filterEnabled ); } template BOOL MaxKrakatoaRenderElement::IsFilterEnabled() const { return m_pblock->GetInt( kDoFilter ); } template BOOL MaxKrakatoaRenderElement::BlendOnMultipass() const { return TRUE; } template BOOL MaxKrakatoaRenderElement::AtmosphereApplied() const { return FALSE; } template BOOL MaxKrakatoaRenderElement::ShadowsApplied() const { return FALSE; } template void MaxKrakatoaRenderElement::SetElementName( const MCHAR* newName ) { #if MAX_VERSION_MAJOR >= 12 m_pblock->SetValue( kElementName, 0, newName ); #else m_pblock->SetValue( kElementName, 0, (TCHAR*)newName ); #endif } template const MCHAR* MaxKrakatoaRenderElement::ElementName() const { return m_pblock->GetStr( kElementName ); } template void MaxKrakatoaRenderElement::SetPBBitmap( PBBitmap*& pPBBitmap ) const { m_pblock->SetValue( kBitmap, 0, pPBBitmap ); } template void MaxKrakatoaRenderElement::GetPBBitmap( PBBitmap*& pPBBitmap ) const { pPBBitmap = m_pblock->GetBitmap( kBitmap ); } template void* MaxKrakatoaRenderElement::GetInterface( ULONG id ) { return SpecialFX::GetInterface( id ); } template void MaxKrakatoaRenderElement::ReleaseInterface( ULONG id, void* i ) { SpecialFX::ReleaseInterface( id, i ); } template BOOL MaxKrakatoaRenderElement::SetDlgThing( IRenderElementParamDlg* ) { return TRUE; } template IRenderElementParamDlg* MaxKrakatoaRenderElement::CreateParamDialog( IRendParams* ip ) { return GetClassDesc()->CreateParamDialogs( ip, static_cast( this ) ); }