diff options
author | Chien Yang <[email protected]> | 2005-02-14 20:54:30 +0000 |
---|---|---|
committer | Chien Yang <[email protected]> | 2005-02-14 20:54:30 +0000 |
commit | a606b2163bba30d9ab9ce3bc6ca08b1f7dd18f2d (patch) | |
tree | 669d7d49c1a6f1259b433848bd4a89c507b745f8 | |
parent | d5602c854548a67bf11adf339a5f87cd3bce5505 (diff) |
1) Fixed to issue 97 - ATI video card related - Lockup, lose hardware acceleration and crash OS.
2) Fixed to issue 98 - Random Lockup when adding a Canvas3D to JTabbedPane.
3) Partial fix to issue 100 - Offscreen Capture crash JVM.
git-svn-id: https://svn.java.net/svn/j3d-core~svn/trunk@120 ba19aa83-45c5-6ac9-afd3-db810772062c
-rw-r--r-- | src/classes/share/javax/media/j3d/Canvas3D.java | 3 | ||||
-rw-r--r-- | src/classes/win32/javax/media/j3d/NativeConfigTemplate3D.java | 6 | ||||
-rw-r--r-- | src/native/ogl/Canvas3D.c | 48 | ||||
-rw-r--r-- | src/native/ogl/NativeConfigTemplate3D.c | 2 |
4 files changed, 41 insertions, 18 deletions
diff --git a/src/classes/share/javax/media/j3d/Canvas3D.java b/src/classes/share/javax/media/j3d/Canvas3D.java index 4261c1f..9a78a21 100644 --- a/src/classes/share/javax/media/j3d/Canvas3D.java +++ b/src/classes/share/javax/media/j3d/Canvas3D.java @@ -1133,7 +1133,8 @@ public class Canvas3D extends Canvas { this.graphicsConfiguration = graphicsConfiguration; // Needed for Win32 only. - vid = nativeWSobj.getCanvasVid(graphicsConfiguration); + // Fix to issue 97 -- We will stop using vid. Need to cleanup code. + vid = 0; // Fix for issue 20. // Needed for Linux and Solaris. diff --git a/src/classes/win32/javax/media/j3d/NativeConfigTemplate3D.java b/src/classes/win32/javax/media/j3d/NativeConfigTemplate3D.java index 3a92b8a..f52223f 100644 --- a/src/classes/win32/javax/media/j3d/NativeConfigTemplate3D.java +++ b/src/classes/win32/javax/media/j3d/NativeConfigTemplate3D.java @@ -110,7 +110,11 @@ class NativeConfigTemplate3D { return null; } - GraphicsConfiguration gc1 = new J3dGraphicsConfig(gd, pixelFormat); + // Fix to issue 97 -- + // Pass in 0 for pixel format to the AWT. + // ATI driver will lockup pixelFormat, if it is passed to AWT. + GraphicsConfiguration gc1 = new J3dGraphicsConfig(gd, 0); + // We need to cache the offScreen pixelformat that glXChoosePixelFormat() // returns, since this is not cached with J3dGraphicsConfig and there // are no public constructors to allow us to extend it. diff --git a/src/native/ogl/Canvas3D.c b/src/native/ogl/Canvas3D.c index 1899e9c..a33eb54 100644 --- a/src/native/ogl/Canvas3D.c +++ b/src/native/ogl/Canvas3D.c @@ -1216,6 +1216,7 @@ jlong JNICALL Java_javax_media_j3d_Canvas3D_createNewContext( DWORD err; LPTSTR errString; jboolean result; + PixelFormatInfo *PixelFormatInfoPtr = (PixelFormatInfo *)fbConfigListPtr; /* Fix for issue 76 */ @@ -1240,20 +1241,16 @@ jlong JNICALL Java_javax_media_j3d_Canvas3D_createNewContext( * by wglChoosePixelFormat() or wglChoosePixelFormatARB. */ - if(!offScreen) { - /* fprintf(stderr, "Canvas3D_createNewContext: onScreen PixelFormat is %d\n", vid); */ - - if (vid <= 0) { + if(!offScreen) { // Fix to issue 97 + if ((PixelFormatInfoPtr == NULL) || (PixelFormatInfoPtr->onScreenPFormat <= 0)) { printErrorMessage("Canvas3D_createNewContext: onScreen PixelFormat is invalid"); return 0; } else { - PixelFormatID = vid; + PixelFormatID = PixelFormatInfoPtr->onScreenPFormat; } } - else { /* offScreen case */ - PixelFormatInfo *PixelFormatInfoPtr = (PixelFormatInfo *)fbConfigListPtr; - + else { /* offScreen case */ if ((PixelFormatInfoPtr == NULL) || (PixelFormatInfoPtr->offScreenPFormat <= 0)) { printErrorMessage("Canvas3D_createNewContext: offScreen PixelFormat is invalid"); return 0; @@ -1265,8 +1262,12 @@ jlong JNICALL Java_javax_media_j3d_Canvas3D_createNewContext( SetPixelFormat(hdc, PixelFormatID, NULL); + // fprintf(stderr, "Before wglCreateContext\n"); + hrc = wglCreateContext( hdc ); + // fprintf(stderr, "After wglCreateContext hrc = 0x%x\n", hrc); + if (!hrc) { err = GetLastError(); FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | @@ -1281,7 +1282,9 @@ jlong JNICALL Java_javax_media_j3d_Canvas3D_createNewContext( wglShareLists( (HGLRC) sharedCtx, hrc ); } + // fprintf(stderr, "Before wglMakeCurrent\n"); result = wglMakeCurrent(hdc, hrc); + // fprintf(stderr, "After wglMakeCurrent result = %d\n", result); if (!result) { err = GetLastError(); @@ -3335,6 +3338,7 @@ void JNICALL Java_javax_media_j3d_Canvas3D_createQueryContext( static char szAppName[] = "OpenGL"; jlong vinfo = 0; jboolean result; + PixelFormatInfo *PixelFormatInfoPtr = (PixelFormatInfo *)fbConfigListPtr; /* Fix for issue 76 */ @@ -3346,14 +3350,28 @@ void JNICALL Java_javax_media_j3d_Canvas3D_createQueryContext( /* * vid must be valid PixelFormat returned * by wglChoosePixelFormat() or wglChoosePixelFormatARB. - */ - if (vid <= 0) { - printErrorMessage("Canvas3D_createQueryContext: PixelFormat is invalid"); - return; - } - - PixelFormatID = (int)vid; + */ + // Fix to issue 97 + if(!offScreen) { + if ((PixelFormatInfoPtr == NULL) || (PixelFormatInfoPtr->onScreenPFormat <= 0)) { + printErrorMessage("Canvas3D_createNewContext: onScreen PixelFormat is invalid"); + return; + } + else { + PixelFormatID = PixelFormatInfoPtr->onScreenPFormat; + } + } + else { + if ((PixelFormatInfoPtr == NULL) || (PixelFormatInfoPtr->offScreenPFormat <= 0)) { + printErrorMessage("Canvas3D_createNewContext: offScreen PixelFormat is invalid"); + return; + } + else { + PixelFormatID = PixelFormatInfoPtr->offScreenPFormat; + } + } + /* onscreen rendering and window is 0 now */ if(window == 0 && !offScreen){ /* fprintf(stderr, "CreateQueryContext : window == 0 && !offScreen\n"); */ diff --git a/src/native/ogl/NativeConfigTemplate3D.c b/src/native/ogl/NativeConfigTemplate3D.c index 9ebb0f3..0e9976a 100644 --- a/src/native/ogl/NativeConfigTemplate3D.c +++ b/src/native/ogl/NativeConfigTemplate3D.c @@ -972,7 +972,7 @@ int find_DB_AA_S_PixelFormat( HDC hdc, PixelFormatInfo * pFormatInfo, if (dbVal == UNNECESSARY || dbVal== PREFERRED) { index = dbIndex; wglAttrs[index++] = WGL_DOUBLE_BUFFER_ARB; - wglAttrs[index++] = TRUE; + wglAttrs[index++] = FALSE; // Partial fix to issue 100. /* * Terminate by 2 zeros to avoid driver bugs * that assume attributes always come in pairs. |