[osg-users] SubloadCallback and PBO cleanup

Yurii Monakov monakov.y at gmail.com
Fri Apr 1 00:41:30 PDT 2011


Hi all!

In my OSG application I need to continuously update small parts of 2D
texture. So I use osg::Texture2D::SubloadCallback:

class MyCallback :
    public osg::Texture2D::SubloadCallback
{
	/* initialize texture */
	void load(const Texture2D& texture,State& state) const
	{
		/* get pixel buffer object extension functions */
		osg::PixelBufferObject::Extensions* ext =
			osg::PixelBufferObject::getExtensions(state.getContextID(), true);

		/* generate and cache PBO ID */
		ext->glGenBuffers(1, &m_pbo);

		if(m_pbo)
		{
			/* bind buffer */
			ext->glBindBuffer(GL_PIXEL_UNPACK_BUFFER_ARB, m_pbo);

			/* load texture initial data */

			/* unbind buffer */
			ext->glBindBuffer(GL_PIXEL_UNPACK_BUFFER_ARB, 0);
		}
	}

	void subload(const osg::Texture2D& tex, osg::State& state) const
	{
		/* bind buffer */
		ext->glBindBuffer(GL_PIXEL_UNPACK_BUFFER_ARB, m_pbo);

		/* update some small part of the texture */

		/* unbind buffer */
		ext->glBindBuffer(GL_PIXEL_UNPACK_BUFFER_ARB, 0);
	}
private:
    GLuint m_pbo;
};

And everything works fine until the cleanup stage. In the code above
I've allocated a Pixel Buffer Object. Where should I place it's
deletion function (something like ext->glDeleteBuffers(1, &m_pbo))? Or
I should generate/delete it on every subload call with performance
penalty?



More information about the osg-users mailing list