mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-07-06 20:24:33 +00:00
- Updates the various classes using materials to comply to the change. - Also standardizes some getter names to follow the general convention image and shape used to keep things more consistent across the board to minimize usage friction. - Shifts handling of fallback asset lookups for the thus-far converted classes to have them be loaded during core initialization rather than being loaded as part of other asset loading as that sometimes lead to nesting execution/stability errors. Explicit call now ensures the fallbacks are loaded before any other asset tries to load, so there's no room for confounding or having no fallback to work with.
135 lines
5.4 KiB
C++
135 lines
5.4 KiB
C++
//-----------------------------------------------------------------------------
|
|
// 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.
|
|
//-----------------------------------------------------------------------------
|
|
|
|
#ifndef _RENDERMESHEXAMPLE_H_
|
|
#define _RENDERMESHEXAMPLE_H_
|
|
|
|
#ifndef _SCENEOBJECT_H_
|
|
#include "scene/sceneObject.h"
|
|
#endif
|
|
#ifndef _GFXVERTEXBUFFER_H_
|
|
#include "gfx/gfxVertexBuffer.h"
|
|
#endif
|
|
#ifndef _GFXPRIMITIVEBUFFER_H_
|
|
#include "gfx/gfxPrimitiveBuffer.h"
|
|
#endif
|
|
|
|
#include "T3D/assets/MaterialAsset.h"
|
|
|
|
class BaseMatInstance;
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// This class implements a basic SceneObject that can exist in the world at a
|
|
// 3D position and render itself. There are several valid ways to render an
|
|
// object in Torque. This class implements the preferred rendering method which
|
|
// is to submit a MeshRenderInst along with a Material, vertex buffer,
|
|
// primitive buffer, and transform and allow the RenderMeshMgr handle the
|
|
// actual setup and rendering for you.
|
|
//-----------------------------------------------------------------------------
|
|
|
|
class RenderMeshExample : public SceneObject
|
|
{
|
|
typedef SceneObject Parent;
|
|
|
|
// Networking masks
|
|
// We need to implement a mask specifically to handle
|
|
// updating our transform from the server object to its
|
|
// client-side "ghost". We also need to implement a
|
|
// maks for handling editor updates to our properties
|
|
// (like material).
|
|
enum MaskBits
|
|
{
|
|
TransformMask = Parent::NextFreeMask << 0,
|
|
UpdateMask = Parent::NextFreeMask << 1,
|
|
NextFreeMask = Parent::NextFreeMask << 2
|
|
};
|
|
|
|
// Define our vertex format here so we don't have to
|
|
// change it in multiple spots later
|
|
typedef GFXVertexPNT VertexType;
|
|
|
|
//--------------------------------------------------------------------------
|
|
// Rendering variables
|
|
//--------------------------------------------------------------------------
|
|
BaseMatInstance* mMaterialInst;
|
|
|
|
AssetRef<MaterialAsset> mMaterialAssetRef;
|
|
|
|
// The GFX vertex and primitive buffers
|
|
GFXVertexBufferHandle< VertexType > mVertexBuffer;
|
|
GFXPrimitiveBufferHandle mPrimitiveBuffer;
|
|
|
|
public:
|
|
RenderMeshExample();
|
|
virtual ~RenderMeshExample();
|
|
|
|
// Declare this object as a ConsoleObject so that we can
|
|
// instantiate it into the world and network it
|
|
DECLARE_CONOBJECT(RenderMeshExample);
|
|
|
|
//--------------------------------------------------------------------------
|
|
// Object Editing
|
|
// Since there is always a server and a client object in Torque and we
|
|
// actually edit the server object we need to implement some basic
|
|
// networking functions
|
|
//--------------------------------------------------------------------------
|
|
// Set up any fields that we want to be editable (like position)
|
|
static void initPersistFields();
|
|
|
|
// Allows the object to update its editable settings
|
|
// from the server object to the client
|
|
void inspectPostApply() override;
|
|
|
|
// Handle when we are added to the scene and removed from the scene
|
|
bool onAdd() override;
|
|
void onRemove() override;
|
|
|
|
// Override this so that we can dirty the network flag when it is called
|
|
void setTransform( const MatrixF &mat ) override;
|
|
|
|
// This function handles sending the relevant data from the server
|
|
// object to the client object
|
|
U32 packUpdate( NetConnection *conn, U32 mask, BitStream *stream ) override;
|
|
// This function handles receiving relevant data from the server
|
|
// object and applying it to the client object
|
|
void unpackUpdate( NetConnection *conn, BitStream *stream ) override;
|
|
|
|
//--------------------------------------------------------------------------
|
|
// Object Rendering
|
|
// Torque utilizes a "batch" rendering system. This means that it builds a
|
|
// list of objects that need to render (via RenderInst's) and then renders
|
|
// them all in one batch. This allows it to optimized on things like
|
|
// minimizing texture, state, and shader switching by grouping objects that
|
|
// use the same Materials.
|
|
//--------------------------------------------------------------------------
|
|
// Create the geometry for rendering
|
|
void createGeometry();
|
|
|
|
// Get the Material instance
|
|
void updateMaterial();
|
|
|
|
// This is the function that allows this object to submit itself for rendering
|
|
void prepRenderImage( SceneRenderState *state ) override;
|
|
};
|
|
|
|
#endif // _RENDERMESHEXAMPLE_H_
|