aboutsummaryrefslogtreecommitdiff
path: root/PhysX_3.4/Samples/SampleFramework/renderer/include/RendererMaterial.h
diff options
context:
space:
mode:
authorgit perforce import user <a@b>2016-10-25 12:29:14 -0600
committerSheikh Dawood Abdul Ajees <Sheikh Dawood Abdul Ajees>2016-10-25 18:56:37 -0500
commit3dfe2108cfab31ba3ee5527e217d0d8e99a51162 (patch)
treefa6485c169e50d7415a651bf838f5bcd0fd3bfbd /PhysX_3.4/Samples/SampleFramework/renderer/include/RendererMaterial.h
downloadphysx-3.4-3dfe2108cfab31ba3ee5527e217d0d8e99a51162.tar.xz
physx-3.4-3dfe2108cfab31ba3ee5527e217d0d8e99a51162.zip
Initial commit:
PhysX 3.4.0 Update @ 21294896 APEX 1.4.0 Update @ 21275617 [CL 21300167]
Diffstat (limited to 'PhysX_3.4/Samples/SampleFramework/renderer/include/RendererMaterial.h')
-rw-r--r--PhysX_3.4/Samples/SampleFramework/renderer/include/RendererMaterial.h194
1 files changed, 194 insertions, 0 deletions
diff --git a/PhysX_3.4/Samples/SampleFramework/renderer/include/RendererMaterial.h b/PhysX_3.4/Samples/SampleFramework/renderer/include/RendererMaterial.h
new file mode 100644
index 00000000..2ac8d77f
--- /dev/null
+++ b/PhysX_3.4/Samples/SampleFramework/renderer/include/RendererMaterial.h
@@ -0,0 +1,194 @@
+// This code contains NVIDIA Confidential Information and is disclosed to you
+// under a form of NVIDIA software license agreement provided separately to you.
+//
+// Notice
+// NVIDIA Corporation and its licensors retain all intellectual property and
+// proprietary rights in and to this software and related documentation and
+// any modifications thereto. Any use, reproduction, disclosure, or
+// distribution of this software and related documentation without an express
+// license agreement from NVIDIA Corporation is strictly prohibited.
+//
+// ALL NVIDIA DESIGN SPECIFICATIONS, CODE ARE PROVIDED "AS IS.". NVIDIA MAKES
+// NO WARRANTIES, EXPRESSED, IMPLIED, STATUTORY, OR OTHERWISE WITH RESPECT TO
+// THE MATERIALS, AND EXPRESSLY DISCLAIMS ALL IMPLIED WARRANTIES OF NONINFRINGEMENT,
+// MERCHANTABILITY, AND FITNESS FOR A PARTICULAR PURPOSE.
+//
+// Information and code furnished is believed to be accurate and reliable.
+// However, NVIDIA Corporation assumes no responsibility for the consequences of use of such
+// information or for any infringement of patents or other rights of third parties that may
+// result from its use. No license is granted by implication or otherwise under any patent
+// or patent rights of NVIDIA Corporation. Details are subject to change without notice.
+// This code supersedes and replaces all information previously supplied.
+// NVIDIA Corporation products are not authorized for use as critical
+// components in life support devices or systems without express written approval of
+// NVIDIA Corporation.
+//
+// Copyright (c) 2008-2016 NVIDIA Corporation. All rights reserved.
+
+#ifndef RENDERER_MATERIAL_H
+#define RENDERER_MATERIAL_H
+
+#include <RendererConfig.h>
+#include <vector>
+
+namespace SampleRenderer
+{
+
+ class RendererMaterialDesc;
+
+ class RendererTexture;
+ class RendererTextureDesc;
+
+ //ps3 need this declare
+ class RendererMaterialInstance;
+
+ //ps3 need this declare
+ class Renderer;
+
+ class RendererMaterial
+ {
+ friend class Renderer;
+ friend class RendererMaterialInstance;
+ public:
+ typedef enum Type
+ {
+ TYPE_UNLIT = 0,
+ TYPE_LIT,
+ NUM_TYPES,
+ } Type;
+
+ typedef enum AlphaTestFunc
+ {
+ ALPHA_TEST_ALWAYS = 0, // disabled alpha testing...
+ ALPHA_TEST_EQUAL,
+ ALPHA_TEST_NOT_EQUAL,
+ ALPHA_TEST_LESS,
+ ALPHA_TEST_LESS_EQUAL,
+ ALPHA_TEST_GREATER,
+ ALPHA_TEST_GREATER_EQUAL,
+
+ NUM_ALPHA_TEST_FUNCS,
+ } AlphaTestFunc;
+
+ typedef enum BlendFunc
+ {
+ BLEND_ZERO = 0,
+ BLEND_ONE,
+ BLEND_SRC_COLOR,
+ BLEND_ONE_MINUS_SRC_COLOR,
+ BLEND_SRC_ALPHA,
+ BLEND_ONE_MINUS_SRC_ALPHA,
+ BLEND_DST_ALPHA,
+ BLEND_ONE_MINUS_DST_ALPHA,
+ BLEND_DST_COLOR,
+ BLEND_ONE_MINUS_DST_COLOR,
+ BLEND_SRC_ALPHA_SATURATE,
+ } BlendFunc;
+
+ typedef enum Pass
+ {
+ PASS_UNLIT = 0,
+
+ PASS_AMBIENT_LIGHT,
+ PASS_POINT_LIGHT,
+ PASS_DIRECTIONAL_LIGHT,
+ PASS_SPOT_LIGHT_NO_SHADOW,
+ PASS_SPOT_LIGHT,
+
+ PASS_NORMALS,
+ PASS_DEPTH,
+
+ // LRR: The deferred pass causes compiles with the ARB_draw_buffers profile option, creating
+ // multiple color draw buffers. This doesn't work in OGL on ancient Intel parts.
+ //PASS_DEFERRED,
+
+ NUM_PASSES,
+ } Pass;
+
+ typedef enum VariableType
+ {
+ VARIABLE_FLOAT = 0,
+ VARIABLE_FLOAT2,
+ VARIABLE_FLOAT3,
+ VARIABLE_FLOAT4,
+ VARIABLE_FLOAT4x4,
+ VARIABLE_INT,
+ VARIABLE_SAMPLER2D,
+ VARIABLE_SAMPLER3D,
+
+ NUM_VARIABLE_TYPES
+ } VariableType;
+
+ class Variable
+ {
+ friend class RendererMaterial;
+ protected:
+ Variable(const char *name, VariableType type, PxU32 offset);
+ virtual ~Variable(void);
+
+ public:
+ const char *getName(void) const;
+ VariableType getType(void) const;
+ PxU32 getDataOffset(void) const;
+ PxU32 getDataSize(void) const;
+
+ void setSize(PxU32);
+
+ private:
+ char *m_name;
+ VariableType m_type;
+ PxU32 m_offset;
+ PxI32 m_size;
+ };
+
+ public:
+ static const char *getPassName(Pass pass);
+ virtual void setModelMatrix(const PxF32 *matrix) = 0;
+
+ protected:
+ RendererMaterial(const RendererMaterialDesc &desc, bool enableMaterialCaching);
+ virtual ~RendererMaterial(void);
+
+ public:
+ void incRefCount() { m_refCount++; }
+ void release(void);
+ const Variable *findVariable(const char *name, VariableType varType);
+
+ PX_FORCE_INLINE Type getType(void) const { return m_type; }
+ PX_FORCE_INLINE AlphaTestFunc getAlphaTestFunc(void) const { return m_alphaTestFunc; }
+ PX_FORCE_INLINE float getAlphaTestRef(void) const { return m_alphaTestRef; }
+ PX_FORCE_INLINE bool getBlending(void) const { return m_blending && !rendererBlendingOverrideEnabled(); }
+ PX_FORCE_INLINE BlendFunc getSrcBlendFunc(void) const { return m_srcBlendFunc; }
+ PX_FORCE_INLINE BlendFunc getDstBlendFunc(void) const { return m_dstBlendFunc; }
+ PX_FORCE_INLINE PxU32 getMaterialInstanceDataSize(void) const { return m_variableBufferSize; }
+
+ protected:
+ virtual const Renderer& getRenderer() const = 0;
+ virtual void bind(RendererMaterial::Pass pass, RendererMaterialInstance *materialInstance, bool instanced) const;
+ virtual void bindMeshState(bool instanced) const = 0;
+ virtual void unbind(void) const = 0;
+ virtual void bindVariable(Pass pass, const Variable &variable, const void *data) const = 0;
+
+ RendererMaterial &operator=(const RendererMaterial&) { return *this; }
+
+ bool rendererBlendingOverrideEnabled() const;
+
+ protected:
+ const Type m_type;
+
+ const AlphaTestFunc m_alphaTestFunc;
+ float m_alphaTestRef;
+
+ bool m_blending;
+ const BlendFunc m_srcBlendFunc;
+ const BlendFunc m_dstBlendFunc;
+
+ std::vector<Variable*> m_variables;
+ PxU32 m_variableBufferSize;
+
+ PxI32 m_refCount;
+ bool mEnableMaterialCaching;
+ };
+} // namespace SampleRenderer
+
+#endif