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

Revision 1886, 4.7 KB checked in by szirmay, 18 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
89
90
91///Technique factory
92OgreDistanceCubeMapRenderTechniqueFactory::OgreDistanceCubeMapRenderTechniqueFactory()
93{
94        typeName = "DistanceCubeMap";   
95}
96
97OgreRenderTechnique* OgreDistanceCubeMapRenderTechniqueFactory::createInstance(
98                                                                                IllumTechniqueParams* params,
99                                                                                Pass* pass,
100                                                                                OgreRenderable* parentRenderable,
101                                                                                OgreTechniqueGroup* parentTechniqueGroup)
102{       
103        OgreCubeMapRenderTechniqueFactory::resetParams();
104        texID = 1;
105        environmentMaterial = "GameTools/DistanceShader";
106        selfMaterial = "GameTools/DistanceShader";
107        OgreCubeMapRenderTechniqueFactory::parseParams(params);
108        parseParams(params);
109       
110        OgreDistanceCubeMapRenderTechnique* result = new OgreDistanceCubeMapRenderTechnique(
111                                                                                                startFrame,
112                                                                                                cubeMapUpdateInterval,
113                                                                                                cubeMapResolution,
114                                                                                                texID,
115                                                                                                useDistCalc,
116                                                                                                useFaceAngleCalc,
117                                                                                                distTolerance,
118                                                                                                angleTolerance,
119                                                                                                updateAllFace,
120                                                                                                renderSelf,
121                                                                                                renderEnvironment,
122                                                                                                selfMaterial,
123                                                                                                environmentMaterial,
124                                                                                                layer,
125                                                                                                getMinMax,
126                                                                                                attachToTexUnit,
127                                                                                                minVariableName,
128                                                                                                maxVariableName,
129                                                                                                pass,
130                                                                                                parentRenderable,
131                                                                                                parentTechniqueGroup);
132
133        return result;
134}
135
Note: See TracBrowser for help on using the repository browser.