Ignore:
Timestamp:
09/12/06 20:49:30 (18 years ago)
Author:
szirmay
Message:
 
Location:
GTP/trunk/Lib/Illum/IllumModule/OgreIllumModule/src
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • GTP/trunk/Lib/Illum/IllumModule/OgreIllumModule/src/OgreRenderingRun.cpp

    r1342 r1351  
    208208void OgreRenderingRun::renderFullscreenGrid(String& materialName, RenderTarget* rt, int width, int height) 
    209209{ 
    210         MeshPtr mesh = MeshManager::getSingleton().createManual("FullScreenGrid",ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME); 
    211         SubMesh* sm = mesh->createSubMesh(); 
    212         sm-> 
     210        SceneManager* sm = Root::getSingleton()._getCurrentSceneManager(); 
     211         
     212        if(this->fullscreenGrid == NULL) 
     213        { 
     214                MeshPtr mesh = MeshManager::getSingleton().createManual("FullScreenGrid",ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME); 
     215                SubMesh* subMesh = mesh->createSubMesh(); 
     216                 
     217                mesh->sharedVertexData = new VertexData(); 
     218                VertexData* vertexData = mesh->sharedVertexData; 
     219 
     220                // define the vertex format 
     221                VertexDeclaration* vertexDecl = vertexData->vertexDeclaration; 
     222                size_t currOffset = 0; 
     223                // positions 
     224                vertexDecl->addElement(0, currOffset, VET_FLOAT3, VES_POSITION); 
     225                currOffset += VertexElement::getTypeSize(VET_FLOAT3); 
     226                 
     227                // allocate the vertex buffer 
     228                vertexData->vertexCount = width * height; 
     229                HardwareVertexBufferSharedPtr vBuf = HardwareBufferManager::getSingleton().createVertexBuffer(vertexDecl->getVertexSize(0), vertexData->vertexCount, HardwareBuffer::HBU_STATIC_WRITE_ONLY, false); 
     230                VertexBufferBinding* binding = vertexData->vertexBufferBinding; 
     231                binding->setBinding(0, vBuf); 
     232                float* pVertex = static_cast<float*>(vBuf->lock(HardwareBuffer::HBL_DISCARD)); 
     233 
     234                // allocate index buffer 
     235                subMesh->indexData->indexCount = 6 * (width - 1) * (height - 1); 
     236                subMesh->indexData->indexBuffer = HardwareBufferManager::getSingleton().createIndexBuffer(HardwareIndexBuffer::IT_16BIT, subMesh->indexData->indexCount, HardwareBuffer::HBU_STATIC_WRITE_ONLY, false); 
     237                HardwareIndexBufferSharedPtr iBuf = subMesh->indexData->indexBuffer; 
     238                unsigned short* pIndices = static_cast<unsigned short*>(iBuf->lock(HardwareBuffer::HBL_DISCARD)); 
     239 
     240                unsigned short wVerticeIndex = 0 ; 
     241 
     242                 
     243                for( int j = 0; j < height; j++ ) 
     244                { 
     245                 for( int i = 0; i < width; i++ ) 
     246                 {       //positions 
     247                         float x = ((float)i + 0.5) / (float) width; 
     248                         float y = ((float)j + 0.5) / (float) height; 
     249                        *pVertex++ = x; 
     250                        *pVertex++ = y; 
     251                        *pVertex++ = 0; 
     252 
     253                        //indexes 
     254                        if( j < height - 1 && i < width -1 ) 
     255                        { 
     256                                *pIndices++ = j * width + i; 
     257                                *pIndices++ = (j + 1) * width + i; 
     258                                *pIndices++ = j * width + i + 1; 
     259                                *pIndices++ = j * width + i + 1; 
     260                                *pIndices++ = (j + 1) * width + i; 
     261                                *pIndices++ = (j + 1) * width + i + 1; 
     262                        } 
     263                                   
     264                 } 
     265                }        
     266 
     267                // Unlock 
     268                vBuf->unlock(); 
     269                iBuf->unlock(); 
     270                // Generate face list 
     271                subMesh->useSharedVertices = true; 
     272 
     273                // this line makes clear the mesh is loaded (avoids memory leaks) 
     274                mesh->load(); 
     275 
     276                fullscreenGrid = sm->createEntity("FullScreenGridEntity", "FullScreenGrid"); 
     277                SceneNode* n = sm->getRootSceneNode()->createChildSceneNode("FullScreenGridNode"); 
     278                n->attachObject(fullscreenGrid); 
     279                fullscreenGrid->setVisible(false); 
     280        } 
     281 
     282        fullscreenGrid->setMaterialName(materialName); 
     283 
     284        sm->getRenderQueue()->clear(); 
     285        sm->getRenderQueue()->addRenderable(fullscreenGrid->getSubEntity(0)); 
     286        sm->setFindVisibleObjects(false); 
     287        rt->update(); 
     288        sm->setFindVisibleObjects(true); 
     289 
    213290} 
    214291 
  • GTP/trunk/Lib/Illum/IllumModule/OgreIllumModule/src/RenderTechniques/OgreCausticCasterRenderTechnique.cpp

    r1055 r1351  
    1616                                                                                                                                bool useDistance, 
    1717                                                                                                                                float attenuation, 
     18                                                                                                                                bool useTriangles, 
    1819                                                                                                                                Pass* pass, 
    1920                                                                                                                                OgreRenderable* parentRenderable, 
     
    2425{        
    2526        this->attenuation = attenuation; 
     27        this->useTriangles = useTriangles; 
    2628        this->photonMapMaterialName = photonMapMaterialName; 
    2729         
     
    106108                                                                                                photonMapTexID, 
    107109                                                                                                updateAllFace, 
    108                                                                                                 attenuation 
     110                                                                                                attenuation, 
     111                                                                                                useTriangles 
    109112                                                                                                ); 
    110113 
     
    194197                OgreCausticCasterRenderTechniqueFactory* f = (OgreCausticCasterRenderTechniqueFactory*) factory; 
    195198                f->attenuation =  StringConverter::parseReal(params); 
     199        } 
     200 
     201        void parseUseTriangles(String& params, RenderTechniqueFactory* factory) 
     202        { 
     203                OgreCausticCasterRenderTechniqueFactory* f = (OgreCausticCasterRenderTechniqueFactory*) factory; 
     204                f->useTriangles =  StringConverter::parseBool(params); 
    196205        } 
    197206} 
     
    216225        this->attributeParsers.insert(AttribParserList::value_type("update_all_face", (ILLUM_ATTRIBUTE_PARSER) parseUpdateAllFace)); 
    217226        this->attributeParsers.insert(AttribParserList::value_type("attenuation", (ILLUM_ATTRIBUTE_PARSER) parseAttenuation)); 
     227        this->attributeParsers.insert(AttribParserList::value_type("use_triangles", (ILLUM_ATTRIBUTE_PARSER) parseUseTriangles)); 
    218228         
    219229} 
     
    236246        useDistance = true; 
    237247        updateAllFace = false; 
     248        useTriangles = false; 
    238249 
    239250        parseParams(params); 
     
    250261                                                                                                useDistance, 
    251262                                                                                                attenuation, 
     263                                                                                                useTriangles, 
    252264                                                                                                pass, 
    253265                                                                                                parentRenderable, 
  • GTP/trunk/Lib/Illum/IllumModule/OgreIllumModule/src/RenderingRuns/OgreCausticCubeMapRenderingRun.cpp

    r1055 r1351  
    1313                                                                                                                   unsigned char photonMapTexId, 
    1414                                                                                                                   bool updateAllFace, 
    15                                                                                                                    float attenuation) 
     15                                                                                                                   float attenuation, 
     16                                                                                                                   bool useTriangles) 
    1617                :CausticCubeMapRenderingRun(startFrame, updateInterval, resolution, updateAllFace) 
    1718                , OgreRenderingRun(startFrame, updateInterval) 
     
    1920{ 
    2021        this->attenuation = attenuation; 
     22        this->useTriangles = useTriangles; 
    2123        this->sharedRuns = sharedRuns; 
    2224        this->name = name; 
     
    6466        String photonMapName = ((OgrePhotonMapRenderingRun*) run->asOgreRenderingRun())->getPhotonMapTextureName(); 
    6567        TexturePtr tex = TextureManager::getSingleton().getByName(photonMapName); 
    66         renderPixelSprites(materialName, rt, tex->getWidth(), tex->getHeight()); 
     68         
     69        if(!useTriangles) 
     70                renderPixelSprites(materialName, rt, tex->getWidth(), tex->getHeight()); 
     71        else 
     72                renderFullscreenGrid(materialName, rt, tex->getWidth(), tex->getHeight()); 
    6773 
    6874        //rt->writeContentsToFile("caucube" + this->name + StringConverter::toString(facenum) + ".dds"); 
Note: See TracChangeset for help on using the changeset viewer.