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)

 

 

posted @ 2017-08-05 23:02  倪明  阅读(574)  评论(0)    收藏  举报