View | Details | Raw Unified | Return to bug 572
Collapse All | Expand All

(-)a/src/jogl/classes/javax/media/opengl/awt/GLCanvas.java (-15 / +25 lines)
Lines 440-446 public class GLCanvas extends Canvas implements AWTGLAutoDrawable, WindowClosing Link Here
440
440
441
  @Override
441
  @Override
442
  public void display() {
442
  public void display() {
443
    if( !validateGLDrawable() ) {
444
        if(DEBUG) {
445
            System.err.println(getThreadName()+": Info: GLCanvas display - skipped GL render, drawable not valid yet");
446
        }
447
        return; // not yet available ..
448
    }
443
    Threading.invoke(true, displayOnEDTAction, getTreeLock());
449
    Threading.invoke(true, displayOnEDTAction, getTreeLock());
450
    
444
    awtWindowClosingProtocol.addClosingListenerOneShot();
451
    awtWindowClosingProtocol.addClosingListenerOneShot();
445
  }
452
  }
446
453
Lines 570-591 public class GLCanvas extends Canvas implements AWTGLAutoDrawable, WindowClosing Link Here
570
        if( _drawable.isRealized() ) {
577
        if( _drawable.isRealized() ) {
571
            return true;
578
            return true;
572
        }
579
        }
573
        if (!Beans.isDesignTime() &&
580
        final RecursiveLock _lock = lock;
574
             0 < _drawable.getWidth() * _drawable.getHeight() ) {
581
        _lock.lock();
575
            // make sure drawable realization happens on AWT EDT, due to AWTTree lock
582
        try {            
576
            AWTEDTExecutor.singleton.invoke(getTreeLock(), true, setRealizedOnEDTAction);
583
            if (!Beans.isDesignTime() &&
577
            if( _drawable.isRealized() ) {
584
                 0 < _drawable.getWidth() * _drawable.getHeight() ) {
578
                sendReshape=true; // ensure a reshape is being send ..
585
                // make sure drawable realization happens on AWT EDT, due to AWTTree lock
579
                if(DEBUG) {
586
                AWTEDTExecutor.singleton.invoke(getTreeLock(), true, setRealizedOnEDTAction);
580
                    System.err.println(getThreadName()+": Realized Drawable: "+_drawable.toString());
587
                if( _drawable.isRealized() ) {
581
                    Thread.dumpStack();
588
                    sendReshape=true; // ensure a reshape is being send ..
589
                    if(DEBUG) {
590
                        System.err.println(getThreadName()+": Realized Drawable: "+_drawable.toString());
591
                        Thread.dumpStack();
592
                    }
593
                    return true;
582
                }
594
                }
583
                return true;
584
            }
595
            }
596
        } finally {
597
            _lock.unlock();
585
        }
598
        }
586
    }
599
    }
587
    return false;
600
    return false;
588
  }
601
  }
602
  
589
  private Runnable setRealizedOnEDTAction = new Runnable() {
603
  private Runnable setRealizedOnEDTAction = new Runnable() {
590
      @Override
604
      @Override
591
    public void run() {
605
    public void run() {
Lines 984-994 public class GLCanvas extends Canvas implements AWTGLAutoDrawable, WindowClosing Link Here
984
        final RecursiveLock _lock = lock;
998
        final RecursiveLock _lock = lock;
985
        _lock.lock();
999
        _lock.lock();
986
        try {            
1000
        try {            
987
            if( validateGLDrawable() ) {
1001
            helper.invokeGL(drawable, context, displayAction, initAction);
988
                helper.invokeGL(drawable, context, displayAction, initAction);
989
            } else if(DEBUG) {
990
                System.err.println(getThreadName()+": Info: GLCanvas display - skipped GL render, drawable not valid yet");
991
            }
992
        } finally {
1002
        } finally {
993
            _lock.unlock();
1003
            _lock.unlock();
994
        }
1004
        }

Return to bug 572