Android动画与OpenGL开发解析.ppt
文本预览下载声明
OpenGL ES(2) OpenGL ES 是从 OpenGL 裁剪的定制而来的 去除了 glBegin/glEnd,四边形(GL_QUADS)、多边形(GL_POLYGONS)等复杂图元等许多非绝对必要的特性 经过多年发展,现在主要有两个版本 OpenGL ES 1.x 针对固定管线硬件的 OpenGL ES 2.x 针对可编程管线硬件 OpenGL ES(3) OpenGL ES 1.0 是以 OpenGL 1.3 规范为基础,OpenGL ES 1.1 是以 OpenGL 1.5 规范为基础 它们分别又支持 common 和 common lite两种profile lite profile只支持定点实数,而common profile既支持定点数又支持浮点数 OpenGL ES 2.0参照 OpenGL 2.0 规范定义 common profile发布于2005-8,引入了对可编程管线的支持 Android的client和server架构 3D接口调用OpenGL Client Server Android OpenGL系统结构 Android OpenGL的JAVA和JNI Android系统使用OpenGL的标准接口来支持3D图形功能 Android 3D图形系统也分为Java框架和本地代码JNI两部分 本地代码主要实现的OpenGL接口的库 在Java框架层,javax.microedition.khronos.opengles是java标准的OpenGL包 android.opengl包提供了OpenGL系统和Android GUI系统之间的联系 Android OpenGL的JAVA和JNI(2) Android的本地代码位于 frameworks/base/opengl JNI代码位于 frameworks/base/core/com_google_android_gles_jni_GLImpl.cpp frameworks/base/core/com_google_android_gles_jni_EGLImpl.cpp Java类位于 opengl/java/javax/microedition/khronos OpenGL ES测试代码 OpenGL的本地测试代码路径 frameworks/base/opengl/tests 包括angeles、fillrate等14个测试代码 这些代码都可以通过终端进行本地调用测试(模拟器中使用adb shell) 使用 Surface的代码 frameworks/base/libs/surfaceflinger/DisplayHardware/DisplayHardware.cpp OpenGL ES的编译 编译libagl下的源码生成 Install: out/target/product/generic/system/lib/egl/libGLES_android.so 编译libs下的生成 Install: out/target/product/generic/system/lib/libGLESv2.so Install: out/target/product/generic/system/lib/libGLESv1_CM.so Install: out/target/product/generic/system/lib/libEGL.so 使用OpenGL ES基本步骤 获取Display,Display代表显示器 函数原型 EGLDisplay eglGetDisplay(NativeDisplayType display); display参数是native系统的窗口显示ID值 一般为 EGL_DEFAULT_DISPLAY 该参数实际的意义是平台实现相关的: 在X-Window下是XDisplay ID 在MS Windows下是Window DC 使用OpenGL ES基本步骤(2) 初始化egl库 函数原型 EGLBoolean eglInitialize(EGLDisplay dpy, EGLint *major, EGLint *minor); dpy应为一个有效的 EGLDisplay 函数返回时,major和minor将被赋予当前EGL版本号 使用OpenGL ES基本步骤(3) 选择一个合适的EGL Configuration FrameBuffer,实际指的是FrameBuffer的参数 函数原型 EGLBoolean eglChooseConfig(EGLDisplay dpy, const EGLint *attrib_list,EGLConfig *configs, EGLint conf
显示全部