2
0
Эх сурвалжийг харах

* GLX is part of libGL (or libMesaGL), so don't try to load the lib again
* GLX now uses DLLFuncs, as the GL unit itself

git-svn-id: trunk@1212 -

sg 20 жил өмнө
parent
commit
a7a36239e8

+ 33 - 54
packages/extra/opengl/glx.pp

@@ -168,76 +168,55 @@ var
 
 implementation
 
-{$LINKLIB m}
-
-function dlopen(AFile: PChar; mode: LongInt): Pointer; external 'dl';
-function dlclose(handle: Pointer): LongInt; external 'dl';
-function dlsym(handle: Pointer; name: PChar): Pointer; external 'dl';
+uses GL, DLLFuncs;
 
-function LoadLibrary(name: PChar): Pointer;
-begin
-  Result := dlopen(name, $101 {RTLD_GLOBAL or RTLD_LAZY});
-end;
+{$LINKLIB m}
 
-function GetProc(handle: Pointer; name: PChar): Pointer;
+function GetProc(handle: PtrInt; name: PChar): Pointer;
 begin
-  Result := dlsym(handle, name);
+  Result := GetProcAddress(handle, name);
   if (Result = nil) and GLXDumpUnresolvedFunctions then
     WriteLn('Unresolved: ', name);
 end;
 
-var
-  libGLX: Pointer;
-
-function InitGLXFromLibrary(libname:pchar): Boolean;
+function InitGLX: Boolean;
 begin
   Result := False;
-  libGLX := LoadLibrary(libname);
-  if not Assigned(libGLX) then exit;
-
-  glXChooseVisual := GetProc(libglx, 'glXChooseVisual');
-  glXCreateContext := GetProc(libglx, 'glXCreateContext');
-  glXDestroyContext := GetProc(libglx, 'glXDestroyContext');
-  glXMakeCurrent := GetProc(libglx, 'glXMakeCurrent');
-  glXCopyContext := GetProc(libglx, 'glXCopyContext');
-  glXSwapBuffers := GetProc(libglx, 'glXSwapBuffers');
-  glXCreateGLXPixmap := GetProc(libglx, 'glXCreateGLXPixmap');
-  glXDestroyGLXPixmap := GetProc(libglx, 'glXDestroyGLXPixmap');
-  glXQueryExtension := GetProc(libglx, 'glXQueryExtension');
-  glXQueryVersion := GetProc(libglx, 'glXQueryVersion');
-  glXIsDirect := GetProc(libglx, 'glXIsDirect');
-  glXGetConfig := GetProc(libglx, 'glXGetConfig');
-  glXGetCurrentContext := GetProc(libglx, 'glXGetCurrentContext');
-  glXGetCurrentDrawable := GetProc(libglx, 'glXGetCurrentDrawable');
-  glXWaitGL := GetProc(libglx, 'glXWaitGL');
-  glXWaitX := GetProc(libglx, 'glXWaitX');
-  glXUseXFont := GetProc(libglx, 'glXUseXFont');
+  if libGL = 0 then
+    exit;
+
+  glXChooseVisual := GetProc(LibGL, 'glXChooseVisual');
+  glXCreateContext := GetProc(LibGL, 'glXCreateContext');
+  glXDestroyContext := GetProc(LibGL, 'glXDestroyContext');
+  glXMakeCurrent := GetProc(LibGL, 'glXMakeCurrent');
+  glXCopyContext := GetProc(LibGL, 'glXCopyContext');
+  glXSwapBuffers := GetProc(LibGL, 'glXSwapBuffers');
+  glXCreateGLXPixmap := GetProc(LibGL, 'glXCreateGLXPixmap');
+  glXDestroyGLXPixmap := GetProc(LibGL, 'glXDestroyGLXPixmap');
+  glXQueryExtension := GetProc(LibGL, 'glXQueryExtension');
+  glXQueryVersion := GetProc(LibGL, 'glXQueryVersion');
+  glXIsDirect := GetProc(LibGL, 'glXIsDirect');
+  glXGetConfig := GetProc(LibGL, 'glXGetConfig');
+  glXGetCurrentContext := GetProc(LibGL, 'glXGetCurrentContext');
+  glXGetCurrentDrawable := GetProc(LibGL, 'glXGetCurrentDrawable');
+  glXWaitGL := GetProc(LibGL, 'glXWaitGL');
+  glXWaitX := GetProc(LibGL, 'glXWaitX');
+  glXUseXFont := GetProc(LibGL, 'glXUseXFont');
   // GLX 1.1 and later
-  glXQueryExtensionsString := GetProc(libglx, 'glXQueryExtensionsString');
-  glXQueryServerString := GetProc(libglx, 'glXQueryServerString');
-  glXGetClientString := GetProc(libglx, 'glXGetClientString');
+  glXQueryExtensionsString := GetProc(LibGL, 'glXQueryExtensionsString');
+  glXQueryServerString := GetProc(LibGL, 'glXQueryServerString');
+  glXGetClientString := GetProc(LibGL, 'glXGetClientString');
   // Mesa GLX Extensions
-  glXCreateGLXPixmapMESA := GetProc(libglx, 'glXCreateGLXPixmapMESA');
-  glXReleaseBufferMESA := GetProc(libglx, 'glXReleaseBufferMESA');
-  glXCopySubBufferMESA := GetProc(libglx, 'glXCopySubBufferMESA');
-  glXGetVideoSyncSGI := GetProc(libglx, 'glXGetVideoSyncSGI');
-  glXWaitVideoSyncSGI := GetProc(libglx, 'glXWaitVideoSyncSGI');
+  glXCreateGLXPixmapMESA := GetProc(LibGL, 'glXCreateGLXPixmapMESA');
+  glXReleaseBufferMESA := GetProc(LibGL, 'glXReleaseBufferMESA');
+  glXCopySubBufferMESA := GetProc(LibGL, 'glXCopySubBufferMESA');
+  glXGetVideoSyncSGI := GetProc(LibGL, 'glXGetVideoSyncSGI');
+  glXWaitVideoSyncSGI := GetProc(LibGL, 'glXWaitVideoSyncSGI');
 
   GLXInitialized := True;
   Result := True;
 end;
 
-function InitGLX: Boolean;
-begin
-  Result := InitGLXFromLibrary('libGL.so') or
-            InitGLXFromLibrary('libGL.so.1') or
-            InitGLXFromLibrary('libMesaGL.so') or
-            InitGLXFromLibrary('libMesaGL.so.3');
-end;
-
-
 initialization
   InitGLX;
-finalization
-  if Assigned(libGLX) then dlclose(libGLX);
 end.