Shifted to the static-list arrangement for probe instance tracking to help performance as well as drastically streamline the data submission/material instance flow for probe rendering.

This commit is contained in:
Areloch 2018-10-07 17:32:23 -05:00
parent 4efcb567b0
commit 1966d348e4
22 changed files with 901 additions and 1250 deletions

View file

@ -38,38 +38,6 @@
#include "gfx/gfxVertexBuffer.h"
#endif
class ReflectProbeMatInstance : public MatInstance
{
typedef MatInstance Parent;
protected:
MaterialParameterHandle *mProbeParamsSC;
bool mInternalPass;
GFXStateBlockRef mProjectionState;
public:
ReflectProbeMatInstance(Material &mat) : Parent(mat), mProbeParamsSC(NULL), mInternalPass(false), mProjectionState(NULL){}
virtual bool init(const FeatureSet &features, const GFXVertexFormat *vertexFormat);
virtual bool setupPass(SceneRenderState *state, const SceneData &sgData);
};
class SkylightMatInstance : public MatInstance
{
typedef MatInstance Parent;
protected:
MaterialParameterHandle * mSkylightParamsSC;
bool mInternalPass;
GFXStateBlockRef mProjectionState;
public:
SkylightMatInstance(Material &mat) : Parent(mat), mSkylightParamsSC(NULL), mInternalPass(false), mProjectionState(NULL) {}
virtual bool init(const FeatureSet &features, const GFXVertexFormat *vertexFormat);
virtual bool setupPass(SceneRenderState *state, const SceneData &sgData);
};
//**************************************************************************
// RenderObjectMgr
//**************************************************************************
@ -80,112 +48,9 @@ public:
typedef GFXVertexPNTT FarFrustumQuadVert;
protected:
struct ReflectProbeMaterialInfo
{
ReflectProbeMatInstance *matInstance;
// { zNear, zFar, 1/zNear, 1/zFar }
MaterialParameterHandle *zNearFarInvNearFar;
// Far frustum plane (World Space)
MaterialParameterHandle *farPlane;
// Far frustum plane (View Space)
MaterialParameterHandle *vsFarPlane;
// -dot( farPlane, eyePos )
MaterialParameterHandle *negFarPlaneDotEye;
// Inverse View matrix
MaterialParameterHandle *invViewMat;
// Light Parameters
MaterialParameterHandle *probeLSPos;
MaterialParameterHandle *probeWSPos;
MaterialParameterHandle *attenuation;
MaterialParameterHandle *radius;
MaterialParameterHandle *useCubemap;
MaterialParameterHandle *cubemap;
MaterialParameterHandle *cubeMips;
MaterialParameterHandle *eyePosWorld;
MaterialParameterHandle *bbMin;
MaterialParameterHandle *bbMax;
MaterialParameterHandle *useSphereMode;
MaterialParameterHandle *shTerms[9];
MaterialParameterHandle *shConsts[5];
ReflectProbeMaterialInfo(const String &matName, const GFXVertexFormat *vertexFormat);
virtual ~ReflectProbeMaterialInfo();
void setViewParameters(const F32 zNear,
const F32 zFar,
const Point3F &eyePos,
const PlaneF &farPlane,
const PlaneF &_vsFarPlane,
const MatrixF &_inverseViewMatrix);
void setProbeParameters(const ProbeRenderInst *probe, const SceneRenderState* renderState, const MatrixF &worldViewOnly);
};
struct SkylightMaterialInfo
{
SkylightMatInstance *matInstance;
// { zNear, zFar, 1/zNear, 1/zFar }
MaterialParameterHandle *zNearFarInvNearFar;
// Far frustum plane (World Space)
MaterialParameterHandle *farPlane;
// Far frustum plane (View Space)
MaterialParameterHandle *vsFarPlane;
// -dot( farPlane, eyePos )
MaterialParameterHandle *negFarPlaneDotEye;
// Inverse View matrix
MaterialParameterHandle *invViewMat;
MaterialParameterHandle *useCubemap;
MaterialParameterHandle *cubemap;
MaterialParameterHandle *eyePosWorld;
MaterialParameterHandle *shTerms[9];
MaterialParameterHandle *shConsts[5];
SkylightMaterialInfo(const String &matName, const GFXVertexFormat *vertexFormat);
virtual ~SkylightMaterialInfo();
void setViewParameters(const F32 zNear,
const F32 zFar,
const Point3F &eyePos,
const PlaneF &farPlane,
const PlaneF &_vsFarPlane,
const MatrixF &_inverseViewMatrix);
void setSkylightParameters(const ProbeRenderInst *probe, const SceneRenderState* renderState, const MatrixF &worldViewOnly);
};
GFXVertexBufferHandle<FarFrustumQuadVert> mFarFrustumQuadVerts;
GFXVertexBufferHandle<GFXVertexPC> getSphereMesh(U32 &outNumPrimitives, GFXPrimitiveBufferHandle &outPrimitives);
// Convex geometry for lights
GFXVertexBufferHandle<GFXVertexPC> mSphereGeometry;
GFXPrimitiveBufferHandle mSphereIndices;
U32 mSpherePrimitiveCount;
public:
RenderProbeMgr();
RenderProbeMgr(RenderInstType riType, F32 renderOrder, F32 processAddOrder);
@ -198,17 +63,6 @@ public:
// ConsoleObject
static void initPersistFields();
DECLARE_CONOBJECT(RenderProbeMgr);
ReflectProbeMaterialInfo* mReflectProbeMaterial;
ReflectProbeMaterialInfo* _getReflectProbeMaterial();
SkylightMaterialInfo* mSkylightMaterial;
SkylightMaterialInfo* _getSkylightMaterial();
// Add a reflection probe to the bin
void addSkylightProbe(ProbeRenderInst *probeInfo);
void addSphereReflectionProbe(ProbeRenderInst *probeInfo);
void addConvexReflectionProbe(ProbeRenderInst *probeInfo);
};
#endif // RENDER_PROBE_MGR_H