From 9592f68c8e8c5e51267fc28acce709ec56d89aac Mon Sep 17 00:00:00 2001 From: Caspian Rychlik-Prince Date: Tue, 24 Feb 2004 14:31:39 +0000 Subject: [PATCH] New context stuff - complete for win32, incomplete for linux / mac --- platform_build/win32_vs_net/lwjgl.suo | Bin 8192 -> 10240 bytes platform_build/win32_vs_net/lwjgl.vcproj | 102 +++++++++--------- src/java/org/lwjgl/Sys.java | 2 +- src/java/org/lwjgl/opengl/GLContext.java | 42 ++------ src/java/org/lwjgl/opengl/Window.java | 2 +- src/java/org/lwjgl/test/opengl/Game.java | 2 +- src/java/org/lwjgl/test/opengl/Grass.java | 2 +- .../common/org_lwjgl_opengl_GLContext.cpp | 17 +-- .../common/org_lwjgl_opengl_GLContext.h | 12 +-- 9 files changed, 71 insertions(+), 110 deletions(-) diff --git a/platform_build/win32_vs_net/lwjgl.suo b/platform_build/win32_vs_net/lwjgl.suo index 3ed173243649f26b322ce2eea3901093875440e4..e9298d80c9de905cb89abd681c013b896986e0df 100644 GIT binary patch literal 10240 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 uhI5wb{JBTKx6TnP@x)@c!lj~*tB1~#o_qY@KR< + RelativePath="..\..\src\native\common\org_lwjgl_opengl_GL15.cpp"> + + @@ -218,157 +221,160 @@ Name="arb" Filter=""> + RelativePath="..\..\src\native\common\arb\org_lwjgl_opengl_ARBImaging.cpp"> + RelativePath="..\..\src\native\common\arb\org_lwjgl_opengl_ARBMatrixPalette.cpp"> + RelativePath="..\..\src\native\common\arb\org_lwjgl_opengl_ARBMultisample.cpp"> + RelativePath="..\..\src\native\common\arb\org_lwjgl_opengl_ARBMultitexture.cpp"> + RelativePath="..\..\src\native\common\arb\org_lwjgl_opengl_ARBOcclusionQuery.cpp"> + RelativePath="..\..\src\native\common\arb\org_lwjgl_opengl_ARBPointParameters.cpp"> + RelativePath="..\..\src\native\common\arb\org_lwjgl_opengl_ARBProgram.cpp"> + RelativePath="..\..\src\native\common\arb\org_lwjgl_opengl_ARBShaderObjects.cpp"> + RelativePath="..\..\src\native\common\arb\org_lwjgl_opengl_ARBTextureCompression.cpp"> + RelativePath="..\..\src\native\common\arb\org_lwjgl_opengl_ARBTransposeMatrix.cpp"> + RelativePath="..\..\src\native\common\arb\org_lwjgl_opengl_ARBVertexBlend.cpp"> + RelativePath="..\..\src\native\common\arb\org_lwjgl_opengl_ARBVertexBufferObject.cpp"> + RelativePath="..\..\src\native\common\arb\org_lwjgl_opengl_ARBVertexProgram.cpp"> + RelativePath="..\..\src\native\common\arb\org_lwjgl_opengl_ARBVertexShader.cpp"> + + + RelativePath="..\..\src\native\common\ati\org_lwjgl_opengl_ATIDrawBuffers.cpp"> + RelativePath="..\..\src\native\common\ati\org_lwjgl_opengl_ATIElementArray.cpp"> + RelativePath="..\..\src\native\common\ati\org_lwjgl_opengl_ATIEnvmapBumpmap.cpp"> + RelativePath="..\..\src\native\common\ati\org_lwjgl_opengl_ATIFragmentShader.cpp"> + RelativePath="..\..\src\native\common\ati\org_lwjgl_opengl_ATIMapObjectBuffer.cpp"> + RelativePath="..\..\src\native\common\ati\org_lwjgl_opengl_ATIPnTriangles.cpp"> + RelativePath="..\..\src\native\common\ati\org_lwjgl_opengl_ATISeparateStencil.cpp"> + RelativePath="..\..\src\native\common\ati\org_lwjgl_opengl_ATIVertexArrayObject.cpp"> + RelativePath="..\..\src\native\common\ati\org_lwjgl_opengl_ATIVertexAttribArrayObject.cpp"> + RelativePath="..\..\src\native\common\ati\org_lwjgl_opengl_ATIVertexStreams.cpp"> + RelativePath="..\..\src\native\common\ext\org_lwjgl_opengl_EXTBlendFuncSeparate.cpp"> + RelativePath="..\..\src\native\common\ext\org_lwjgl_opengl_EXTCompiledVertexArray.cpp"> + RelativePath="..\..\src\native\common\ext\org_lwjgl_opengl_EXTDrawRangeElements.cpp"> + RelativePath="..\..\src\native\common\ext\org_lwjgl_opengl_EXTFogCoord.cpp"> + RelativePath="..\..\src\native\common\ext\org_lwjgl_opengl_EXTMultiDrawArrays.cpp"> + RelativePath="..\..\src\native\common\ext\org_lwjgl_opengl_EXTPointParameters.cpp"> + RelativePath="..\..\src\native\common\ext\org_lwjgl_opengl_EXTSecondaryColor.cpp"> + RelativePath="..\..\src\native\common\ext\org_lwjgl_opengl_EXTStencilTwoSide.cpp"> + RelativePath="..\..\src\native\common\ext\org_lwjgl_opengl_EXTVertexShader.cpp"> + RelativePath="..\..\src\native\common\ext\org_lwjgl_opengl_EXTVertexWeighting.cpp"> + RelativePath="..\..\src\native\common\nv\org_lwjgl_opengl_NVEvaluators.cpp"> + RelativePath="..\..\src\native\common\nv\org_lwjgl_opengl_NVFence.cpp"> + RelativePath="..\..\src\native\common\nv\org_lwjgl_opengl_NVFragmentProgram.cpp"> + RelativePath="..\..\src\native\common\nv\org_lwjgl_opengl_NVHalfFloat.cpp"> + RelativePath="..\..\src\native\common\nv\org_lwjgl_opengl_NVOcclusionQuery.cpp"> + RelativePath="..\..\src\native\common\nv\org_lwjgl_opengl_NVPixelDataRange.cpp"> + RelativePath="..\..\src\native\common\nv\org_lwjgl_opengl_NVPointSprite.cpp"> + RelativePath="..\..\src\native\common\nv\org_lwjgl_opengl_NVPrimitiveRestart.cpp"> + RelativePath="..\..\src\native\common\nv\org_lwjgl_opengl_NVProgram.cpp"> + RelativePath="..\..\src\native\common\nv\org_lwjgl_opengl_NVRegisterCombiners.cpp"> + RelativePath="..\..\src\native\common\nv\org_lwjgl_opengl_NVRegisterCombiners2.cpp"> + RelativePath="..\..\src\native\common\nv\org_lwjgl_opengl_NVVertexArrayRange.cpp"> + RelativePath="..\..\src\native\common\nv\org_lwjgl_opengl_NVVertexProgram.cpp"> diff --git a/src/java/org/lwjgl/Sys.java b/src/java/org/lwjgl/Sys.java index ab2aa5b5..60f5f532 100644 --- a/src/java/org/lwjgl/Sys.java +++ b/src/java/org/lwjgl/Sys.java @@ -204,7 +204,7 @@ public final class Sys { */ public static void alert(String title, String message) { String osName = System.getProperty("os.name"); - if (osName.startsWith("Windoxws")) { + if (osName.startsWith("Windows")) { nAlert(title, message); } else { try { diff --git a/src/java/org/lwjgl/opengl/GLContext.java b/src/java/org/lwjgl/opengl/GLContext.java index 99fc43b2..05aedd2d 100644 --- a/src/java/org/lwjgl/opengl/GLContext.java +++ b/src/java/org/lwjgl/opengl/GLContext.java @@ -35,9 +35,7 @@ package org.lwjgl.opengl; import java.lang.ref.WeakReference; import java.lang.reflect.Field; import java.lang.reflect.Modifier; -import java.util.HashMap; import java.util.HashSet; -import java.util.Map; import java.util.Set; import org.lwjgl.Sys; @@ -56,13 +54,7 @@ public final class GLContext { /** The currently initialised context */ private static WeakReference currentContext; - - /** A map of WeakReferences to contexts to LWJGL pointers-to-extension-structs */ - private static final Map contextMap = new HashMap(); - - /** A map of WeakReferences to contents to Sets of extension names */ - private static final Map extensionsMap = new HashMap(); - + /* * Available extensions */ @@ -212,7 +204,10 @@ public final class GLContext { * in the future, freeing up a little RAM. * @param context The context object, which uniquely identifies a GL context */ - public static synchronized void setContext(Object context) { + public static synchronized void useContext(Object context) { + if (context == null) { + throw new NullPointerException("Can't use a null context"); + } // Is this the same as last time? Object current = currentContext == null ? null : currentContext.get(); if (current == context) { @@ -222,35 +217,16 @@ public final class GLContext { // Ok, now it's the current context. currentContext = new WeakReference(context); - - // Look in the context map to see if we've encountered this context before - Integer encountered = (Integer) contextMap.get(currentContext); - Set exts; - if (encountered != null) { - exts = (Set) extensionsMap.get(currentContext); - reinit(encountered.intValue()); - } else { - exts = new HashSet(); - contextMap.put(currentContext, new Integer(init(exts))); - } - + HashSet exts = new HashSet(); + init(exts); determineAvailableExtensions(exts); - VBOTracker.setCurrent(currentContext); } /** - * Native method to initialize a context from scratch or load its function pointers from a - * cache. + * Native method to initialize a context * @param exts An empty Set of Strings that will be filled with the names of enabled extensions - * @return a LWJGL context-index-pointer */ - private static native int init(Set exts); - - /** - * Native method to re-initialize a context. - * @param context Hash code of the context object - */ - private static native void reinit(int context); + private static native void init(Set exts); } diff --git a/src/java/org/lwjgl/opengl/Window.java b/src/java/org/lwjgl/opengl/Window.java index 21886231..15af28dd 100644 --- a/src/java/org/lwjgl/opengl/Window.java +++ b/src/java/org/lwjgl/opengl/Window.java @@ -225,7 +225,7 @@ public final class Window { public static synchronized void makeCurrent() { assert isCreated() : "No window has been created."; nMakeCurrent(); - GLContext.setContext(context); + GLContext.useContext(context); } /** diff --git a/src/java/org/lwjgl/test/opengl/Game.java b/src/java/org/lwjgl/test/opengl/Game.java index 06416862..aa07c053 100644 --- a/src/java/org/lwjgl/test/opengl/Game.java +++ b/src/java/org/lwjgl/test/opengl/Game.java @@ -185,7 +185,7 @@ public final class Game { GL11.glMatrixMode(GL11.GL_MODELVIEW); GL11.glLoadIdentity(); GL11.glViewport(0, 0, Display.getWidth(), Display.getHeight()); - ByteBuffer num_tex_units_buf = ByteBuffer.allocateDirect(4); + ByteBuffer num_tex_units_buf = ByteBuffer.allocateDirect(64); num_tex_units_buf.order(ByteOrder.nativeOrder()); GL11.glGetInteger(GL13.GL_MAX_TEXTURE_UNITS, num_tex_units_buf.asIntBuffer()); System.out.println("Number of texture units: " + num_tex_units_buf.getInt()); diff --git a/src/java/org/lwjgl/test/opengl/Grass.java b/src/java/org/lwjgl/test/opengl/Grass.java index 8f9dd5ca..e4fde497 100644 --- a/src/java/org/lwjgl/test/opengl/Grass.java +++ b/src/java/org/lwjgl/test/opengl/Grass.java @@ -81,7 +81,7 @@ public class Grass { mode = i; break; } - } + } if (mode == -1) { System.out.println("did not find suitable mode"); diff --git a/src/native/common/org_lwjgl_opengl_GLContext.cpp b/src/native/common/org_lwjgl_opengl_GLContext.cpp index e671b074..0376b0dd 100644 --- a/src/native/common/org_lwjgl_opengl_GLContext.cpp +++ b/src/native/common/org_lwjgl_opengl_GLContext.cpp @@ -37,25 +37,12 @@ /* * Class: org_lwjgl_opengl_GLContext * Method: init - * Signature: (Ljava/util/Set;)I + * Signature: (Ljava/util/Set;)V */ -JNIEXPORT jint JNICALL Java_org_lwjgl_opengl_GLContext_init +JNIEXPORT void JNICALL Java_org_lwjgl_opengl_GLContext_init (JNIEnv * env, jclass clazz, jobject exts) { if (!extgl_Initialize(env, exts)) { throwException(env, "Failed to initialize GL extensions"); - return -1; } - - return 0; } - -/* - * Class: org_lwjgl_opengl_GLContext - * Method: reinit - * Signature: (I)V - */ -JNIEXPORT void JNICALL Java_org_lwjgl_opengl_GLContext_reinit - (JNIEnv * env, jclass clazz, jint context) -{ -} \ No newline at end of file diff --git a/src/native/common/org_lwjgl_opengl_GLContext.h b/src/native/common/org_lwjgl_opengl_GLContext.h index e643ade9..e125ab47 100644 --- a/src/native/common/org_lwjgl_opengl_GLContext.h +++ b/src/native/common/org_lwjgl_opengl_GLContext.h @@ -119,19 +119,11 @@ extern "C" { /* * Class: org_lwjgl_opengl_GLContext * Method: init - * Signature: (Ljava/util/Set;)I + * Signature: (Ljava/util/Set;)V */ -JNIEXPORT jint JNICALL Java_org_lwjgl_opengl_GLContext_init +JNIEXPORT void JNICALL Java_org_lwjgl_opengl_GLContext_init (JNIEnv *, jclass, jobject); -/* - * Class: org_lwjgl_opengl_GLContext - * Method: reinit - * Signature: (I)V - */ -JNIEXPORT void JNICALL Java_org_lwjgl_opengl_GLContext_reinit - (JNIEnv *, jclass, jint); - #ifdef __cplusplus } #endif