OpenGLES2.0API快速浏览卡片(中文)
OpenGL ES 2.0 API速览
概要:OpenGL ES 是一个针对图形硬件(GPU)的软件借口。这个接口是由一组可以让开发者去设置的对象和操作,为产生高质量的图形图像、特定的彩色3D图像的程序和函数。
[n.n.n]是OpenGL ES 2.0说明书中的指定的段和表。[转载请注明出处]
OpenGL ES 2.0可编程管线,如下图所示:

Errors[2.5]
enum GetError(void); //返回下列错误列表中的一个。
|
INVALD_ENUM |
超出枚举参数(错误类型)范围 |
|
INVALD_FRAMEBUFFER_OPERATION |
帧缓存未完成 |
|
INVALID_VALUE |
数值参数超出范围 |
|
INVALID_OPERATION |
当前状态下,不合法操作 |
|
OUT_OF_MEMORY |
没有足够内存来执行当前命令操作 |
|
NO_ERROR |
没有遇到错误 |
OpenGL ES Command Syntax[2.3] ES的命名格式
return-type Name{1234}{if}{v}([args,] T arg1, …, T argN [,args]);
其中,arg(参数)被括号围住,有0个或多个;
Name后缀{v}存在,暗示了参数的类型T的类型为一个顶点
参数N和Name后缀{1234}关联,N是1、2、3或4。
GL或gl可能是这些命令的标准前缀,例如glFuncitonName(), GL_CONSTANT, Gltype等。
GL Data Types[2.3]
GL 常用变量类型是不同于C语言的变量类型的。
|
GL类型 |
最低bit位数 |
描述 |
|
boolean |
1 |
布尔型,值为true或false |
|
byte |
8 |
有符号二进制整形 |
|
ubyte |
8 |
无符号二进制整形 |
|
char |
8 |
字符型,组合成String |
|
short |
16 |
短整形 |
|
ushort |
16 |
无符号短整形 |
|
int |
32 |
整形 |
|
uint |
32 |
无符号整形 |
|
fixed |
32 |
标记2个16.16级别的整形 |
|
sizei |
32 |
非负二进制整形大小 |
|
enum |
32 |
枚举型二进制整形值 |
|
intptr |
ptrbits |
标记2个16.16级别的整形 |
|
sizeiptr |
ptrbits |
非负二进制整形 |
|
bitfield |
32 |
Bit域 |
|
float |
32 |
浮点型 |
|
clampf |
32 |
浮点型,值在[0-1] |
Buffer Objects[2.9] 缓存对象
顶点数组或顶点序列利用缓存对象将有非常高的内存执行效率。
void GenBuffers(sizei n, uint *buffers);//创建缓存对象
void DeleteBuffers(sizei n, const uint *buffers);//删除缓存对象
void BindBuffers(enum target, uint buffer);//绑定缓存对象
其中,target取值为ARRAY_BUFFER, ELEMENT_ARRAY_BUFFER
void BufferData(enum target, sizeiptr size, const void *data, enum usage);//创建缓存对象的数据
其中,usage:STATIC_DRAW, STRAM_DRAW, DYNAMIC_DRAW
void BufferSubData(enum target, intptr offset, sizeiptr size, const void *data);//更新缓存对象的数据
其中,target取值为ARRAY_BUFFER, ELEMENT_ARRAY_BUFFER
boolean IsBuffer(uint buffer);//判断缓存对象是否存活
void GenBufferParameteriv(enum target, enum value, T data);//设置缓存
其中,target取值为ARRAY_BUFFER, ELEMENT_ARRAY_BUFFER
value:BUFFER_SIZE,BUFFER_USAGE
Viewport and Clipping 视点和剪裁
void DepthRangef(clampf n, clampf f);//深度范围,n为frustum(透视投影平头椎体)近平面,f为远平面。
void Viewport(int x, int y, sizei w, sizei h);//视点位置
Reading Pixels[4.3.1] 读像素
// ReadPixels也能接受一个请求已定义好的版式/类型的组合
void ReadPixels(int x, int y, sizei width, sizei height, enum format, enum type, void *data);
format:RGBA
type:UNSIGNED_BYTE
Vertices 顶点
//为当前位置(状态)增加一个顶点值
void VertexAttrib{1234}{f}(uint index, T values);
void VertexAttrib{1234}{f}v(uint index, T values);
//增加一个顶点数组,这个数组可以是APP内存中或者是在GPU本地(faster)内存中,例如缓存对象
void VertexAttribPointer(uint index, int size, enum type, boolean normalized, sizei stride, const void *pointer); /**着色器管线装配(shader plumbing),将着色器变量与应用程序的数据关联起来*/
type: BYTE,UNSIGENED_BYTE,SHORT,UNSIGNED_SHORT,FIXED,FLOAT
index :[0, MAX_VERTEX_ATTRIBS-1]
void EnableVertexAttribArray(uint index);
index :[0, MAX_VERTEX_ATTRIBS-1]
void DisableVertexAttribArray(uint index);
index :[0, MAX_VERTEX_ATTRIBS-1]
void DrawArrays(enum mode, int first, sizei count);
void DrawElement(enum mode,sizei count, enum type, void *indices);
mode:POINTS, LINE_STRIP, LINE_LOOP, LINES, TRIANGLE_STRIP, TRIANGLE_FAN, TRIANGLES
type: UNSIGNED_BYTE, UNSIGNED_SHORT
如果一个ELEMENT_ARRAY_BUFFER被绑定,这个顶点序列将从这个绑定的缓存中读取,而序列将由缓存提供。
Texturing[3.7] 纹理
着色器支持纹理运用,最多为MAX_VERTEX_TEXTURE_IMAGE_UNITS 个图片给顶点着色器。最多为MAZ_TEXTURE_IMAGE_UNITS图片给片段着色器。
void ActiveTexture(enum texture);
texture: [TEXTURE0…TEXTUREi] 这里的i最大为MAX_COMBINED_TEXTURE_IMAGE_UNITS-1
Texture Image Specification[3.7.1]纹理图片说明
void TexImage2D(enum target, int level, int internalformat, sizei width, sizei height, int border, enum format, enum type, void *data);// determines the internalFormat and type automatically.
target: TEXTURE_2D, TEXTURE_CURE_MAP_POSITIVE_{X,Y,Z}, TEXTURE_CURE_MAP_NEGATIVE_{X,Y,Z}
internalformat: ALPHA, LUMINANCE, LUMINANCE_ALPHA, RGB, RGBA
format: ALPHA, RGB, RGBA, LUMINANCE, LUMINANCE_ALPHA
type: UNSIGNED_BYTE, UNSIGNED_SHORT_5_6_5, UNSIGNED_SHORT_4_4_4_4, UNSIGNED_SHORT_5_5_5_1
从RGBA像素组件到内部纹理组件的转变
|
基本内部格式 |
RGBA |
内部组件 |
|
ALPHA |
A |
A |
|
LUMINANCE |
R |
L |
|
LUMINANCE_ALPHA |
R,A |
L,A |
|
RGB |
R,G,B |
R,G,B |
|
RGBA |
R,G,B,A |
R,G,B,A |
Texture Image Specification Commands[3.7.2]纹理图片命令说明
纹理图片可以直接由帧缓存中的图像数据指定,和已有的纹理图片矩形子区域指定。
void CopyTexImage2D(enum target, int level, enum internalformat, int x, int y, sizei width, sizei height, int border);
target: TEXTURE_2D, TEXTURE_CUBE_MAP_POSITIVE_{X,Y,Z}, TEXTURE_CUBE_MAP_NEGATIVE_{X,Y,Z}
internalformat: ALPHA, LUMINANCE, LUMINANCE_ALPHA, RGB, RGBA
void TexSubImage2D(enum target, int level, int xoffset, int yoffset, sizei width, sizei height, enum format, enum type, void *data);
target: TEXTURE_CUBE_MAP_POSITIVE_{X,Y,Z}, TEXTURE_CUBE_MAP_NEGATIVE_{X,Y,Z}
format: ALPHA, RGB, RGBA, LUMINANCE, LUMINANCE_ALPHA
type: UNSIGNED_BYTE, UNSIGNED_SHORT_5_6_5, UNSIGNED_SHORT_4_4_4_4, UNSIGNED_SHORT_5_5_5_1
void CopyTexSubImage2D(enum target, int level, int xoffset, int yoffset, int x, int y, sizei width, sizei height);
target: TEXTURE_2D, TEXTURE_CUBE_MAP_POSITIVE_{X,Y,Z}, TEXTURE_CUBE_MAP_NEGATIVE_{X,Y,Z}
Compressed Texture Images [3.7.3]压缩纹理图片
void CompressedTexImage2d(enum target, int level, enum internalformat, sizei width, sizei height, int border, sizei imageSize, void *data);
target: TEXTURE_2D, TEXTURE_CUBE_MAP_POSITIVE_{X,Y,Z}, TEXTURE_CUBE_MAP_NEGATIVE_{X,Y,Z}
internalformat: ALPHA, LUMINANCE, LUMINANCE_ALPHA, RGB, RGBA
void CompressedTexSubImage2d(enum target, int level, int xoffset, int yoffset, sizei width, sizei height, enum format, sizei imageSize, void *data);
target: TEXTURE_2D, TEXTURE_CUBE_MAP_POSITIVE_{X,Y,Z}, TEXTURE_CUBE_MAP_NEGATIVE_{X,Y,Z}
internalformat: ALPHA, LUMINANCE, LUMINANCE_ALPHA, RGB, RGBA
Texture Parameters[3.7.4]纹理参数
void TexParameter{if}(enum target, enum pname, T params);
void TexParameter{if}v(enum target, enum pname, T params);
target: TEXTURE_2D, TEXTURE_CUBE_MAP
pname: TEXTURE_WRAP_(S.T). TEXTURE_{MIN,MAG}_FILTER
Manual Mipmap Generation [3.7.11]手动生产Mipmap
void GenerateMipmap(enum target);
target: TEXTURE_2D, TEXTURE_CUBE_MAP
Texture Object [3.7.13]纹理对象
void BindTexture(enum target, uint texture);
void DeleteTextures(sizei n, uint *textures);
void GenTextures(sizei n, uint *textures); //生产纹理对象
Enumerated Queries[6.1.3]枚举问题
void GetTexParameter{if}v(enum target, enum value, T data);
target: TEXTURE_2D, TEXTURE_CUBE_MAP
value: TEXTURE_WRAP_{S,T}, TEXTURE_{MIN,MAG}_FILTER
Texture Queries[6.1.4]纹理问题
void isTexture(uint texture);
Rasterization[3.7] 光栅化
Point[3.3]点
点的大小由着色器内建gl_PointSize和深度检测完成后点的范围内决定。
Line Segment[3.3]线部分
void LineWidth(float width);
Pixel Rectangles[3.6,4.3] 像素 矩形
void PixelStorei(enum pname, int param)
pname: UNPACK_ALIGNMENT, PACK_ALIGNMENT
Shader and Programs 着色器程序
Shader Object[2.10.1]着色器对象
uint CreateShader(enum type);
type: VERTEX_SHADER, FRAGMENT_SHADER
void ShaderSource(uint shader, sizei count, const char **string, const int *lenght);
void CompileShader(uint shader);
void ReleaseShaderCompiler(void);
void DeleteShader(uint shader);
Loading Shader Binaries[2.10.2]加载着色器二进制代码
void ShaderBinary(sizei count, const uint *shaders, enum binaryformat, const void *binary, sizei length);
Program Object[2.10.3]着色器程序对象
uint CreateProgram(void);
void AttachShader(uint program, uint shader);//将着色器对象贴上
void detachShader(uint program, uint shader);//分离
void LinkProgram(uint program);//OpenGL链接程序
void UseProgram(uint program);//OpenGL使用该程序对象
Shader Variable[2.10.1]着色器程序变量
1 顶点属性
void GetActiveAttrib(uint program, uint index, sizei bufSize, sizei *length, int *size, enum *type, char *name);
*type: FLOAT, FLOAT_VEC{2,3,4} , FLOAT_MAT{2,3,4}
int GetAttribLocation(uint program, const char *name); //查询着色器程序属性变量名,得到ID
void BindAttribLocation(uint program, uint index, const char *name); //
2 统一变量属性
int GenUniformLocation(uint program, const char *name); //查询着色器程序统一变量名,得到ID
void GetActiveUniform(uint program, uint index, sizei bufSize, sizei *length, int *size, enum *type, char *name);
*type: FLOAT, FLOAT_VEC{2,3,4} ,INT, INT_VEC{2,3,4}, BOOL, BOOL_VEC{2,3,4}, FLOAT_MAT{2,3,4} ,FLOAT_MAT{2,3,4}, SAMPLE_2D, SAMPLE_CUBE
void Uniform{1234}{if}(int location, T value);
void Uniform{1234}{if}v(int location, sizei count, T value);
void Uniform{234}{if}fv(int location, sizei count, boolean transpose,const float * value);
transpose: FLASE
Shader Execution(Validation)[2.10.5]着色器执行
void ValidateProgram(uint program);//合法程序
Shader Queries 着色问题
boolean IsShader(uint shader);
void GetShaderiv(uint shader, enum pname, int *params);
pname: SHADER_TYPE, DELETE_STATUS, COMPILE_STATUS, INFO_LOG_LENGTH, SHADER_SOURCE_LENGTH
void GetAttachedShaders(uint program, sizei maxCount, sizei *count, uint *shaders);
void GetShaderInfoLog(uint shader, sizei bufsize, sizei *length, char *infoLog);
void GetShaderSource(uint shader, sizei bufSize, sizei *length, char *source);
void GetShaderPrecisionFormat(enum shadertype, enum precisiontype, int *range, int * precision);
shadertype: VERTEX_SHADER, FRAGMENT_SHADER
precision: LOW_FLOAT, MEDIUM_FLOAT, LOW_INT, MEDIUM_INT, HIGH_INT
void GetVertexAttribfv(uint index, enum pname, float *params);
pname: CURRENT_VERTEX_ATTRIB, VERTEX_ATTRIB_ARRAY_x(这里的x可以是BUFFER_BINDING, ENABLED, SIZE, STRIDE, TYPE, NORMALIZED)
void GetVertexAttribiv(uint index, enum pname, int *params);
pname: CURRENT_VERTEX_ATTRIB, VERTEX_ATTRIB_ARRAY_x(这里的x可以是BUFFER_BINDING, ENABLED, SIZE, STRIDE, TYPE, NORMALIZED)
void GetVertexAttribPointerv(uint index, enum pname, void **pointer);
pname: VERTEX_ATTRIB_ARRAY_POINT
void GetUniformfv(uint program, int location, float *params)
void GetUniformiv(uint program, int location, int *params)
Program Queries 着色器程序问题
boolean IsProgram(uint program);
voidGetProgramiv(uint program, enum pname, int *params);
pname: DELETE_STATUS, LINK_STATUS, VALIDATE_STATUS, INFO_LOG_LENGTH, ATTACHED_SHADERS, ACTIVE_ATTRIBUTES, ACTIVE_ATTRIBUTE_MAX_LENGHT, ACTIVE_UNIFORMS, ACTIVE_UNIFORM_MAX_LENGHT
void GetProgramInfoLog(uint program, sizei bufSize, sizei *length, char *infoLog);
Per-Fragment Operations 逐片段(像素)操作
1 剪裁测试[4.1.2]
Enable/Disable(SCISSOR_TEST)
void Scissor(int left, int bottom, sizei width, sizei height);
2 多样品片段操作[4.1.3]
Enable/Disable(cap)
cap: SAMPLE_ALPHA_TO_COVERAGE, SAMPLE_COVERAGE
void SampleCoverage(clampf value, boolean invert);//样品规模
3 模板测试[4.1.4]
Enable/Disable(STENCIL_TEST)
void StencilFunc(enum func, int ref, uint mask);
void StencilFuncSaparate(enum face, enum func, int ref, uint mask);
void StencilOp(enum sfail, enum dpfail, enum dppass);
void StencilOpSeparate(enum face, enum sfail, enum dpfail, enum dppass);
face: FORNT, BACK, FRONT_AND_BACK
sfail, dpfail, and dppass: KEEP, ZERO, REPLACE, INCR, DECR, INVERT, INCR_WRAP, DECR_WRAP
func: NEVER, ALWAYS, LESS, LEQUAL, EQUAL, GREATER, GEQUAL, NOTEQUAL
4 深度缓存测试[4.1.5]
Enable/Disable(DEPTH_TEST)
void DepthFunc(enum func);
func: NEVER, ALWAYS, LESS, LEQUAL, EQUAL, GREATER, GEQUAL, NOTEQUAL
5 混合[4.1.6]
Enable/Disable(BLEND)//应用于所有的可绘制缓存
void BlendEquation(enum mode); //混合等式
void BlendEquationSeparate(enum modeRGB, enum modeAlpha);
mode, modeRGB, and modeAlpha: FUNC_ADD, FUNC_SUBTRACT, FUNC_REVERSE_SUBTRACT
void BlendFuncSeparate(enum srcRGB, enum dstRGB, enum srcAlpha, enum dstAlpha);
void BlendFunc(enum src, enum dst);
dst, dstRGB, and dstAlpha: ZERO, ONE,
[ONE_MINUS_]SRC_COLOR, [ONE_MINUS_]DST_COLOR,
[ONE_MINUS]SRC_ALPHA, [ONE_MINUS_]DST_ALPHA,
[ONE_MINUS_]CONSTANT_COLOR,
[ONE_MINUS_]CONSTANT_ALPHA
src, srcRGB, srcAlpha: 同dst,多了SRC_ALPHA_SATURATE
void BlendColor(clampf red, clampf green, clampf blue, clampf alpha);
6 抖动[4.1.6]
Enable/Disable(DITHER)
Special Functions 特殊函数
1 Flush and Finish[5.1]刷新 与 完成
Flush保证命令下达后即可完成;Finish块直达所有命令下达后完成。
void Flush(void);
void Finish(void);
2 Hints[5.2]线索、提示
Hint 控制GL某一方面的行为。
void Hint(enum target, enum hint);
target: GENERATE_MIPMAP_HINT
hint: FASTEST, NICEST, DON’T_CARE
State and State Requests 状态和状态请求
一个组常量代表状态的列表在表格[6.2]中
1 简单问题[6.1.1]
void GetBooleanv(enum value, boolean *data);
void GetIntegerv(enum value, int *data);
void GetFloatv(enum value, float *data);
boolean IsEnabled(enum value);
2 点和字符串问题[6.1.5]
Ubyte *GetString(enum name);
name: VENDOR(摊贩,卖主,供应商), RENDERER, VERSION, SHADING_LANGUAGE_VERSION, EXTENSIONS
Whole Framebuffer Operations 整个帧缓存操作
1 缓冲区更新的精细控制[4.2.2] //mask:面具;掩饰
void ColorMask(boolean r, boolean g, boolean b, boolean a);
void DepthMask(boolean mask);
void StencilMask(uint mask);
void StencilMaskSeparate(enum face, uint mask);
face: FRONT, BACK, FRONT_AND_BACK
2 清除缓存[4.2.3]
void Clear(bitfield buf);
buf: 按位或,的COLOR_BUFFER_BIT, DEPTH_SUFFER_BIT, STENCIL_BUFFER_BIT
void ClearColor(clampf r, clampf g, clampf b, clampf a);
void ClearDepth(clampf d);
void ClearStencil(int s);
Framebuffer Object帧缓存对象
1 绑定和管理帧缓存对象[4.4.1]
void GenFramebuffers(sizei n, uint *framebuffers);
void DeleteFramebuffers(sizei n, uint *framebuffers);
void BindFramebuffer(enum target, uint framebuffer);
target: FRAMEBUFFER
2 渲染缓存对象[4.4.2]
void GenRenderbuffers(sizei n, uint *renderbuffers);
void RenderbufferStorage(enum target, enum internalformat, sizei width, sizei height);
target: RENDERBUFFER
internalformat: DEPTH_COMPONENT16, RGBA4, RGB5_A1, RGB565, STENCIL_INDEX8
void BindRenderbuffer(enum target, uint renderbuffer);
target: RENDERBUFFER
void DeleteRenderbuffers(sizei n, const uint *renderbuffers);
3 为Framebuffer附上Renderbuffer Images
void FramebufferRenderbuffer(enum target, enum attachment, enum renderbuffertarget, uint renderbuffer);
target: RENDERBUFFER
attachment: COLOR_ATTACHMENT0, DEPTH_ATTACHMENT, STENCIL_ATTACHEMENT
renderbuffertarget: RENDERBUFFER
4 为Framebuffer贴上纹理
void FramebufferTexture2D(enum target, enum attachment, enum textarget, uint texture, int level);
textarget: TEXTURE_2D, TEXTURE_CUBE_MAP_POSITIVE{X,Y,Z}, TEXTURE_CUBE_MAP_NEGATIVE{X,Y,Z}
target: FRAMEBUFFER
attachment: COLOR_ATTACHMENT0, DEPTH_ATTACHMENT, STENCIL_ATTACHEMENT
5 Framebuffer 完成否?
void CheckFramebufferStatus(enum target);
target: FRAMEBUFFER
return: GL_FRAMEBUFFER_COMPLETE, 或者是个帧缓存完成状态的一个枚举类型。
6 Framebuffer对象问题[6.1.3, 6.1.7]
boolean IsFramebuffer(uint framebuffer);
void GetFramebufferAttachmentParameteriv(enum target, enum attachment, enum pname, int *params);
target: FRAMEBUFFER
attachment: COLOR_ATTACHMENT0, DEPTH_ATTACHMENT, STENCIL_ATTACHEMENT
pname: FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE,
FRAMEBUFFER_ATTACHMENT_OBJECT_NAME,
FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVERL,
FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE
7 Renderbuffer Object Queries[6.1.3, 6.1.7]渲染缓存对象问题
boolean IsRenderbuffer(uint renderbuffer);
void GetRenderbufferParameteriv(enum target, enum pname, int *params);
target: RENDERBUFFER
pname: RENDERBUFFER_x(这x可以是WIDTH, HEIGHT, RED_SIZE, GREEN_SIZE, BLUE_SIZE, ALPHA_SIZE, DEPTH_SIZE, STENCIL_SIZE, INTERNAL_FORMAT)

浙公网安备 33010602011771号