From f15696d84ac8d34bcb66b2c9c37889f11ba15e83 Mon Sep 17 00:00:00 2001 From: Ioannis Tsakpinis Date: Thu, 10 Nov 2011 18:46:43 +0000 Subject: [PATCH] Changed CallbackUtil to use ContextCapabilities instead of ContextGL. --- src/java/org/lwjgl/opengl/CallbackUtil.java | 23 ++++++++++++--------- src/java/org/lwjgl/opengl/Context.java | 1 - src/java/org/lwjgl/opengl/GLContext.java | 11 ++++++++++ 3 files changed, 24 insertions(+), 11 deletions(-) diff --git a/src/java/org/lwjgl/opengl/CallbackUtil.java b/src/java/org/lwjgl/opengl/CallbackUtil.java index 20f0b14a..20c51504 100644 --- a/src/java/org/lwjgl/opengl/CallbackUtil.java +++ b/src/java/org/lwjgl/opengl/CallbackUtil.java @@ -42,9 +42,9 @@ import java.util.Map; final class CallbackUtil { /** Context -> Long */ - private static final Map contextUserParamsARB = new HashMap(); + private static final Map contextUserParamsARB = new HashMap(); /** Context -> Long */ - private static final Map contextUserParamsAMD = new HashMap(); + private static final Map contextUserParamsAMD = new HashMap(); private CallbackUtil() {} @@ -84,19 +84,19 @@ final class CallbackUtil { * * @param userParam the global reference pointer */ - private static void registerContextCallback(final long userParam, final Map contextUserData) { - ContextGL context = ContextGL.getCurrentContext(); - if ( context == null ) { + private static void registerContextCallback(final long userParam, final Map contextUserData) { + ContextCapabilities caps = GLContext.getCapabilities(); + if ( caps == null ) { deleteGlobalRef(userParam); throw new IllegalStateException("No context is current."); } - final Long userParam_old = contextUserData.remove(context); + final Long userParam_old = contextUserData.remove(caps); if ( userParam_old != null ) deleteGlobalRef(userParam_old); if ( userParam != 0 ) - contextUserData.put(context, userParam); + contextUserData.put(caps, userParam); } /** @@ -104,12 +104,15 @@ final class CallbackUtil { * * @param context the Context to unregister */ - static void unregisterCallbacks(final ContextGL context) { - Long userParam = contextUserParamsARB.remove(context); + static void unregisterCallbacks(final Object context) { + // TODO: This is never called for custom contexts. Need to fix for LWJGL 3.0 + final ContextCapabilities caps = GLContext.getCapabilities(context); + + Long userParam = contextUserParamsARB.remove(caps); if ( userParam != null ) deleteGlobalRef(userParam); - userParam = contextUserParamsAMD.remove(context); + userParam = contextUserParamsAMD.remove(caps); if ( userParam != null ) deleteGlobalRef(userParam); } diff --git a/src/java/org/lwjgl/opengl/Context.java b/src/java/org/lwjgl/opengl/Context.java index 4054a0fb..15978e14 100644 --- a/src/java/org/lwjgl/opengl/Context.java +++ b/src/java/org/lwjgl/opengl/Context.java @@ -32,7 +32,6 @@ package org.lwjgl.opengl; import org.lwjgl.LWJGLException; -import org.lwjgl.opengles.PowerManagementEventException; /** * @author Spasi diff --git a/src/java/org/lwjgl/opengl/GLContext.java b/src/java/org/lwjgl/opengl/GLContext.java index 2989bb9c..5524993a 100644 --- a/src/java/org/lwjgl/opengl/GLContext.java +++ b/src/java/org/lwjgl/opengl/GLContext.java @@ -130,6 +130,17 @@ public final class GLContext { return getThreadLocalCapabilities(); } + /** + * Returns the capabilities instance associated with the specified context object. + * + * @param context the context object + * + * @return the capabilities instance + */ + static ContextCapabilities getCapabilities(Object context) { + return capability_cache.get(context); + } + private static ContextCapabilities getThreadLocalCapabilities() { return current_capabilities.get(); }