1

我想在我的应用程序中使用不同的 openGL 环境。

我正在开发一个游戏应用程序,但在 Windows 上测试它,因为它更容易运行。我在 windows 上使用 GL2,在 android 上使用 GLES。我的想法是限制平台对某些充当“接口”的文件的依赖。从其余代码中,我将使用这些类。我只会使用两个库中都存在的 GL2 和 GLES 的函数。

请注意,GL2 本身就是一个接口,可以由不同的类实现。

我的第一个猜测是简单地创建一个等于 GL2 的接口(PlatformGL)并将 GL2 转换为它。然后,PlatformGL 的定义将存在于每个平台一个版本中的文件中,但它不会将收到的 GL2 转换为 PlatformGL:

public interface PlatformGL extends GL2{
}

或者直接基于GL2的实现(非首选):

public class PlatformGL extends jogamp.opengl.gl4.GL4bcImpl{
    public PlatformGL(GLProfile prof, GLContextImpl cont){
        super(prof, cont);
    }
}

在这两种情况下,我都得到:

java.lang.ClassCastException: jogamp.opengl.gl4.GL4bcImpl cannot be cast to [...].PlatformGL

一种选择是构建一个新类,将所有函数调用传递给它的底层 GL,但是 GL 有很多函数和变量,我不想把它们都写下来。它可能是最干净的版本,因为某些具有不同名称约定的函数可以传递给正确的函数。

除了使用预处理器来替换类名之外,您还有什么想法吗?

java中有一个类来存储类吗?就像是

<class> mygl = GLES;

[...]
mygl gl = (mygl) getGL();
gl.glEnable(mygl.GL_DEPTH_BUFFER_BIT);

我希望你知道如何做到这一点。

4

0 回答 0