Commit 3173a9dd authored by Christian Butz's avatar Christian Butz Committed by Jensgw

Fixed crashes with multiple OpenGL context

parent 08c772ce
Pipeline #121443 failed with stage
in 0 seconds
......@@ -67,12 +67,11 @@ public class vtkInternalSwtComponent extends GLCanvas implements Listener {
@Override
public boolean run(GLAutoDrawable arg0) {
// This makes this thread (should be the main thread current
// while the
// This makes this thread (should be the main thread) current
getContext().makeCurrent();
System.out.println("Creating render Window");
parent.getRenderWindow().InitializeFromCurrentContext();
System.out.println("Done");
// Swapping buffers is handled by the vtkSwtComponent
parent.getRenderWindow().SwapBuffersOff();
return false;
}
});
......@@ -92,7 +91,14 @@ public class vtkInternalSwtComponent extends GLCanvas implements Listener {
@Override
public void dispose() {
this.removeListener(SWT.Paint, this);
this.removeListener(SWT.Close, this);
this.removeListener(SWT.Dispose, this);
this.removeListener(SWT.Resize, this);
if (getContext().isCurrent()) {
getContext().release();
}
super.dispose();
}
......
......@@ -29,6 +29,9 @@ public class vtkSwtComponent extends vtkAbstractComponent<GLCanvas> {
this.eventForwarder = new vtkSwtInteractorForwarderDecorator(this, this.eventForwarder);
this.isWindowCreated = true;
this.uiComponent = new vtkInternalSwtComponent(this, parentComposite);
renderWindow.AddObserver("StartEvent", this, "startEvent");
renderWindow.AddObserver("EndEvent", this, "endEvent");
}
/**
......@@ -37,6 +40,7 @@ public class vtkSwtComponent extends vtkAbstractComponent<GLCanvas> {
* @param x width
* @param y height
*/
@Override
public void setSize(int x, int y) {
x = x < 1 ? 1 : x;
y = y < 1 ? 1 : y;
......@@ -50,6 +54,7 @@ public class vtkSwtComponent extends vtkAbstractComponent<GLCanvas> {
* Render the VTK component. Should not be called externally.
* Call update() to refresh the window content.
*/
@Override
public void Render() {
// Make sure we can render
if (inRenderCall || renderer == null || renderWindow == null) {
......@@ -82,10 +87,12 @@ public class vtkSwtComponent extends vtkAbstractComponent<GLCanvas> {
* @return the encapsulated SWT component (a GLCanvas instance)
* @see vtk.rendering.vtkAbstractComponent#getComponent()
*/
@Override
public GLCanvas getComponent() {
return this.uiComponent;
}
@Override
public void Delete() {
this.lock.lock();
// We prevent any further rendering
......@@ -111,4 +118,19 @@ public class vtkSwtComponent extends vtkAbstractComponent<GLCanvas> {
protected void updateInRenderCall(boolean value) {
this.inRenderCall = value;
}
/** This method is called by the VTK JNI code. Do not remove. */
void startEvent() {
if (!getComponent().getContext().isCurrent()) {
getComponent().getContext().makeCurrent();
}
}
/** This method is called by the VTK JNI code. Do not remove. */
void endEvent() {
if (getComponent().getContext().isCurrent()) {
getComponent().swapBuffers();
getComponent().getContext().release();
}
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment