开发者社区 问答 正文

Opengl ES创建流程 创建报错

前一阵子,一直在忙公司的iPhone的项目HourglassTimer,顺便了解下iPhone 平台上的2D引擎cocos2d-iphone库的使用。由于一直没有发现android上的基于Opengl ES 2D/3D引擎库(网上只发现了一个java monkey engine项目,pc平台上的游戏引擎。如果有人知道其他的开源项目,非常欢迎告诉我 ),所以自己准备将cocos2d移植到android平台上。最近做了些初步研究

在android 1.0rc2 sdk中,提供了以下包支持Opengl ES 编程:

一、openglES包

android.opengl Class:GLDebugHelper:用于调试OpenGL ES程序的帮助类GLU:提供GL 公共工具功能的类GLUtils:连接OpenGL ES和Android API的工具类,其中提供了纹理图片的操作。Matrix:矩阵运算工具类Exception:GLException:OpenGL异常类javax.microedition.khronos.egl Interface: EGL:GL的配置接口 EGL10:GL1.0的配置接口 EGL11:GL1.1的配置接口 GLConfig:GL配置的类 EGLContext:GL运行环境的类 EGLDisplay:GL显示窗口的类 EGLSurface:可渲染GL的视图类javax.microedition.khronos.opengles Interfaces: GL:Opengles的接口 GL10:Opengles1.0的接口 GL10Ext:Opengles1.0的扩展接口 GL11:Opengles1.1的接口

GL11Ext:Opengles1.1的扩展接口 GLExtentsionPack:Opengles的扩展接口 <GLDisplay:GL显示窗口的类 EGLSurface:可渲染GL的视图类

二、通常创建流程:

a)创建一个EGL实例

EGL10 mEgl = (EGL10) EGLContext.getEGL();

b)创建一个EGLDisplay实例

EGLDisplay mEglDisplay = mEgl.eglGetDisplay(EGL10.EGL_DEFAULT_DISPLAY);

c)初始化EGLDisplay

mEgl.eglInitialize(mEglDisplay, version);

d)选择Config

mEgl.eglChooseConfig(mEglDisplay, configSpec, configs, 1, num_config);

EGLConfig mEglConfig = configs[0];

e)创建opengl运行环境

EGLContext mEglContext = mEgl.eglCreateContext(       mEglDisplay,

mEglConfig,

EGL10.EGL_NO_CONTEXT,

null);

f) 创建新surface

mEglSurface = mEgl.eglCreateWindowSurface(mEglDisplay,

mEglConfig, holder, null);

g) 将opengles环境设置为当前

mEgl.eglMakeCurrent(mEglDisplay, mEglSurface, mEglSurface,

mEglContext);

h) 获取当前opengles画布

GL gl = mEglContext.getGL();

i) 显示绘制结果到屏幕上

mEgl.eglSwapBuffers(mEglDisplay, mEglSurface);

后边就不大会弄了,求大神

展开
收起
huc_逆天 2020-05-28 09:19:06 647 分享 版权
阿里云 AI 助理回答

看起来你已经对Android平台上使用OpenGL ES进行2D/3D图形编程有了初步的了解,并且开始了将cocos2d-iphone移植到Android平台的工作。这是一个相当有挑战性的项目,但也是非常有益的学习过程。以下是一些建议和方向,希望能帮助你继续前进:

  1. 理解OpenGL ES基础

    • 确保你对OpenGL ES的基本概念、如顶点、纹理、着色器(vertex & fragment shaders)、缓冲区等有深入的理解。这些是构建任何图形应用的基础。
  2. 学习Cocos2d-x

    • 考虑到cocos2d-iphone是基于Objective-C的,而你希望在Android上工作,可以考虑直接使用其跨平台版本Cocos2d-x。Cocos2d-x是用C++编写的,支持包括Android在内的多个平台,这可能比直接移植iOS代码更高效。
  3. 利用现有资源

    • 除了Java Monkey Engine之外,还有其他一些开源库可以帮助你在Android上进行2D/3D开发,比如LibGDX,它是一个非常强大的跨平台游戏开发框架,支持OpenGL ES,并提供了丰富的工具集和社区支持。
  4. 深入EGL与SurfaceView/TextureView

    • 你已经概述了基本的EGL初始化流程,接下来需要深入了解如何在SurfaceView或TextureView中渲染OpenGL内容。这两个类都是用于显示持续更新的图像数据,其中TextureView提供更多的灵活性,特别是对于需要与UI元素交互的场景。
  5. 处理触摸事件与动画

    • 在Android上,你需要实现触摸事件监听并将其转换为OpenGL中的操作,比如移动、缩放等。同时,掌握如何使用定时器或动画框架来驱动游戏循环和动画更新。
  6. 性能优化

    • 在Android设备上,性能优化尤为重要,因为设备硬件差异大。关注内存管理、纹理压缩格式的选择、避免过度绘制以及利用VBOs(Vertex Buffer Objects)来提高渲染效率。
  7. 调试与测试

    • 使用Android Studio的GPU Profiler工具来分析你的OpenGL ES调用,识别瓶颈。确保在不同配置的设备上测试你的应用,以确保兼容性和性能。
  8. 社区与文档

    • 加入相关的开发者论坛、GitHub项目和Stack Overflow,这些地方可以找到大量的代码示例、解决方案和最佳实践。Cocos2d-x和LibGDX都有活跃的社区,能为你提供宝贵的帮助。

最后,记得分解任务,逐步推进。从简单的功能开始实现,比如绘制一个简单的形状,然后逐渐增加复杂度,比如加载纹理、实现动画等。祝你移植项目顺利!

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答