aboutsummaryrefslogtreecommitdiffstats
path: root/src/native/ogl/DrawingSurfaceObjectAWT.c
diff options
context:
space:
mode:
authorKevin Rushforth <[email protected]>2004-06-09 04:25:41 +0000
committerKevin Rushforth <[email protected]>2004-06-09 04:25:41 +0000
commit343b658c32a6473c545187c1e276ee5d06c2686a (patch)
treead2606538b7db1c3553c53a79ccccb2ed5b5e4e2 /src/native/ogl/DrawingSurfaceObjectAWT.c
parent06cebb1e576da6f7222f999ab059dcfa3d8edd39 (diff)
Initial creation of j3d-core-utils sources in CVS repository
git-svn-id: https://svn.java.net/svn/j3d-core~svn/trunk@7 ba19aa83-45c5-6ac9-afd3-db810772062c
Diffstat (limited to 'src/native/ogl/DrawingSurfaceObjectAWT.c')
-rw-r--r--src/native/ogl/DrawingSurfaceObjectAWT.c268
1 files changed, 268 insertions, 0 deletions
diff --git a/src/native/ogl/DrawingSurfaceObjectAWT.c b/src/native/ogl/DrawingSurfaceObjectAWT.c
new file mode 100644
index 0000000..71e4376
--- /dev/null
+++ b/src/native/ogl/DrawingSurfaceObjectAWT.c
@@ -0,0 +1,268 @@
+/*
+ * $RCSfile$
+ *
+ * Copyright (c) 2004 Sun Microsystems, Inc. All rights reserved.
+ *
+ * Use is subject to license terms.
+ *
+ * $Revision$
+ * $Date$
+ * $State$
+ */
+
+/*
+ * Portions of this code were derived from work done by the Blackdown
+ * group (www.blackdown.org), who did the initial Linux implementation
+ * of the Java 3D API.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+#include <jawt_md.h>
+
+#ifdef DEBUG
+/* Uncomment the following for VERBOSE debug messages */
+/* #define VERBOSE */
+#endif /* DEBUG */
+
+
+#if defined(SOLARIS) || defined(__linux__)
+#pragma weak JAWT_GetAWT
+#endif
+
+#ifdef SOLARIS
+#pragma weak XDgaGetXineramaInfo
+
+/*
+ * The following include file contains the definitions of unsupported,
+ * undocumented data structures and functions used to implement Xinerama.
+ * They are also used by the Solaris implementations of OpenGL and AWT. This
+ * is an interim solution until they are made part of the X Window System
+ * standard or replaced with a fully supported API.
+ */
+#include "panoramiXext.h"
+#endif /* SOLARIS */
+
+
+JNIEXPORT jlong JNICALL
+Java_javax_media_j3d_MasterControl_getAWT(
+ JNIEnv *env, jobject obj)
+{
+ JAWT *awt;
+
+ awt = (JAWT*) malloc(sizeof(JAWT));
+ if (awt == NULL) {
+ fprintf(stderr, "malloc failed\n");
+ return 0;
+ }
+
+ awt->version = JAWT_VERSION_1_4;
+
+ if (JAWT_GetAWT(env, awt) == JNI_FALSE) {
+ fprintf(stderr, "AWT not found\n");
+ return 0;
+ }
+ return (jlong)awt;
+}
+
+JNIEXPORT
+jlong JNICALL
+Java_javax_media_j3d_DrawingSurfaceObjectAWT_getDrawingSurfaceAWT(
+ JNIEnv *env,
+ jobject obj,
+ jobject canvas,
+ jlong awtObj)
+{
+ JAWT *awt = (JAWT*) awtObj;
+ JAWT_DrawingSurface *ds;
+
+ ds = awt->GetDrawingSurface(env, canvas);
+ if (ds == NULL) {
+ fprintf(stderr, "NULL drawing surface\n");
+ return 0;
+ }
+ return (jlong)ds;
+}
+
+
+JNIEXPORT
+jint JNICALL
+Java_javax_media_j3d_DrawingSurfaceObjectAWT_getDrawingSurfaceWindowIdAWT(
+ JNIEnv *env,
+ jobject obj,
+ jobject canvas,
+ jlong dsObj,
+ jlong dsiObj,
+ jlong display,
+ jint screen,
+ jboolean xineramaDisabled)
+{
+ JAWT_DrawingSurface *ds = (JAWT_DrawingSurface*) dsObj;
+ JAWT_DrawingSurfaceInfo *dsi = (JAWT_DrawingSurfaceInfo *) dsiObj;
+ jint window;
+
+#ifdef WIN32
+ JAWT_Win32DrawingSurfaceInfo *wds =
+ (JAWT_Win32DrawingSurfaceInfo*) dsi->platformInfo;
+ window = (jint)wds->hdc;
+#endif /* WIN32 */
+
+#ifdef SOLARIS
+ JAWT_X11DrawingSurfaceInfo *xds =
+ (JAWT_X11DrawingSurfaceInfo*) dsi->platformInfo;
+ window = (jint)xds->drawable;
+
+ if (xineramaDisabled) {
+ XineramaInfo xineramaInfo;
+
+#ifdef VERBOSE
+ fprintf(stderr, "getDrawingSurfaceWindowIdAWT: Xinerama disabled\n");
+#endif /* VERBOSE */
+
+ /*
+ * The existence of the weak symbol XDgaGetXineramaInfo is checked in
+ * the native MasterControl.initializeJ3D(); execution will not get
+ * here if it is unbound.
+ */
+ if (XDgaGetXineramaInfo((Display *)display,
+ xds->drawable, &xineramaInfo)) {
+
+ /* return Xinerama subwid instead of primary Xinerama wid */
+ window = (jint)xineramaInfo.subs[screen].wid;
+
+#ifdef VERBOSE
+ fprintf(stderr,
+ " subwid for display %d screen %d window %d: %d\n",
+ (Display *)display, screen, xds->drawable, window);
+#endif /* VERBOSE */
+ }
+ else {
+ window = (jint)xds->drawable;
+ fprintf(stderr, "Get Xinerama subwid, screen %d failed\n", screen);
+ }
+ }
+#endif /* SOLARIS */
+
+#ifdef __linux__
+ JAWT_X11DrawingSurfaceInfo *xds =
+ (JAWT_X11DrawingSurfaceInfo*) dsi->platformInfo;
+ window = (jint)xds->drawable;
+#endif /* __linux__ */
+
+ /*
+ * Don't free DrawingSurfaceInfo here, otherwise
+ * HDC will free in windows JDK1.4 and window
+ * is invalid.
+ */
+ ds->env = env;
+ ds->Unlock(ds);
+
+ return window;
+}
+
+
+
+JNIEXPORT
+jlong JNICALL
+Java_javax_media_j3d_DrawingSurfaceObjectAWT_getDrawingSurfaceInfo(
+ JNIEnv *env,
+ jobject obj,
+ jlong dsObj)
+{
+ JAWT_DrawingSurface *ds = (JAWT_DrawingSurface*) dsObj;
+ JAWT_DrawingSurfaceInfo *dsi;
+ jint lock;
+
+ ds->env = env;
+ lock = ds->Lock(ds);
+ if ((lock & JAWT_LOCK_ERROR) != 0) {
+ fprintf(stderr, "Error locking surface\n");
+ return 0;
+ }
+
+ dsi = ds->GetDrawingSurfaceInfo(ds);
+
+ if (dsi == NULL) {
+ fprintf(stderr, "Error GetDrawingSurfaceInfo\n");
+ ds->Unlock(ds);
+ return 0;
+ }
+ return (jlong)dsi;
+}
+
+JNIEXPORT
+jboolean JNICALL Java_javax_media_j3d_DrawingSurfaceObjectAWT_lockAWT(
+ JNIEnv *env,
+ jobject obj,
+ jlong drawingSurface)
+{
+ JAWT_DrawingSurface *ds = (JAWT_DrawingSurface*)drawingSurface;
+ jint lock;
+
+ ds->env = env;
+ lock = ds->Lock(ds);
+
+ if ((lock & JAWT_LOCK_ERROR) != 0) {
+ return JNI_FALSE;
+ } else if ((lock & JAWT_LOCK_SURFACE_CHANGED) != 0) {
+ ds->Unlock(ds);
+ return JNI_FALSE;
+ } else {
+ return JNI_TRUE;
+ }
+}
+
+JNIEXPORT
+void JNICALL Java_javax_media_j3d_DrawingSurfaceObjectAWT_unlockAWT(
+ JNIEnv *env,
+ jobject obj,
+ jlong drawingSurface)
+{
+ JAWT_DrawingSurface *ds = (JAWT_DrawingSurface*)drawingSurface;
+ ds->env = env;
+ ds->Unlock(ds);
+}
+
+
+JNIEXPORT
+void JNICALL Java_javax_media_j3d_DrawingSurfaceObjectAWT_lockGlobal(
+ JNIEnv *env,
+ jclass obj,
+ jlong awt)
+{
+ ((JAWT *) awt)->Lock(env);
+}
+
+
+JNIEXPORT
+void JNICALL Java_javax_media_j3d_DrawingSurfaceObjectAWT_unlockGlobal(
+ JNIEnv *env,
+ jclass obj,
+ jlong awt)
+{
+ ((JAWT *) awt)->Unlock(env);
+}
+
+
+
+JNIEXPORT
+void JNICALL Java_javax_media_j3d_DrawingSurfaceObjectAWT_freeResource(
+ JNIEnv *env,
+ jobject obj,
+ jlong awtObj,
+ jlong drawingSurface,
+ jlong drawingSurfaceInfo)
+{
+ JAWT *awt = (JAWT*) awtObj;
+ JAWT_DrawingSurface *ds = (JAWT_DrawingSurface*)drawingSurface;
+ JAWT_DrawingSurfaceInfo *dsi = (JAWT_DrawingSurfaceInfo *) drawingSurfaceInfo;
+
+ ds->env = env;
+ ds->FreeDrawingSurfaceInfo(dsi);
+ awt->FreeDrawingSurface(ds);
+}
+
+
+