Ignore:
Timestamp:
09/12/06 20:49:30 (18 years ago)
Author:
szirmay
Message:
 
File:
1 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 
Note: See TracChangeset for help on using the changeset viewer.