Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java类占位符(不同设备上的OpenGL)_Java_Class_Opengl_Interface - Fatal编程技术网

Java类占位符(不同设备上的OpenGL)

Java类占位符(不同设备上的OpenGL),java,class,opengl,interface,Java,Class,Opengl,Interface,我想在我的应用程序中使用不同的openGL环境 我正在开发一个游戏应用程序,但在windows上进行测试,因为它更容易运行。我使用GL2操作windows,GLES操作android。我的想法是限制平台对某些文件的依赖性,这些文件将充当“接口”。根据代码的其余部分,我将使用这些类。我将只使用两个库中存在的GL2和GLES函数 请注意,GL2本身就是一个接口,可以由不同的类实现 我的第一个猜测是简单地创建一个与GL2相等的接口(PlatformGL),并将GL2转换到它。PlatformGL的定义

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

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

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

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

public interface PlatformGL extends GL2{
}
或直接基于GL2的实施(非首选):

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

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);
mygl=GLES;
[...]
mygl=(mygl)getGL();
gl.glEnable(mygl.gl\u深度\u缓冲\u位);

我希望你能想到如何做到这一点。

我知道这并不能回答你的问题,但如果你想编写一次OpenGL,并让它在Windows和Android上运行,那么LibGDX非常好。他们编写自己的GL10(以及GL11、GL20)接口,然后为每个平台实现该接口。
<class> mygl = GLES;

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