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;
#include <vcl/vclopengl_dllapi.hxx>
#include <boost/scoped_ptr.hpp>
#include <boost/unordered_map.hpp>
#include <boost/ptr_container/ptr_map.hpp>
#include <vcl/window.hxx>
#include <tools/gen.hxx>
#include <vcl/syschild.hxx>
......@@ -158,30 +159,7 @@ struct GLWindow
~GLWindow();
};
struct 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;
}
typedef std::pair<OUString, OUString> ProgramKey;
class VCLOPENGL_DLLPUBLIC OpenGLContext
{
......@@ -278,7 +256,7 @@ private:
OpenGLFramebuffer* mpFirstFramebuffer;
OpenGLFramebuffer* mpLastFramebuffer;
boost::unordered_map<ProgramKey, OpenGLProgram*> maPrograms;
boost::ptr_map<ProgramKey, OpenGLProgram> maPrograms;
OpenGLProgram* mpCurrentProgram;
public:
......
......@@ -1161,15 +1161,8 @@ void OpenGLContext::reset()
// destroy all programs
if( !maPrograms.empty() )
{
boost::unordered_map<ProgramKey, OpenGLProgram*>::iterator it;
makeCurrent();
it = maPrograms.begin();
while( it != maPrograms.end() )
{
delete it->second;
++it;
}
maPrograms.clear();
}
......@@ -1527,10 +1520,10 @@ void OpenGLContext::ReleaseFramebuffers()
OpenGLProgram* OpenGLContext::GetProgram( const OUString& rVertexShader, const OUString& rFragmentShader )
{
boost::unordered_map<ProgramKey, OpenGLProgram*>::iterator it;
ProgramKey aKey( rVertexShader, rFragmentShader );
it = maPrograms.find( aKey );
boost::ptr_map<ProgramKey, OpenGLProgram>::iterator
it = maPrograms.find( aKey );
if( it != maPrograms.end() )
return it->second;
......@@ -1541,7 +1534,7 @@ OpenGLProgram* OpenGLContext::GetProgram( const OUString& rVertexShader, const O
return NULL;
}
maPrograms[aKey] = pProgram;
maPrograms.insert(aKey, 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