问题描述
在我们的Eclipse RCP应用程序上,用户可以打开未知数量的视图。每个视图都包含一个GLCanvas,每个视图都有自己的openGL上下文。
首先,为了在所有这些上下文之间共享纹理,我们将创建的第一个GLCanvas存储为静态属性,然后在创建其他GLCanvas时使用适当的GLData字段对其进行引用。
我们的代码经过简化:
class MyView extends ViewPart {
private static GLCanvas sharedCanvas;
public createPartControl( Composite parent ) {
GLData glData = new GLData();
glData.sharedContext = sharedCanvas;
GLCanvas myCanvas = new GLCanvas( parent,SWT.NO_BACKGROUND,glData );
if ( sharedCanvas == null ) {
sharedCanvas = myCanvas;
}
}
}
效果很好,直到用户关闭共享画布的所有者的视图为止,因为这样一来,画布就被处理掉了。之后打开的新视图将无法再访问纹理。
作为一种解决方法,我们不是使用我们其中一个视图的GLCanvas作为共享视图,而是这样做了:
class MyView extends ViewPart {
private static GLCanvas sharedCanvas;
public createPartControl( Composite parent ) {
if ( sharedCanvas == null ) {
Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();
sharedCanvas = new GLCanvas( shell,new GLData() );
}
GLData glData = new GLData();
glData.sharedContext = sharedCanvas;
GLCanvas myCanvas = new GLCanvas( parent,glData );
}
}
这样,我们确保始终有可用的有效GLCanvas。但是我们很确定这不是最好的解决方案。因此,问题是:有没有一种方法可以在openGL上下文之间共享纹理,而无需将我们的代码绑定到特定的GLCanvas?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)