source: GTP/trunk/Lib/Illum/IllumModule/OgreIllumModule/src/RenderingRuns/OgrePMEntryPointMapRenderingRun.cpp @ 2200

Revision 2200, 2.5 KB checked in by szirmay, 17 years ago (diff)
Line 
1#include "OgrePMEntryPointMapRenderingRun.h"
2#include "OgreIlluminationManager.h"
3
4OgrePMEntryPointMapRenderingRun::OgrePMEntryPointMapRenderingRun(String name)
5                                                                                                                   : OgreRenderingRun(1, 1)
6                                                                                                                   , RenderingRun(1, 1)
7{
8        this->name = name;
9       
10        createEntryPointMap(); 
11}
12
13void OgrePMEntryPointMapRenderingRun::createEntryPointMap()
14{
15        unsigned int entryPointCnt = OgreIlluminationManager::getSingleton().getPathMapEntryPoints().size();
16        int width = entryPointCnt / 4096 * 2;
17        int height = 4096;
18        TexturePtr texPtr = Ogre::TextureManager::getSingleton().createManual(name,
19                                                                                                                                                "default",
20                                                                                                                                                TEX_TYPE_2D,
21                                                                                                                                                width,
22                                                                                                                                                height,
23                                                                                                                                                0,
24                                                                                                                                                0,
25                                                                                                                                                PF_FLOAT32_RGBA,
26                                                                                                                                                TU_DEFAULT);
27        entryPointTexture = texPtr.getPointer();
28       
29        struct TMR
30        {
31                float pos[4];
32                float dir[4];
33        };
34        TMR* tm = new TMR[entryPointCnt];
35        for(int i=0; i<entryPointCnt; i++)
36        {
37                PathMapEntryPoint* EP = &OgreIlluminationManager::getSingleton().getPathMapEntryPoints().at(i);
38                tm[i].pos[0] = EP->position.x;
39                tm[i].pos[1] = EP->position.y;
40                tm[i].pos[2] = EP->position.z;
41                tm[i].pos[3] = 1.0;
42                tm[i].dir[0] = EP->normal.x;
43                tm[i].dir[1] = EP->normal.y;
44                tm[i].dir[2] = EP->normal.z;
45                tm[i].dir[3] = EP->prob;
46        }       
47
48        PixelBox lockBox(width, height, 1, PF_FLOAT32_RGBA, tm);
49        entryPointTexture->getBuffer()->blitFromMemory(lockBox);
50
51        delete[] tm;
52
53        int clusterCount = OgreIlluminationManager::getSingleton().getPathMapClusterLengthsSize();
54        width = clusterCount;
55        height = 2;
56        texPtr = Ogre::TextureManager::getSingleton().createManual(name + "_CL",
57                                                                                                                                                "default",
58                                                                                                                                                TEX_TYPE_2D,
59                                                                                                                                                width,
60                                                                                                                                                height,
61                                                                                                                                                0,
62                                                                                                                                                0,
63                                                                                                                                                PF_FLOAT32_R,
64                                                                                                                                                TU_RENDERTARGET);
65        clusterLengthTexture = texPtr.getPointer();
66
67        float* data = new float[clusterCount * 2];
68        unsigned int entryPointCount = 0;
69        for(int i = 0; i < clusterCount; i++)
70        {
71                unsigned int clusterSize = OgreIlluminationManager::getSingleton().getPathMapClusterLength(i);
72                data[i] = clusterSize;//clustercount
73                data[clusterCount + i] = entryPointCount;
74                entryPointCount += clusterSize;
75        }
76
77        PixelBox lockBox2(width, height, 1, PF_FLOAT32_R, data);
78        clusterLengthTexture->getBuffer()->blitFromMemory(lockBox2);
79
80        delete[] data;
81}
82
83void OgrePMEntryPointMapRenderingRun::updateFrame(unsigned long frameNum)
84{       
85       
86}
87
88
Note: See TracBrowser for help on using the repository browser.