aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChien Yang <[email protected]>2006-10-05 22:14:50 +0000
committerChien Yang <[email protected]>2006-10-05 22:14:50 +0000
commit9eef9af05c78cdad57526c633aa3b31fc74f7aaa (patch)
treef8b8740093a1e01da136c30652fae43db5ccc9d7
parentc71e697cf3cf62c93e4b889e7de1ad20b147e7d0 (diff)
Work around to Issue 324 : Lockup Java3D program and throw exception using JOGL renderer
git-svn-id: https://svn.java.net/svn/j3d-core~svn/trunk@711 ba19aa83-45c5-6ac9-afd3-db810772062c
-rw-r--r--src/classes/jogl/javax/media/j3d/JoglPipeline.java25
1 files changed, 22 insertions, 3 deletions
diff --git a/src/classes/jogl/javax/media/j3d/JoglPipeline.java b/src/classes/jogl/javax/media/j3d/JoglPipeline.java
index 568b676..7f7b47b 100644
--- a/src/classes/jogl/javax/media/j3d/JoglPipeline.java
+++ b/src/classes/jogl/javax/media/j3d/JoglPipeline.java
@@ -6929,9 +6929,28 @@ class JoglPipeline extends Pipeline {
// Apparently we are supposed to make the context current at
// this point and set up a bunch of properties
- if (context.makeCurrent() == GLContext.CONTEXT_NOT_CURRENT) {
- throw new IllegalRenderingStateException("Unable to make new context current");
- }
+
+ // Work around for some low end graphics driver bug, such as Intel Chipset.
+ // Issue 324 : Lockup Java3D program and throw exception using JOGL renderer
+ boolean failed = false;
+ int failCount = 0;
+ int MAX_FAIL_COUNT = 5;
+ do {
+ failed = false;
+ int res = context.makeCurrent();
+ if (res == GLContext.CONTEXT_NOT_CURRENT) {
+ // System.err.println("makeCurrent fail : " + failCount);
+ failed = true;
+ ++failCount;
+ try {
+ Thread.sleep(100);
+ } catch (InterruptedException e) {
+ }
+ }
+ } while (failed && (failCount < MAX_FAIL_COUNT));
+ if (failCount == MAX_FAIL_COUNT) {
+ throw new IllegalRenderingStateException("Unable to make new context current after " + failCount + "tries");
+ }
GL gl = context.getGL();
JoglContext ctx = new JoglContext(context);