Creo que ya lo solucione
converti mi espacio de dibujo en un objeto que
puedo construir y destruir a mi antojo
Código PHP:
----------
#include <gl/gl.h>
// Con eto creo o destruyo segun sea el caso
class EspacioDibujo {
private:
// Datos miembro
int PixelFormat;
HDC hdcFM;
HGLRC hrcFM;
public:
bool EstoyViva;
EspacioDibujo();
// Funciones miembro
void CrearPizarron(HDC MiHDC);
void DestruirPizarron();
void IntercambiaPixels();
};
EspacioDibujo::EspacioDibujo(){
//Aqui iniciamos el dibujo me servira para recargar el dibujo
}
void EspacioDibujo::CrearPizarron(HDC MiHDC){
hdcFM=MiHDC;
PIXELFORMATDESCRIPTOR pfd = {
sizeof(PIXELFORMATDESCRIPTOR),
1,
PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER,
PFD_TYPE_RGBA,
24,
0,0,0,0,0,0,
0,0,
0,0,0,0,0,
32,
0,
0,
PFD_MAIN_PLANE,
0,
0,0,0
};
PixelFormat = ChoosePixelFormat(hdcFM, &pfd);
SetPixelFormat(hdcFM, PixelFormat, &pfd);
hrcFM = wglCreateContext(hdcFM);
wglMakeCurrent(hdcFM, hrcFM);
glClear (GL_COLOR_BUFFER_BIT); // Limpiar el color y el bufer
glLoadIdentity(); // Carga la matriz de identidad
EstoyViva=true;
}
void EspacioDibujo::IntercambiaPixels(){
glFlush();
SwapBuffers(hdcFM);
}
void EspacioDibujo::DestruirPizarron(){
glClear (GL_COLOR_BUFFER_BIT);
glLoadIdentity();
ReleaseDC(hdcFM,hrcFM);
wglMakeCurrent(hdcFM, NULL);
wglDeleteContext(hrcFM);
EstoyViva=false;
}
Lo iniciamos
EspacioDibujo DApoyos;
EspacioDibujo DCargas;
Y destruimos o construimos el dibujo segun sea necesario
if(DCargas.EstoyViva)
DCargas.DestruirPizarron();
DApoyos.CrearPizarron(GetDC(DibApoyos->Handle));
RenderGLScene();
Esa fue la solucion que yo le di no se si alguien me pueda decir
como hacerlo de una manera mas eficiente