27 #ifndef _ShaderExPerPixelLighting_
28 #define _ShaderExPerPixelLighting_
31 #ifdef RTSHADER_SYSTEM_BUILD_EXT_SHADERS
48 #define SGX_LIB_PERPIXELLIGHTING "SGXLib_PerPixelLighting"
49 #define SGX_FUNC_TRANSFORMNORMAL "SGX_TransformNormal"
50 #define SGX_FUNC_TRANSFORMPOSITION "SGX_TransformPosition"
51 #define SGX_FUNC_LIGHT_DIRECTIONAL_DIFFUSE "SGX_Light_Directional_Diffuse"
52 #define SGX_FUNC_LIGHT_DIRECTIONAL_DIFFUSESPECULAR "SGX_Light_Directional_DiffuseSpecular"
53 #define SGX_FUNC_LIGHT_POINT_DIFFUSE "SGX_Light_Point_Diffuse"
54 #define SGX_FUNC_LIGHT_POINT_DIFFUSESPECULAR "SGX_Light_Point_DiffuseSpecular"
55 #define SGX_FUNC_LIGHT_SPOT_DIFFUSE "SGX_Light_Spot_Diffuse"
56 #define SGX_FUNC_LIGHT_SPOT_DIFFUSESPECULAR "SGX_Light_Spot_DiffuseSpecular"
72 virtual const String& getType()
const;
77 virtual int getExecutionOrder()
const;
82 virtual void updateGpuProgramsParams(Renderable* rend, Pass* pass,
const AutoParamDataSource* source,
const LightList* pLightList);
87 virtual void copyFrom(
const SubRenderState& rhs);
93 virtual bool preAddToRenderState(
const RenderState* renderState, Pass* srcPass, Pass* dstPass);
121 typedef vector<LightParams>::type LightParamsList;
122 typedef LightParamsList::iterator LightParamsIterator;
123 typedef LightParamsList::const_iterator LightParamsConstIterator;
145 void setLightCount(
const int lightCount[3]);
151 void getLightCount(
int lightCount[3])
const;
157 void setSpecularEnable(
bool enable) { mSpecularEnable = enable; }
162 bool getSpecularEnable()
const {
return mSpecularEnable; }
168 virtual bool resolveParameters(ProgramSet* programSet);
171 bool resolveGlobalParameters(ProgramSet* programSet);
174 bool resolvePerLightParameters(ProgramSet* programSet);
179 virtual bool resolveDependencies(ProgramSet* programSet);
184 virtual bool addFunctionInvocations(ProgramSet* programSet);
190 bool addVSInvocation(Function* vsMain,
const int groupOrder,
int& internalCounter);
196 bool addPSGlobalIlluminationInvocation(Function* psMain,
const int groupOrder,
int& internalCounter);
201 bool addPSIlluminationInvocation(LightParams* curLightParams, Function* psMain,
const int groupOrder,
int& internalCounter);
206 bool addPSFinalAssignmentInvocation(Function* psMain,
const int groupOrder,
int& internalCounter);
214 bool mSpecularEnable;
216 LightParamsList mLightParamsList;
262 static Light msBlankLight;
270 class _OgreRTSSExport PerPixelLightingFactory :
public SubRenderStateFactory
277 virtual const String& getType()
const;
282 virtual SubRenderState* createInstance(ScriptCompiler* compiler, PropertyAbstractNode* prop, Pass* pass, SGScriptTranslator* translator);
287 virtual void writeInstance(MaterialSerializer* ser, SubRenderState* subRenderState, Pass* srcPass, Pass* dstPass);
295 virtual SubRenderState* createInstanceImpl();
HashedVector< Light * > LightList
LightTypes
Defines the type of light.
SharedPtr< Parameter > ParameterPtr
SharedPtr< UniformParameter > UniformParameterPtr
int TrackVertexColourType
An enumeration describing which material properties should track the vertex colours.