123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163 |
- //-----------------------------------------------------------------------------
- // Copyright (c) 2012 GarageGames, LLC
- //
- // Permission is hereby granted, free of charge, to any person obtaining a copy
- // of this software and associated documentation files (the "Software"), to
- // deal in the Software without restriction, including without limitation the
- // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- // sell copies of the Software, and to permit persons to whom the Software is
- // furnished to do so, subject to the following conditions:
- //
- // The above copyright notice and this permission notice shall be included in
- // all copies or substantial portions of the Software.
- //
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- // IN THE SOFTWARE.
- //-----------------------------------------------------------------------------
- #include "renderInstance/renderPassStateToken.h"
- #include "console/consoleTypes.h"
- #include "console/engineAPI.h"
- IMPLEMENT_CONOBJECT(RenderPassStateToken);
- ConsoleDocClass( RenderPassStateToken,
- "@brief Abstract base class for RenderFormatToken, used to manipulate what goes on in the render manager\n\n"
- "You cannot actually instantiate RenderPassToken, only its child: RenderFormatToken. "
- "RenderFormatToken is an implementation which changes the format of the "
- "back buffer and/or the depth buffer.\n\n"
-
- "The RenderPassStateBin manager changes the rendering state associated with "
- "a token it is declared with. In stock Torque 3D, a single example exists in the "
- "way of AL_FormatToken (found in renderManager." TORQUE_SCRIPT_EXTENSION "). In that script file, all the "
- "render managers are intialized, and a single RenderFormatToken is used. This "
- "implementation basically exists to ensure Advanced Lighting works with MSAA.\n\n"
- "@see RenderFormatToken\n"
- "@see RenderPassStateBin\n"
- "@see game/core/scripts/client/renderManager." TORQUE_SCRIPT_EXTENSION "\n"
- "@ingroup RenderBin\n"
- );
- void RenderPassStateToken::process(SceneRenderState *state, RenderPassStateBin *callingBin)
- {
- TORQUE_UNUSED(state);
- TORQUE_UNUSED(callingBin);
- AssertWarn(false, "RenderPassStateToken is an abstract class, you must re-implement process()");
- }
- void RenderPassStateToken::reset()
- {
- AssertWarn(false, "RenderPassStateToken is an abstract class, you must re-implement reset()");
- }
- void RenderPassStateToken::enable( bool enabled /*= true*/ )
- {
- TORQUE_UNUSED(enabled);
- AssertWarn(false, "RenderPassStateToken is an abstract class, you must re-implement enable()");
- }
- bool RenderPassStateToken::isEnabled() const
- {
- AssertWarn(false, "RenderPassStateToken is an abstract class, you must re-implement isEnabled()");
- return false;
- }
- static bool _set_enable( void *object, const char *index, const char *data )
- {
- reinterpret_cast<RenderPassStateToken *>(object)->enable(dAtob(data));
- return false;
- }
- static const char *_get_enable(void* obj, const char* data)
- {
- TORQUE_UNUSED(data);
- return reinterpret_cast<RenderPassStateToken *>(obj)->isEnabled() ? "true" : "false";
- }
- void RenderPassStateToken::initPersistFields()
- {
- addProtectedField("enabled", TypeBool, 0, &_set_enable, &_get_enable, "Enables or disables this token.");
- Parent::initPersistFields();
- }
- //------------------------------------------------------------------------------
- //------------------------------------------------------------------------------
- IMPLEMENT_CONOBJECT(RenderPassStateBin);
- ConsoleDocClass( RenderPassStateBin,
- "@brief A non-rendering render bin used to enable/disable a RenderPassStateToken.\n\n"
- "This is a utility RenderBinManager which does not render any render instances. Its only "
- "used to define a point in the render bin order at which a RenderPassStateToken is triggered.\n\n"
- "@see RenderPassStateToken\n"
- "@ingroup RenderBin\n"
- );
- RenderPassStateBin::RenderPassStateBin()
- : Parent()
- {
- }
- RenderPassStateBin::~RenderPassStateBin()
- {
- }
- void RenderPassStateBin::render(SceneRenderState *state)
- {
- if(mStateToken.isValid())
- mStateToken->process(state, this);
- }
- void RenderPassStateBin::clear()
- {
- if(mStateToken.isValid())
- mStateToken->reset();
- }
- void RenderPassStateBin::sort()
- {
- }
- void RenderPassStateBin::initPersistFields()
- {
- addProtectedField( "stateToken", TYPEID< RenderPassStateToken >(), Offset( mStateToken, RenderPassStateBin ),
- _setStateToken, _getStateToken, "");
-
- Parent::initPersistFields();
- }
- //------------------------------------------------------------------------------
- DefineEngineMethod(RenderPassStateToken, enable, void, (),,
- "@brief Enables the token." )
- {
- object->enable(true);
- }
- DefineEngineMethod(RenderPassStateToken, disable, void, (),,
- "@brief Disables the token.")
- {
- object->enable(false);
- }
- DefineEngineMethod(RenderPassStateToken, toggle, void, (),,
- "@brief Toggles the token from enabled to disabled or vice versa." )
- {
- object->enable(!object->isEnabled());
- }
|