Example #1
0
    Renderbuffer::~Renderbuffer()
    {
      class CleanupTask : public ShareGroupTask
      {
        public:
          CleanupTask( GLuint id ) : m_id( id ) {}

          virtual void execute() { glDeleteRenderbuffers( 1, &m_id ); }

        private:
          GLuint m_id;
      };

      if ( getGLId() && getShareGroup() )
      {
        // make destructor exception safe
        try
        {
          getShareGroup()->executeTask( new CleanupTask( getGLId() ) );
        } catch (...) {}
      }
    }
Example #2
0
    Shader::~Shader( )
    {
      if ( getGLId() )
      {
        if ( getShareGroup() )
        {
          DEFINE_PTR_TYPES( CleanupTask );
          class CleanupTask : public ShareGroupTask
          {
            public:
              static CleanupTaskSharedPtr create( GLuint id )
              {
                return( std::shared_ptr<CleanupTask>( new CleanupTask( id ) ) );
              }

              virtual void execute() { glDeleteShader( m_id ); }

            protected:
              CleanupTask( GLuint id ) : m_id( id ) {}

            private:
              GLuint m_id;
          };

          // make destructor exception safe
          try
          {
            getShareGroup()->executeTask( CleanupTask::create( getGLId() ) );
          } catch (...) {}
        }
        else
        {
          glDeleteShader( getGLId() );
        }
      }
    }