The GLSurfaceView is a special view which manages OpenGL surfaces for us and draws it into the Android view system.
GLSurfaceView还包括的功能:
(1) It provides a dedicated render thread for OpenGL so that the main thread is not stalled
(2) It supports continuous or on-demand rendering.
(3) It takes care of the screen setup for you using EGL, the interface between OpenGL and the underlying window system.
OpenGL中的一些术语
VBO:vertex buffer object,顶点数据
PBO:Pixel buffer object,像素数据,纹理传递
采用DMA技术,无需CPU介入
VAO:vertex array object
3.0版本以上才可使用
把对象信息直接存储在图形卡中,而不是在需要的时候传输到图形卡。
NDC:Normalized Device Coordinates
FBO:Frame Buffer Object
LOD:Level of details
LOD技术指根据物体模型的节点在显示环境中所处的位置和重要度,决定物体渲染的资源分配,降低非重要物体的面数和细节度,从而获得高效率的渲染运算。
Color/Depth/Stencil Buffer
Scissor Box
Blending
MSAA/SSAA: Multisampling anti-aliasing/super sampling anti-aliasing
多重采样抗锯齿 超级采样抗锯齿
一般情况下MSAA比SSAA更有效,更节省资源
Vertex Shader
处理变换及光照
Fragment Shader
处理Texture Environment & Color Sum & Fog & Alpha Test
一些API
创建VBO
1,使用glGenBuffers()生成新缓存对象
在服务端创建缓存对象,并返回缓存对象的ID
2,使用glBindBuffer()绑定缓存对象
GL_ARRAY_BUFFER:任何顶点属性,如顶点坐标、纹理坐标、法线及颜色分量数组
GL_ELEMENT_BUFFER:顶点的索引数据
若为0,则关闭该数据
将缓存对象连接到相应的缓存上,同时根据target确定缓存对象最有效的位置。
3,使用glBufferData()将顶点数据拷贝到缓存对象中
将数据拷贝到缓存对象,无数据拷贝,根据size申请分配内存
glBufferSubData()
部分数据拷贝到混存对象
glDeleteBuffers()
删除缓存对象
修改缓存对象
(1)直接使用glBufferData()/glBufferSubData()
(2)将缓存对象映射到客户端内存,具体API有
glMapBuffer():将缓存对象绑定到客户端内存,成功则返回指向客户端内存的指针,否则返回NULL,会引起同步问题
glUnmapBuffer()
glGetUniformLocation()
http://ask.csdn.net/questions/11006
Shader与Program的区别与联系
Shader范围更大
OpenGL中,采用右手坐标系,且矩阵按照列优先存储
EGL
(1)EGLDisplay
调用eglGetDisplay();
(2)initialize egl
eglInitialize(display, &majorVersion, &minorVersion);
(3) get configs
eglGetConfigs(display, ...)
(4) choose config
eglChooseConfig()
(5) create a surface
eglCreateWindowSurface()
得到EGLSurface
(6) create gl context
eglCreateContext()
(7) make the context current
eglMakeCurrent()
(8) swap buffer
eglSwapBuffers(eglDisplay, eglSurface)
EGLSurface
EGLContext
EGLNativeWindow