From 2df3bea10859ee2f2c4b3622f3b610b17a5749d6 Mon Sep 17 00:00:00 2001
From: Sven Gothel <sgothel@jausoft.com>
Date: Tue, 13 Apr 2010 21:24:44 +0200
Subject: ATI (fglrx) PBuffer/X11Display bug workaround/cleanup

    - See https://bugzilla.mozilla.org/show_bug.cgi?id=486277

    - Description:
        - To use PBuffer, a context must be current

        - X11Display cannot be switched while using the PBuffer
          [within one thread]. Hence we shall try harder to reuse
          _the_ user configured X11Display - whenever possible.
          This is actually a good thing, ie cleanup up our
          code again.

    - Changes to workaround/cleanup:
        - GLDrawableFactory* methods 'canCreate*()'
          are changed to 'canCreate*(AbstractGraphicsDevice)'
          to allow pipelining the X11Display.
          This reduces the overhead of using a local TLS X11Display.

    - WindowsDummyWGLDrawable cstr gets the GLProfile as a parameter now,
      this is done while adding X11DummyGLXDrawable - forseeing the
      usecase to query available GLProfiles at startup.

    - X11DummyGLXDrawable added, following the WindowsDummyWGLDrawable path
      to have a dummy GLContext current to fix the ATI bug.

NativeWindow X11:
    - Add XIOErrorHandler to identify the fatal failure
      of closing a Display (-> ATI bug).

Build:
    - Adding ant.jar and ant-junit.jar to the junit compile/run classpath
    -

Misc:
    - Fix: CreateDummyWindow(..) returns a HWND, not a HDC
    - mapToRealGLFunctionName: Added mapping for X11/GLX.
    - X11GLXGraphicsConfigurationFactory: Uncommented dead code 'createDefaultGraphicsConfigurationFBConfig'

Tests: Passed (Linux64bit: NVidia/ATI)

Todo: More tests on ATI, especially multithreading/X11Display usage.
---
 .../com/jogamp/opengl/impl/GLContextImpl.java      | 26 ++++++++++++++++++----
 1 file changed, 22 insertions(+), 4 deletions(-)

(limited to 'src/jogl/classes/com/jogamp/opengl/impl/GLContextImpl.java')

diff --git a/src/jogl/classes/com/jogamp/opengl/impl/GLContextImpl.java b/src/jogl/classes/com/jogamp/opengl/impl/GLContextImpl.java
index 893827a8c..7543a1084 100644
--- a/src/jogl/classes/com/jogamp/opengl/impl/GLContextImpl.java
+++ b/src/jogl/classes/com/jogamp/opengl/impl/GLContextImpl.java
@@ -41,6 +41,7 @@ package com.jogamp.opengl.impl;
 
 import com.jogamp.common.os.DynamicLookupHelper;
 import java.nio.*;
+import java.util.*;
 
 import javax.media.opengl.*;
 import com.jogamp.nativewindow.impl.NWReflection;
@@ -346,13 +347,30 @@ public abstract class GLContextImpl extends GLContext {
   /** Maps the given "platform-independent" function name to a real function
       name. Currently this is only used to map "glAllocateMemoryNV" and
       associated routines to wglAllocateMemoryNV / glXAllocateMemoryNV. */
-  protected abstract String mapToRealGLFunctionName(String glFunctionName);
+  protected String mapToRealGLFunctionName(String glFunctionName) {
+    Map/*<String, String>*/ map = getFunctionNameMap();
+    String lookup = ( null != map ) ? (String) map.get(glFunctionName) : null;
+    if (lookup != null) {
+      return lookup;
+    }
+    return glFunctionName;
+  }
+  protected abstract Map/*<String, String>*/ getFunctionNameMap() ;
 
   /** Maps the given "platform-independent" extension name to a real
       function name. Currently this is only used to map
-      "GL_ARB_pbuffer" and "GL_ARB_pixel_format" to "WGL_ARB_pbuffer"
-      and "WGL_ARB_pixel_format" (not yet mapped to X11). */
-  protected abstract String mapToRealGLExtensionName(String glExtensionName);
+      "GL_ARB_pbuffer"      to  "WGL_ARB_pbuffer/GLX_SGIX_pbuffer" and 
+      "GL_ARB_pixel_format" to  "WGL_ARB_pixel_format/n.a." 
+   */
+  protected String mapToRealGLExtensionName(String glExtensionName) {
+    Map/*<String, String>*/ map = getExtensionNameMap();
+    String lookup = ( null != map ) ? (String) map.get(glExtensionName) : null;
+    if (lookup != null) {
+      return lookup;
+    }
+    return glExtensionName;
+  }
+  protected abstract Map/*<String, String>*/ getExtensionNameMap() ;
 
   /** Helper routine which resets a ProcAddressTable generated by the
       GLEmitter by looking up anew all of its function pointers. */
-- 
cgit v1.2.3