El objeto OpenGL en la clase C ++ RAII ya no funciona
Tengo un objeto OpenGL en una clase de C ++. Como estoy empleando RAII, quiero que el destructor lo elimine. Entonces mi clase se parece a:
class BufferObject
{
private:
GLuint buff_;
public:
BufferObject()
{
glGenBuffers(1, &buff_);
}
~BufferObject()
{
glDeleteBuffers(1, &buff_);
}
//Other members.
};
Esto parece que funciona. Pero cada vez que hago algo de lo siguiente, empiezo a recibir varios errores de OpenGL cuando lo uso:
vector<BufferObject> bufVec;
{
BufferObject some_buffer;
//Initialize some_buffer;
bufVec.push_back(some_buffer);
}
bufVec.back(); //buffer doesn't work.
BufferObject InitBuffer()
{
BufferObject buff;
//Do stuff with `buff`
return buff;
}
auto buff = InitBuffer(); //Returned buffer doesn't work.
¿Que esta pasando?
Nota: este es un intento de construir una respuesta canónica a estas preguntas.