aboutsummaryrefslogtreecommitdiffstats
path: root/src
Commit message (Expand)AuthorAgeFilesLines
* GlueGen JogampVersion Adaption (getInfo -> toStringBuffer/toString)Sven Gothel2010-11-144-8/+8
* ExtensionAvailabilityCache: Only use glGetStringi() is real GL >= 3.1 contextSven Gothel2010-11-132-18/+16
* Adapt to GlueGen Version changes; Adding NativeWindowVersion, JoglVersion and...Sven Gothel2010-11-127-43/+180
* AbstractGraphicsDevice ..: Add device/display connection attribute to support...Sven Gothel2010-11-1211-24/+42
* Use GlueGen VersionUtil to dump full Manifest versionSven Gothel2010-11-102-63/+12
* The 'shared resource' thread must be a deamon, otherwise the application won'...Sven Gothel2010-11-091-1/+3
* Adding simple static main test entry to provide standalone autobuild verifica...Sven Gothel2010-11-093-0/+89
* Removed no more used (see f47e8be170731d75a8b6002621a1541f90160465) and prori...Sven Gothel2010-11-081-222/+0
* Reformated license tag; Added Khronos licenseSven Gothel2010-11-081-29/+27
* Fix imports ..Sven Gothel2010-11-077-32/+82
* Fix NativeSignatureJavaMethodBindingEmitter usage; Fix importsSven Gothel2010-11-071-11/+9
* Gluegen parts in src/gluegen (clean)Sven Gothel2010-11-0710-9/+5
* Gluegen parts in src/gluegen ; Renamed com.sun.gluegen -> com.jogamp.gluegen ..Sven Gothel2010-11-068-6/+16
* Relocation: GlueGen GL Parts to JoglSven Gothel2010-11-063-0/+981
|\
| * Renamed com.sun.gluegen -> com.jogamp.gluegenSven Gothel2010-11-063-17/+24
| * refactoring and code cleanup in gluegen.opengl and gluegen.procaddress package.Michael Bien2010-03-312-129/+125
| * renamed BufferFactory into Buffers.Michael Bien2010-03-291-17/+17
| * Cleanup for a better OpenGL 3.2 integration,Sven Gothel2009-08-052-4/+4
| * Copied JOGL_2_SANDBOX r145 on to trunk; JOGL_2_SANDBOX branch is now closedKenneth Russel2009-06-153-0/+978
| * Deleted obsolete source code in preparation for copying JOGL_2_SANDBOXKenneth Russel2009-06-153-978/+0
| * Fixed Issue 6: unqualified class names in generated java code Kenneth Russel2008-04-191-2/+2
| * Applied fix from user GKW on javagaming.org forums for building from Kenneth Russel2006-05-031-0/+1
| * Added NativeSignatureEmitterKenneth Russel2006-03-062-0/+674
| * Moved GlueGen out of the JOGL workspace and into its own project. Kenneth Russel2006-01-151-0/+303
* Gluegen parts in src/gluegen ; Renamed com.sun.gluegen -> com.jogamp.gluegenSven Gothel2010-11-067-14/+14
* Relocation: GlueGen GL Parts to JoglSven Gothel2010-11-067-0/+2563
|\
| * Updated list of OpenGL extension vendor suffixesSven Gothel2010-11-041-0/+6
| * LICENSE.txt changes:Sven Gothel2010-09-141-25/+26
| * Fix GLProcAddressResolver regression: Loop through all names until found or n...Sven Gothel2010-04-271-8/+8
| * Refactored ProcAddressTable generation.Michael Bien2010-04-242-5/+66
| * Add emitting is|get GL4|GL4bcSven Gothel2010-04-151-0/+4
| * gluegen imports now com.jogamp.common.nio.* and java.nio.* instead of using F...Michael Bien2010-04-081-0/+2
| * fixed generated imports rudimentary (not DRY).. cleanup in work.Michael Bien2010-03-311-10/+8
| * refactoring and code cleanup in gluegen.opengl and gluegen.procaddress package.Michael Bien2010-03-315-1874/+1808
| * renamed BufferFactory into Buffers.Michael Bien2010-03-291-1/+1
| * com.sun.opengl -> com.jogamp.opengl.Michael Bien2010-03-271-1/+1
| * renamed com.sun.gluegen.runtime -> com.jogamp.gluegen.runtime.Michael Bien2010-03-275-10/+10
| * continued with code cleanup in com.sun.gluegen.cgram and com.sun.gluegen.open...Michael Bien2009-12-024-109/+92
| * Add GL3bc to OpenGL composable pipelineSven Gothel2009-10-181-0/+2
| * Add <br> in commentSven Gothel2009-08-052-2/+2
| * Fix: Remove PFD_ defines. Add GL Option: AllowNonGLExtensions <bool> to allow...Sven Gothel2009-08-054-21/+41
| * Fix: Allow all constanst defined by enums; Add PFD_ defines.Sven Gothel2009-08-052-2/+11
| * Fix: Add unsigned qualifier, CGL and GLUSven Gothel2009-08-051-4/+4
| * Cleanup for a better OpenGL 3.2 integration,Sven Gothel2009-08-054-52/+110
| * OpenGL: Add comment: Part of <extension>Sven Gothel2009-08-023-3/+41
| * Retain interface order in Custom PipelineSven Gothel2009-08-011-4/+18
| * refine Trace/Debug outputSven Gothel2009-08-011-7/+7
| * Add GL2GL3 synthetic methods for OpenGL Composable Pipelinesg2158892009-07-291-0/+2
| * Copied JOGL_2_SANDBOX r145 on to trunk; JOGL_2_SANDBOX branch is now closedKenneth Russel2009-06-156-0/+2431
| * Deleted obsolete source code in preparation for copying JOGL_2_SANDBOXKenneth Russel2009-06-155-1419/+0
pan class="hl opt">); } scrn = ScreenOfDisplay(dpy, screen_index); if(scrn==NULL) { fprintf(stderr, "couldn't get screen idx %d\n", screen_index); } DBG_PRINT("X11: X11Screen_GetScreen0 idx %d -> scrn %p DONE\n", screen_index, scrn); return (jlong) (intptr_t) scrn; } JNIEXPORT jint JNICALL Java_jogamp_newt_driver_x11_ScreenDriver_getWidth0 (JNIEnv *env, jclass clazz, jlong display, jint scrn_idx) { Display * dpy = (Display *) (intptr_t) display; return (jint) DisplayWidth( dpy, scrn_idx); } JNIEXPORT jint JNICALL Java_jogamp_newt_driver_x11_ScreenDriver_getHeight0 (JNIEnv *env, jclass clazz, jlong display, jint scrn_idx) { Display * dpy = (Display *) (intptr_t) display; return (jint) DisplayHeight( dpy, scrn_idx); } static int showedRandRVersion = 0; static Bool NewtScreen_getRANDRVersion(Display *dpy, int *major, int *minor) { if( 0 == XRRQueryVersion(dpy, major, minor) ) { return False; } if(0 == showedRandRVersion) { DBG_PRINT("X11 RandR Version %d.%d\n", *major, *minor); showedRandRVersion = 1; } return True; } static Bool NewtScreen_hasRANDR(Display *dpy) { int major, minor; return NewtScreen_getRANDRVersion(dpy, &major, &minor); } static int NewtScreen_XRotation2Degree(JNIEnv *env, int xrotation) { int rot; if(xrotation == RR_Rotate_0) { rot = 0; } else if(xrotation == RR_Rotate_90) { rot = 90; } else if(xrotation == RR_Rotate_180) { rot = 180; } else if(xrotation == RR_Rotate_270) { rot = 270; } else { NewtCommon_throwNewRuntimeException(env, "invalid native rotation: %d", xrotation); } return rot; } /* * Class: jogamp_newt_driver_x11_ScreenDriver * Method: getAvailableScreenModeRotations0 * Signature: (JI)I */ JNIEXPORT jintArray JNICALL Java_jogamp_newt_driver_x11_ScreenDriver_getAvailableScreenModeRotations0 (JNIEnv *env, jclass clazz, jlong display, jint scrn_idx) { Display *dpy = (Display *) (intptr_t) display; Window root = RootWindow(dpy, (int)scrn_idx); int num_rotations = 0; Rotation cur_rotation, rotations_supported; int rotations[4]; int major, minor; if(False == NewtScreen_getRANDRVersion(dpy, &major, &minor)) { fprintf(stderr, "RANDR not available\n"); return (*env)->NewIntArray(env, 0); } rotations_supported = XRRRotations (dpy, (int)scrn_idx, &cur_rotation); if(0 != (rotations_supported & RR_Rotate_0)) { rotations[num_rotations++] = 0; } if(0 != (rotations_supported & RR_Rotate_90)) { rotations[num_rotations++] = 90; } if(0 != (rotations_supported & RR_Rotate_180)) { rotations[num_rotations++] = 180; } if(0 != (rotations_supported & RR_Rotate_270)) { rotations[num_rotations++] = 270; } jintArray properties = NULL; if(num_rotations>0) { properties = (*env)->NewIntArray(env, num_rotations); if (properties == NULL) { NewtCommon_throwNewRuntimeException(env, "Could not allocate int array of size %d", num_rotations); } // move from the temp structure to the java structure (*env)->SetIntArrayRegion(env, properties, 0, num_rotations, rotations); } return properties; } /* * Class: jogamp_newt_driver_x11_ScreenDriver * Method: getNumScreenModeResolution0 * Signature: (JI)I */ JNIEXPORT jint JNICALL Java_jogamp_newt_driver_x11_ScreenDriver_getNumScreenModeResolutions0 (JNIEnv *env, jclass clazz, jlong display, jint scrn_idx) { Display *dpy = (Display *) (intptr_t) display; #ifdef DBG_PERF struct timespec t0, t1, td; long td_ms; timespec_now(&t0); #endif if(False == NewtScreen_hasRANDR(dpy)) { DBG_PRINT("Java_jogamp_newt_driver_x11_ScreenDriver_getNumScreenModeResolutions0: RANDR not available\n"); return 0; } #ifdef DBG_PERF timespec_now(&t1); timespec_subtract(&td, &t1, &t0); td_ms = timespec_milliseconds(&td); fprintf(stderr, "X11Screen_getNumScreenModeResolution0.1: %ld ms\n", td_ms); fflush(NULL); #endif int num_sizes; XRRScreenSize *xrrs = XRRSizes(dpy, (int)scrn_idx, &num_sizes); //get possible screen resolutions #ifdef DBG_PERF timespec_now(&t1); timespec_subtract(&td, &t1, &t0); td_ms = timespec_milliseconds(&td); fprintf(stderr, "X11Screen_getNumScreenModeResolution0.2 (XRRSizes): %ld ms\n", td_ms); fflush(NULL); #endif DBG_PRINT("getNumScreenModeResolutions0: %p:%d -> %d\n", dpy, (int)scrn_idx, num_sizes); return num_sizes; } /* * Class: jogamp_newt_driver_x11_ScreenDriver * Method: getScreenModeResolutions0 * Signature: (JII)[I */ JNIEXPORT jintArray JNICALL Java_jogamp_newt_driver_x11_ScreenDriver_getScreenModeResolution0 (JNIEnv *env, jclass clazz, jlong display, jint scrn_idx, jint resMode_idx) { Display *dpy = (Display *) (intptr_t) display; if(False == NewtScreen_hasRANDR(dpy)) { DBG_PRINT("Java_jogamp_newt_driver_x11_ScreenDriver_getScreenModeResolution0: RANDR not available\n"); return (*env)->NewIntArray(env, 0); } int num_sizes; XRRScreenSize *xrrs = XRRSizes(dpy, (int)scrn_idx, &num_sizes); //get possible screen resolutions if( 0 > resMode_idx || resMode_idx >= num_sizes ) { NewtCommon_throwNewRuntimeException(env, "Invalid resolution index: ! 0 < %d < %d", resMode_idx, num_sizes); } // Fill the properties in temp jint array int propIndex = 0; jint prop[4]; prop[propIndex++] = xrrs[(int)resMode_idx].width; prop[propIndex++] = xrrs[(int)resMode_idx].height; prop[propIndex++] = xrrs[(int)resMode_idx].mwidth; prop[propIndex++] = xrrs[(int)resMode_idx].mheight; jintArray properties = (*env)->NewIntArray(env, 4); if (properties == NULL) { NewtCommon_throwNewRuntimeException(env, "Could not allocate int array of size %d", 4); } // move from the temp structure to the java structure (*env)->SetIntArrayRegion(env, properties, 0, 4, prop); return properties; } /* * Class: jogamp_newt_driver_x11_ScreenDriver * Method: getScreenModeRates0 * Signature: (JII)[I */ JNIEXPORT jintArray JNICALL Java_jogamp_newt_driver_x11_ScreenDriver_getScreenModeRates0 (JNIEnv *env, jclass clazz, jlong display, jint scrn_idx, jint resMode_idx) { Display *dpy = (Display *) (intptr_t) display; if(False == NewtScreen_hasRANDR(dpy)) { DBG_PRINT("Java_jogamp_newt_driver_x11_ScreenDriver_getScreenModeRates0: RANDR not available\n"); return (*env)->NewIntArray(env, 0); } int num_sizes; XRRScreenSize *xrrs = XRRSizes(dpy, (int)scrn_idx, &num_sizes); //get possible screen resolutions if( 0 > resMode_idx || resMode_idx >= num_sizes ) { NewtCommon_throwNewRuntimeException(env, "Invalid resolution index: ! 0 < %d < %d", resMode_idx, num_sizes); } int num_rates; short *rates = XRRRates(dpy, (int)scrn_idx, (int)resMode_idx, &num_rates); jint prop[num_rates]; int i; for(i=0; i<num_rates; i++) { prop[i] = (int) rates[i]; /** fprintf(stderr, "rate[%d, %d, %d/%d]: %d\n", (int)scrn_idx, resMode_idx, i, num_rates, prop[i]); */ } jintArray properties = (*env)->NewIntArray(env, num_rates); if (properties == NULL) { NewtCommon_throwNewRuntimeException(env, "Could not allocate int array of size %d", num_rates); } // move from the temp structure to the java structure (*env)->SetIntArrayRegion(env, properties, 0, num_rates, prop); return properties; } /* * Class: jogamp_newt_driver_x11_ScreenDriver * Method: getScreenConfiguration0 * Signature: (JI)J */ JNIEXPORT jlong JNICALL Java_jogamp_newt_driver_x11_ScreenDriver_getScreenConfiguration0 (JNIEnv *env, jclass clazz, jlong display, jint screen_idx) { Display *dpy = (Display *) (intptr_t) display; Window root = RootWindow(dpy, (int)screen_idx); #ifdef DBG_PERF struct timespec t0, t1, td; long td_ms; timespec_now(&t0); #endif if(False == NewtScreen_hasRANDR(dpy)) { DBG_PRINT("Java_jogamp_newt_driver_x11_ScreenDriver_getScreenConfiguration0: RANDR not available\n"); return 0; } #ifdef DBG_PERF timespec_now(&t1); timespec_subtract(&td, &t1, &t0); td_ms = timespec_milliseconds(&td); fprintf(stderr, "X11Screen_getScreenConfiguration0.1: %ld ms\n", td_ms); fflush(NULL); #endif // get current resolutions and frequencies XRRScreenConfiguration *conf = XRRGetScreenInfo(dpy, root); #ifdef DBG_PERF timespec_now(&t1); timespec_subtract(&td, &t1, &t0); td_ms = timespec_milliseconds(&td); fprintf(stderr, "X11Screen_getScreenConfiguration0.2 (XRRGetScreenInfo): %ld ms\n", td_ms); fflush(NULL); #endif return (jlong) (intptr_t) conf; } /* * Class: jogamp_newt_driver_x11_ScreenDriver * Method: freeScreenConfiguration0 * Signature: (J)V */ JNIEXPORT void JNICALL Java_jogamp_newt_driver_x11_ScreenDriver_freeScreenConfiguration0 (JNIEnv *env, jclass clazz, jlong screenConfiguration) { XRRFreeScreenConfigInfo( (XRRScreenConfiguration *) (intptr_t) screenConfiguration ); } /* * Class: jogamp_newt_driver_x11_ScreenDriver * Method: getCurrentScreenRate0 * Signature: (J)I */ JNIEXPORT jint JNICALL Java_jogamp_newt_driver_x11_ScreenDriver_getCurrentScreenRate0 (JNIEnv *env, jclass clazz, jlong screenConfiguration) { XRRScreenConfiguration *conf = (XRRScreenConfiguration *) (intptr_t) screenConfiguration; short original_rate = XRRConfigCurrentRate(conf); DBG_PRINT("getCurrentScreenRate0: %d\n", (int)original_rate); return (jint) original_rate; } /* * Class: jogamp_newt_driver_x11_ScreenDriver * Method: getCurrentScreenRotation0 * Signature: (J)I */ JNIEXPORT jint JNICALL Java_jogamp_newt_driver_x11_ScreenDriver_getCurrentScreenRotation0 (JNIEnv *env, jclass clazz, jlong screenConfiguration) { XRRScreenConfiguration *conf = (XRRScreenConfiguration *) (intptr_t) screenConfiguration; Rotation rotation; XRRConfigCurrentConfiguration(conf, &rotation); return NewtScreen_XRotation2Degree(env, rotation); } /* * Class: jogamp_newt_driver_x11_ScreenDriver * Method: getCurrentScreenResolutionIndex0 * Signature: (J)I */ JNIEXPORT jint JNICALL Java_jogamp_newt_driver_x11_ScreenDriver_getCurrentScreenResolutionIndex0 (JNIEnv *env, jclass clazz, jlong screenConfiguration) { XRRScreenConfiguration *conf = (XRRScreenConfiguration *) (intptr_t) screenConfiguration; short original_rate = XRRConfigCurrentRate(conf); Rotation original_rotation; SizeID original_size_id = XRRConfigCurrentConfiguration(conf, &original_rotation); DBG_PRINT("getCurrentScreenResolutionIndex0: %d\n", (int)original_size_id); return (jint)original_size_id; } /* * Class: jogamp_newt_driver_x11_ScreenDriver * Method: setCurrentScreenModeStart0 * Signature: (JIJIII)Z */ JNIEXPORT jboolean JNICALL Java_jogamp_newt_driver_x11_ScreenDriver_setCurrentScreenModeStart0 (JNIEnv *env, jclass clazz, jlong display, jint screen_idx, jlong screenConfiguration, jint resMode_idx, jint freq, jint rotation) { Display *dpy = (Display *) (intptr_t) display; XRRScreenConfiguration *conf = (XRRScreenConfiguration *) (intptr_t) screenConfiguration; Window root = RootWindow(dpy, (int)screen_idx); int num_sizes; XRRScreenSize *xrrs = XRRSizes(dpy, (int)screen_idx, &num_sizes); //get possible screen resolutions int rot; if( 0 > resMode_idx || resMode_idx >= num_sizes ) { NewtCommon_throwNewRuntimeException(env, "Invalid resolution index: ! 0 < %d < %d", resMode_idx, num_sizes); } switch(rotation) { case 0: rot = RR_Rotate_0; break; case 90: rot = RR_Rotate_90; break; case 180: rot = RR_Rotate_180; break; case 270: rot = RR_Rotate_270; break; default: NewtCommon_throwNewRuntimeException(env, "Invalid rotation: %d", rotation); } DBG_PRINT("X11Screen.setCurrentScreenMode0: CHANGED TO %d: %d x %d PIXELS, %d Hz, %d degree\n", resMode_idx, xrrs[resMode_idx].width, xrrs[resMode_idx].height, (int)freq, rotation); XRRSelectInput (dpy, root, RRScreenChangeNotifyMask); XSync(dpy, False); XRRSetScreenConfigAndRate(dpy, conf, root, (int)resMode_idx, rot, (short)freq, CurrentTime); XSync(dpy, False); return JNI_TRUE; } /* * Class: jogamp_newt_driver_x11_ScreenDriver * Method: setCurrentScreenModePollEnd0 * Signature: (J)Z */ JNIEXPORT jboolean JNICALL Java_jogamp_newt_driver_x11_ScreenDriver_setCurrentScreenModePollEnd0 (JNIEnv *env, jclass clazz, jlong display, jint screen_idx, jint resMode_idx, jint freq, jint rotation) { Display *dpy = (Display *) (intptr_t) display; int randr_event_base, randr_error_base; XEvent evt; XRRScreenChangeNotifyEvent * scn_event = (XRRScreenChangeNotifyEvent *) &evt; if(False == NewtScreen_hasRANDR(dpy)) { DBG_PRINT("Java_jogamp_newt_driver_x11_ScreenDriver_setCurrentScreenModePollEnd0: RANDR not available\n"); return JNI_FALSE; } int num_sizes; XRRScreenSize *xrrs = XRRSizes(dpy, (int)screen_idx, &num_sizes); //get possible screen resolutions XRRScreenConfiguration *conf; if( 0 > resMode_idx || resMode_idx >= num_sizes ) { NewtCommon_throwNewRuntimeException(env, "Invalid resolution index: ! 0 < %d < %d", resMode_idx, num_sizes); } XRRQueryExtension(dpy, &randr_event_base, &randr_error_base); int done = 0; int rot; do { if ( 0 >= XEventsQueued(dpy, QueuedAfterFlush) ) { return; } XNextEvent(dpy, &evt); switch (evt.type - randr_event_base) { case RRScreenChangeNotify: if(0 < scn_event->rotation ) { rot = NewtScreen_XRotation2Degree(env, (int)scn_event->rotation); DBG_PRINT( "XRANDR: event . RRScreenChangeNotify call(1) %p (root %p) resIdx %d rot %d %dx%d\n", (void*)scn_event->window, (void*)scn_event->root, (int)scn_event->size_index, rot, scn_event->width, scn_event->height); // done = scn_event->size_index == resMode_idx; // not reliable .. done = rot == rotation && scn_event->width == xrrs[resMode_idx].width && scn_event->height == xrrs[resMode_idx].height; } else { DBG_PRINT( "XRANDR: event . RRScreenChangeNotify call(0) %p (root %p) resIdx %d %dx%d\n", (void*)scn_event->window, (void*)scn_event->root, (int)scn_event->size_index, scn_event->width, scn_event->height); } break; default: DBG_PRINT("RANDR: event . unhandled %d 0x%X call %p\n", (int)evt.type, (int)evt.type, (void*)evt.xany.window); } XRRUpdateConfiguration(&evt); } while(!done); XSync(dpy, False); }