首先是一些基础概念和经验分享:
1、OpenGL是一个跨平台的图形渲染标准
2、OpenGL ES (OpenGL for Embedded Systems) 是 OpenGL 三维图形 API 的子集,针对手机、PDA和游戏主机等嵌入式设备而设计。该API由Khronos集团定义推广,Khronos是一个图形软硬件行业协会,该协会主要关注图形和多媒体方面的开放标准。
OpenGL ES 是从 OpenGL 裁剪定制而来的,去除了 glBegin/glEnd,四边形(GL_QUADS)、多边形(GL_POLYGONS)等复杂图元等许多非绝对必要的特性。现在主要有两个版本,OpenGL ES 1.1针对固定管线硬件的,是以 OpenGL 1.5 规范为基础的。OpenGL ES 2.x 针对可编程管线硬件,参照 OpenGL 2.0 规范定义。
3、egl提供了opengles和本地窗口之间的关联
4、OpenGLES模拟器,这里的模拟器仅仅是一套api和dll(要与android模拟器区分开)。主要用于非嵌入式平台(如windows)下运行opengles代码。
============================================正文==============================================================
1、头文件:
- #if !defined(HAVE_GLES)
- #include <GL/gl.h>
- #else
- #include <GLES/gl.h>
- #endif
2、windows下可以使用eglport(http://sourceforge.net/p/eglport/code-0/3/tree/trunk/),android和ios下各有其对应实现,如果使用了SDL的话,基础框架如下:
- #if !defined(HAVE_GLES)
- #include <GL/gl.h>
- #else
- #include <GLES/gl.h>
- #include "eglport.h"
- #endif
- #include <SDL/SDL.h>
- int main( void )
- {
- // other stuff here
- SDL_Init( SDL_INIT_VIDEO );
- #if defined(HAVE_GLES)
- if (EGL_Open())
- exit(1);
- #endif
- // some more initialisations
- SDL_Surface* screen;
- #if !defined(HAVE_GLES)
- screen = SDL_SetVideoMode( 800, 600, 0, SDL_HWSURFACE | SDL_OPENGL | SDL_FULLSCREEN);
- #else
- screen = SDL_SetVideoMode( 800, 480, 0, SDL_SWSURFACE | SDL_FULLSCREEN );
- EGL_Init();
- #endif
- // the event loop
- while( quit == 0 ) {