winex11.drv: Replace an strdup() with HeapAlloc() in the OpenGL code.
Free the corresponding memory when the library is unloaded.
This commit is contained in:
parent
19020b9ef5
commit
c642481305
|
@ -76,7 +76,7 @@ typedef struct wine_glextension {
|
||||||
|
|
||||||
struct WineGLInfo {
|
struct WineGLInfo {
|
||||||
const char *glVersion;
|
const char *glVersion;
|
||||||
const char *glExtensions;
|
char *glExtensions;
|
||||||
|
|
||||||
int glxVersion[2];
|
int glxVersion[2];
|
||||||
|
|
||||||
|
@ -274,12 +274,13 @@ MAKE_FUNCPTR(glFinish)
|
||||||
MAKE_FUNCPTR(glFlush)
|
MAKE_FUNCPTR(glFlush)
|
||||||
#undef MAKE_FUNCPTR
|
#undef MAKE_FUNCPTR
|
||||||
|
|
||||||
|
static BOOL infoInitialized = FALSE;
|
||||||
static BOOL X11DRV_WineGL_InitOpenglInfo(void)
|
static BOOL X11DRV_WineGL_InitOpenglInfo(void)
|
||||||
{
|
{
|
||||||
static BOOL infoInitialized = FALSE;
|
|
||||||
|
|
||||||
int screen = DefaultScreen(gdi_display);
|
int screen = DefaultScreen(gdi_display);
|
||||||
Window win = RootWindow(gdi_display, screen);
|
Window win = RootWindow(gdi_display, screen);
|
||||||
|
const char* str;
|
||||||
Visual *visual;
|
Visual *visual;
|
||||||
XVisualInfo template;
|
XVisualInfo template;
|
||||||
XVisualInfo *vis;
|
XVisualInfo *vis;
|
||||||
|
@ -318,7 +319,9 @@ static BOOL X11DRV_WineGL_InitOpenglInfo(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
WineGLInfo.glVersion = (const char *) pglGetString(GL_VERSION);
|
WineGLInfo.glVersion = (const char *) pglGetString(GL_VERSION);
|
||||||
WineGLInfo.glExtensions = strdup((const char *) pglGetString(GL_EXTENSIONS));
|
str = (const char *) pglGetString(GL_EXTENSIONS);
|
||||||
|
WineGLInfo.glExtensions = HeapAlloc(GetProcessHeap(), 0, strlen(str)+1);
|
||||||
|
strcpy(WineGLInfo.glExtensions, str);
|
||||||
|
|
||||||
/* Get the common GLX version supported by GLX client and server ( major/minor) */
|
/* Get the common GLX version supported by GLX client and server ( major/minor) */
|
||||||
pglXQueryVersion(gdi_display, &WineGLInfo.glxVersion[0], &WineGLInfo.glxVersion[1]);
|
pglXQueryVersion(gdi_display, &WineGLInfo.glxVersion[0], &WineGLInfo.glxVersion[1]);
|
||||||
|
@ -352,6 +355,12 @@ static BOOL X11DRV_WineGL_InitOpenglInfo(void)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void X11DRV_OpenGL_Cleanup(void)
|
||||||
|
{
|
||||||
|
HeapFree(GetProcessHeap(), 0, WineGLInfo.glExtensions);
|
||||||
|
infoInitialized = FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
static BOOL has_opengl(void)
|
static BOOL has_opengl(void)
|
||||||
{
|
{
|
||||||
static int init_done;
|
static int init_done;
|
||||||
|
|
|
@ -226,6 +226,7 @@ extern int CDECL X11DRV_DescribePixelFormat(X11DRV_PDEVICE *physDev,
|
||||||
PIXELFORMATDESCRIPTOR *ppfd);
|
PIXELFORMATDESCRIPTOR *ppfd);
|
||||||
extern int CDECL X11DRV_GetPixelFormat(X11DRV_PDEVICE *physDev);
|
extern int CDECL X11DRV_GetPixelFormat(X11DRV_PDEVICE *physDev);
|
||||||
extern BOOL CDECL X11DRV_SwapBuffers(X11DRV_PDEVICE *physDev);
|
extern BOOL CDECL X11DRV_SwapBuffers(X11DRV_PDEVICE *physDev);
|
||||||
|
extern void X11DRV_OpenGL_Cleanup(void);
|
||||||
|
|
||||||
/* X11 driver internal functions */
|
/* X11 driver internal functions */
|
||||||
|
|
||||||
|
|
|
@ -587,6 +587,7 @@ static void process_detach(void)
|
||||||
|
|
||||||
/* cleanup GDI */
|
/* cleanup GDI */
|
||||||
X11DRV_GDI_Finalize();
|
X11DRV_GDI_Finalize();
|
||||||
|
X11DRV_OpenGL_Cleanup();
|
||||||
|
|
||||||
IME_UnregisterClasses();
|
IME_UnregisterClasses();
|
||||||
DeleteCriticalSection( &X11DRV_CritSection );
|
DeleteCriticalSection( &X11DRV_CritSection );
|
||||||
|
|
Loading…
Reference in New Issue