source: GTP/trunk/Lib/Illum/IllumModule/OgreIllumModule/src/RenderTechniques/OgreDistanceCubeMapRenderTechnique.cpp @ 1956

Revision 1956, 4.8 KB checked in by szirmay, 17 years ago (diff)
Line 
1#include "OgreDistanceCubeMapRenderTechnique.h"
2#include "OgreTechniqueGroup.h"
3#include "OgreCubeMapRenderingRun.h"
4
5OgreDistanceCubeMapRenderTechnique::OgreDistanceCubeMapRenderTechnique(unsigned long startFrame,
6                                                                                                                unsigned long cubeMapUpdateInterval,
7                                                                                                                unsigned int cubeMapResolution,                                                                                         
8                                                                                                                unsigned char texID,
9                                                                                                                bool useDistCalc,
10                                                                                                                bool useFaceAngleCalc,
11                                                                                                                float distTolerance,
12                                                                                                                float angleTolerance,
13                                                                                                                bool updateAllFace,
14                                                                                                                bool renderSelf,
15                                                                                                                bool renderEnvironment,
16                                                                                                                String selfMaterial,
17                                                                                                                String environmentMaterial,
18                                                                                                                int layer,
19                                                                                                                bool getMinMax,
20                                                                                                                bool attachToTexUnit,
21                                                                                                                String minVariableName,
22                                                                                                                String maxVariableName,
23                                                                                                                Pass* pass,
24                                                                                                                OgreRenderable* parentRenderable,
25                                                                                                                OgreTechniqueGroup* parentTechniqueGroup)
26                                                        :
27                                                        OgreCubeMapRenderTechnique(startFrame, cubeMapUpdateInterval, cubeMapResolution, texID, useDistCalc, useFaceAngleCalc, distTolerance, angleTolerance, updateAllFace, renderSelf, renderEnvironment, selfMaterial, environmentMaterial, layer, getMinMax, attachToTexUnit, minVariableName, maxVariableName, pass, parentRenderable, parentTechniqueGroup),
28                                                        CubeMapRenderTechnique(startFrame, cubeMapUpdateInterval, cubeMapResolution, useDistCalc, useFaceAngleCalc, distTolerance, angleTolerance, updateAllFace, renderSelf, renderEnvironment, layer, parentRenderable, parentTechniqueGroup),
29                                                        DistanceCubeMapRenderTechnique(startFrame, cubeMapUpdateInterval, cubeMapResolution, useDistCalc, useFaceAngleCalc, distTolerance, angleTolerance, updateAllFace, renderSelf, renderEnvironment, layer, parentRenderable, parentTechniqueGroup),
30                                                        RenderTechnique(parentRenderable, parentTechniqueGroup)
31{       
32        switch(layer)
33        {
34                case 0:
35                        texturePostFix = "_DISTANCECUBEMAP";
36                        break;
37                case 1:
38                        texturePostFix = "_DISTANCECUBEMAP_L1";
39                        break;
40                case 2:
41                        texturePostFix = "_DISTANCECUBEMAP_L2";
42                        break;
43                case 3:
44                        texturePostFix = "_DISTANCECUBEMAP_L3";
45                        break;
46                case 4:
47                        texturePostFix = "_DISTANCECUBEMAP_L4";
48                        break;
49                case 5:
50                        texturePostFix = "_DISTANCECUBEMAP_L5";
51                        break;
52                case 6:
53                        texturePostFix = "_DISTANCECUBEMAP_L6";
54                        break;
55        }
56        if(sharedRuns->getRun(cubemapLayer) == 0)
57                sharedRuns->addRun(cubemapLayer, createCubeMapRun());
58
59        distanceCubeMapRunChanged(sharedRuns->getRun(cubemapLayer));
60}
61
62
63OgreDistanceCubeMapRenderTechnique::~OgreDistanceCubeMapRenderTechnique()
64{
65
66}
67
68void OgreDistanceCubeMapRenderTechnique::update(unsigned long frameNum)
69{
70        DistanceCubeMapRenderTechnique::update(frameNum);
71}
72
73void OgreDistanceCubeMapRenderTechnique::distanceCubeMapRunChanged(RenderingRun* run)
74{
75        OgreCubeMapRenderTechnique::cubeMapRunChanged(run);
76/*      OgreCubeMapRenderingRun* cuberun =(OgreCubeMapRenderingRun*) (run->asOgreRenderingRun());
77        String cubemapname = cuberun->getCubeMapTextureName();
78       
79        pass->getTextureUnitState(texID)->setTextureName(cubemapname);*/
80}
81
82void OgreDistanceCubeMapRenderTechnique::distanceCubeMapRunUpdated(RenderingRun* run)
83{
84        GpuProgramParametersSharedPtr fpParams = pass->getFragmentProgramParameters();
85        Vector3 center = ((OgreSharedRuns*) sharedRuns)->getRootPosition(cubemapLayer);
86        fpParams->setNamedConstant("lastCenter",center);
87
88        OgreCubeMapRenderTechnique::cubeMapRunUpdated(run);
89}
90
91
92
93///Technique factory
94OgreDistanceCubeMapRenderTechniqueFactory::OgreDistanceCubeMapRenderTechniqueFactory()
95{
96        typeName = "DistanceCubeMap";   
97}
98
99OgreRenderTechnique* OgreDistanceCubeMapRenderTechniqueFactory::createInstance(
100                                                                                IllumTechniqueParams* params,
101                                                                                Pass* pass,
102                                                                                OgreRenderable* parentRenderable,
103                                                                                OgreTechniqueGroup* parentTechniqueGroup)
104{       
105        OgreCubeMapRenderTechniqueFactory::resetParams();
106        texID = 1;
107        environmentMaterial = "GameTools/DistanceShader";
108        selfMaterial = "GameTools/DistanceShader";
109        OgreCubeMapRenderTechniqueFactory::parseParams(params);
110        parseParams(params);
111       
112        OgreDistanceCubeMapRenderTechnique* result = new OgreDistanceCubeMapRenderTechnique(
113                                                                                                startFrame,
114                                                                                                cubeMapUpdateInterval,
115                                                                                                cubeMapResolution,
116                                                                                                texID,
117                                                                                                useDistCalc,
118                                                                                                useFaceAngleCalc,
119                                                                                                distTolerance,
120                                                                                                angleTolerance,
121                                                                                                updateAllFace,
122                                                                                                renderSelf,
123                                                                                                renderEnvironment,
124                                                                                                selfMaterial,
125                                                                                                environmentMaterial,
126                                                                                                layer,
127                                                                                                getMinMax,
128                                                                                                attachToTexUnit,
129                                                                                                minVariableName,
130                                                                                                maxVariableName,
131                                                                                                pass,
132                                                                                                parentRenderable,
133                                                                                                parentTechniqueGroup);
134
135        return result;
136}
137
Note: See TracBrowser for help on using the repository browser.