Changeset 3997


Ignore:
Timestamp:
07/13/12 16:26:15 (2 years ago)
Author:
vdaras
Message:

Made LibRocketRenderInterface? store calls from Rocket for geometry that needs to be rendererd. [t:723]

Location:
branches/active/gui_enhancements/engine/core/gui/librocket
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/active/gui_enhancements/engine/core/gui/librocket/librocketrenderinterface.cpp

    r3996 r3997  
    4242         
    4343        LibRocketRenderInterface::~LibRocketRenderInterface() { 
     44                freeTextures(); 
    4445        } 
    4546         
    4647        void LibRocketRenderInterface::RenderGeometry(Rocket::Core::Vertex* vertices, int num_vertices, int* indices, int num_indices, Rocket::Core::TextureHandle texture, const Rocket::Core::Vector2f& translation) { 
     48                GeometryCallData geometryCallData; 
     49                 
     50                for(int i = 0; i < num_vertices; i++) { 
     51                        geometryCallData.vertices.push_back(vertices[i]); 
     52                } 
     53                 
     54                for(int i = 0; i < num_indices; i++) { 
     55                        geometryCallData.indices.push_back(indices[i]); 
     56                } 
     57                 
     58                geometryCallData.textureHandle = texture; 
     59                geometryCallData.translation = translation; 
     60                 
     61                if(m_geometryCalls.empty()) { 
     62                        GeometryCall geometryCall; 
     63                        geometryCall.callChain.push(geometryCallData); 
     64                         
     65                        m_geometryCalls.push(geometryCall); 
     66                } else { 
     67                        GeometryCall& geometryCall = m_geometryCalls.front(); 
     68                        geometryCall.callChain.push(geometryCallData); 
     69                } 
    4770        } 
    4871         
     
    6588         
    6689        void LibRocketRenderInterface::SetScissorRegion(int x, int y, int width, int height) { 
     90                GeometryCall gc; 
     91                 
     92                gc.hasScissorArea = true; 
     93                gc.scissorArea = Rect(x, y, width, height); 
     94                m_geometryCalls.push(gc); 
    6795        } 
    6896         
     
    96124        void LibRocketRenderInterface::ReleaseTexture(Rocket::Core::TextureHandle texture_handle) { 
    97125                 
    98                 ResourceHandle handle = static_cast<ResourceHandle>(texture_handle); 
    99                 ImagePtr texture = m_imageManager->get(handle); 
    100                 texture->free(); 
     126                ResourceHandle rh = static_cast<ResourceHandle>(texture_handle); 
     127                m_freedTextures.push_back(rh); 
     128        } 
     129         
     130        void LibRocketRenderInterface::freeTextures() { 
     131                std::list<ResourceHandle>::iterator it(m_freedTextures.begin()); 
     132                std::list<ResourceHandle>::iterator end(m_freedTextures.end()); 
     133                 
     134                for(; it != end; ++it) { 
     135                        ResourceHandle rh = (*it); 
     136                        ImagePtr texture = m_imageManager->get(rh); 
     137                        texture->free(); 
     138                } 
     139                 
     140                m_freedTextures.clear(); 
    101141        } 
    102142}; 
  • branches/active/gui_enhancements/engine/core/gui/librocket/librocketrenderinterface.h

    r3996 r3997  
    2424 
    2525// Standard C++ library includes 
     26#include <list> 
    2627#include <queue> 
    2728#include <vector> 
     
    3536// Second block: files included from the same folder 
    3637#include "util/base/singleton.h" 
     38#include "util/resource/resource.h" 
    3739 
    3840namespace FIFE { 
     
    8789                virtual void ReleaseTexture(Rocket::Core::TextureHandle texture_handle); 
    8890                 
     91                /** 
     92                 * Frees all textures that are no longer needed by librocket. 
     93                 */ 
     94                void freeTextures(); 
     95                 
    8996        private: 
    9097                 
     
    105112                class GeometryCall { 
    106113                public: 
     114                         
     115                        GeometryCall() : hasScissorArea(false) { } 
     116                         
    107117                        GeometryCallDataChain callChain; 
    108118                        Rect scissorArea; 
     119                        bool hasScissorArea; 
    109120                }; 
    110121                 
    111122                std::queue<GeometryCall> m_geometryCalls; 
     123                 
     124                std::list<ResourceHandle> m_freedTextures; 
    112125        }; 
    113126         
Note: See TracChangeset for help on using the changeset viewer.