如何在各种GLCanvas之间共享纹理?

问题描述

在我们的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 (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...