Kaydet (Commit) e61fe35e authored tarafından Markus Mohrhard's avatar Markus Mohrhard

prefer ptr_container to manual memory management

Change-Id: I11326c2873aad5116fd70bfa31eb94e93fef3f40
üst c805a996
...@@ -52,6 +52,7 @@ class NSOpenGLView; ...@@ -52,6 +52,7 @@ class NSOpenGLView;
#include <vcl/vclopengl_dllapi.hxx> #include <vcl/vclopengl_dllapi.hxx>
#include <boost/scoped_ptr.hpp> #include <boost/scoped_ptr.hpp>
#include <boost/unordered_map.hpp> #include <boost/unordered_map.hpp>
#include <boost/ptr_container/ptr_map.hpp>
#include <vcl/window.hxx> #include <vcl/window.hxx>
#include <tools/gen.hxx> #include <tools/gen.hxx>
#include <vcl/syschild.hxx> #include <vcl/syschild.hxx>
...@@ -158,30 +159,7 @@ struct GLWindow ...@@ -158,30 +159,7 @@ struct GLWindow
~GLWindow(); ~GLWindow();
}; };
struct ProgramKey typedef std::pair<OUString, OUString> ProgramKey;
{
OUString maVertexShader;
OUString maFragmentShader;
ProgramKey( const OUString& rVertexShader, const OUString& rFragmentShader ):
maVertexShader(rVertexShader),
maFragmentShader(rFragmentShader)
{
}
};
inline bool operator==( ProgramKey const& k1, ProgramKey const& k2 )
{
return k1.maVertexShader == k2.maVertexShader && k1.maFragmentShader == k2.maFragmentShader;
}
inline std::size_t hash_value( ProgramKey const& rKey )
{
std::size_t nSeed = 0x9e3779b9;
nSeed = rKey.maVertexShader.hashCode();
nSeed = rKey.maFragmentShader.hashCode() + 0x9e3779b9 + (nSeed << 6) + (nSeed >> 2);
return nSeed;
}
class VCLOPENGL_DLLPUBLIC OpenGLContext class VCLOPENGL_DLLPUBLIC OpenGLContext
{ {
...@@ -278,7 +256,7 @@ private: ...@@ -278,7 +256,7 @@ private:
OpenGLFramebuffer* mpFirstFramebuffer; OpenGLFramebuffer* mpFirstFramebuffer;
OpenGLFramebuffer* mpLastFramebuffer; OpenGLFramebuffer* mpLastFramebuffer;
boost::unordered_map<ProgramKey, OpenGLProgram*> maPrograms; boost::ptr_map<ProgramKey, OpenGLProgram> maPrograms;
OpenGLProgram* mpCurrentProgram; OpenGLProgram* mpCurrentProgram;
public: public:
......
...@@ -1161,15 +1161,8 @@ void OpenGLContext::reset() ...@@ -1161,15 +1161,8 @@ void OpenGLContext::reset()
// destroy all programs // destroy all programs
if( !maPrograms.empty() ) if( !maPrograms.empty() )
{ {
boost::unordered_map<ProgramKey, OpenGLProgram*>::iterator it;
makeCurrent(); makeCurrent();
it = maPrograms.begin();
while( it != maPrograms.end() )
{
delete it->second;
++it;
}
maPrograms.clear(); maPrograms.clear();
} }
...@@ -1527,9 +1520,9 @@ void OpenGLContext::ReleaseFramebuffers() ...@@ -1527,9 +1520,9 @@ void OpenGLContext::ReleaseFramebuffers()
OpenGLProgram* OpenGLContext::GetProgram( const OUString& rVertexShader, const OUString& rFragmentShader ) OpenGLProgram* OpenGLContext::GetProgram( const OUString& rVertexShader, const OUString& rFragmentShader )
{ {
boost::unordered_map<ProgramKey, OpenGLProgram*>::iterator it;
ProgramKey aKey( rVertexShader, rFragmentShader ); ProgramKey aKey( rVertexShader, rFragmentShader );
boost::ptr_map<ProgramKey, OpenGLProgram>::iterator
it = maPrograms.find( aKey ); it = maPrograms.find( aKey );
if( it != maPrograms.end() ) if( it != maPrograms.end() )
return it->second; return it->second;
...@@ -1541,7 +1534,7 @@ OpenGLProgram* OpenGLContext::GetProgram( const OUString& rVertexShader, const O ...@@ -1541,7 +1534,7 @@ OpenGLProgram* OpenGLContext::GetProgram( const OUString& rVertexShader, const O
return NULL; return NULL;
} }
maPrograms[aKey] = pProgram; maPrograms.insert(aKey, pProgram);
return pProgram; return pProgram;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment