opengl api整理一

第一章

void glGenVertexArrays(Glsizei n, GLuint *arrays);

返回n个未使用的对象名到数组arrays中,用作顶点数组对象。返回的名字可以用来分配更多的缓存对象,并且它们已经使用未初始化的顶点数组集合的默认状态进行了数值的初始化。

void glBindVertextArray(GLuint array);

glBindVertextArray()完成了三项工作。如果输入的变量array非0,并且是glGenVertexArrays()所返回的,那么它将创建一个新的顶点数组对象并且与其名称关联起来。如果绑定到一个已经创建的顶点数组对象中,那么会激活这个顶点数组对象,并且直接影响对象中所保存的顶点数组状态。如果输入的变量array为0,那么OpenGL将不再使用程序所分配的任何顶点数组对象,并且将渲染状态重设为顶点数组的默认状态。

如果array不是glGenVertexArrays()所返回的数值,或者它已经被glDeleteVertexArrays()函数释放了,那么这里将产生一个GL_INVALID_OPERATION错误。

void glDeleteVertexArrays(GLsizei n, GLuint *arrays);

删除n个在arrays中定义的顶点数组对象,这样所有的名称可以再次用作顶点数组。如果绑定的顶点数组已经被删除,那么当前绑定的顶点数组对象被重设为0(类似执行了glBindBuffer()函数,并且输入参数为0),而默认的顶点数组会变成当前对象。在arrays当中未使用的名称都会被释放,但是当前顶点数组的状态不会发生任何变化。

GLboolean glIsVertexArray(GLuint array);

如果array是一个已经用glGenVertexArrays()创建且没有被删除的顶点数组对象的名称,那么返回GL_TRUE。如果array为0或者不是任何顶点数组对象的名称,那么返回GL_FALSE。

void glGenBuffers(GLsizei n, GLuint *buffers)

返回n个当前未使用的缓存对象名称,并保存到buffers数组中。返回到buffers中的名称不一定是连续的整型数据。

这里返回的名称只用于分配其他缓存对象,他们在绑定之后只会记录一个可用的状态。

0是一个保留的缓存对象名称,glGenBuffers()永远不会返回这个值的缓存对象。

void glBindBuffer(GLenum target, GLuint buffer);

指定当前激活的缓存对象。target必须设置为以下类型中的一个:GL_ARRAY_BUFFER、GL_ELEMENT_ARRAY_BUFFER、GL_PIXEL_PACK_BUFFER、GL_PIXEL_UNPACK_BUFFER、GL_COPY_READ_BUFFER、GL_COPY_WRITE_BUFFER、GL_TRANSFORM_FEEDBACK_BUFFER和GL_UNIFORM_BUFFER。buffer设置的是要绑定的缓存对象名称。

glBindBuffer()完成了三项工作:1)如果是第一次绑定buffer,且它是一个非零的无符号整型,那么将创建一个与该名称相对应的新缓存对象。2)如果绑定到一个已经创建的缓存对象,那么它将成为当前被激活的缓存对象。3)如果绑定的buffer值为0,那么OpenGL将不再对当前target应用任何缓存对象。

glDeleteBuffers(GLsizei n, const GLuint *buffers);

删除n个保存在buffers数组中的缓存对象。被释放的缓存对象可以重用(例如,使用glGenBuffers())。

如果删除的缓存对象已经被绑定,那么该对象的所有绑定将会重置为默认的缓存对象,即相当于用0作为参考执行glBindBuffer()的结果。如果试图删除不存在的缓存对象,或者缓存对象为0,那么将忽略该操作(不会产生错误)。

GLboolean glIsBuffer(GLuint buffer);

如果buffer是一个已经分配并且没有释放的缓存对象的名称,则返回GL_TRUE。如果buffer为0或者不是缓存对象的名称,则返回GL_FALSE。

void glBufferData(GLenum target, GLsizeiptr size, const GLvoid *data, GLenum usage);

在OpenGL服务器内存中分配size个存储单元(通常为byte),用于存储数据或者索引。如果当前绑定的对象已经存在了关联的数据,那么会首先删除这些数据。

对于顶点属性数据,target设置为GL_ARRAY_BUFFER;索引数据为GL_ELEMENT_ARRAY_BUFFER;OpenGL的像素数据为GL_PIXEL_UNPACK_BUFFER;对于从OpenGl中获取的像素数据为GL_PIXEL_PACK_BUFFER;对于缓存之间的复制数据为GL_COPY_READ_BUFFER和GL_COPY_WRITE_BUFFER;对于纹理缓存中存储的纹理数据为GL_TEXTURE_BUFFER;对于通过transform feedback着色器获得的结果设置为GL_TRANSFORM_FEEDBACK_BUFFER;而一致变量要设置为GL_UNIFORM_BUFFER。

size表示存储数据的总数量。这个数值等于data中存储的元素的总数乘以单位元素存储空间的结果。

data要么是一个客户端内存的指针,以便初始化缓存对象,要么是NULL。如果传入的指针合法,那么将会有size大小的数据从客户端拷贝到服务端。如果传入NULL,那么将保留size大小的未知初始化的数据,以备后用。

usage用于设置分配数据之后的读取和写入方式。可用的方式包括GL_STREAM_DRAW、GL_STREAM_READ、GL_STREAM_COPY、GL_STATIC_DRAW、GL_STATIC_READ、GL_STATIC_COPY、GL_DYNAMIC_DRAM、GL_DYNAMIC_READ和GL_DYNAMIC_COPY。

如果所需的size大小超过了服务端能够分配的额度,那么glBufferData()将产生一个GL_OUT_OF_MEMORY错误。如果usage设置的不是可用的模式值,那么将产生GL_INVALID_VALUE错误。

void glVertexAttribPointer(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer);

设置index(着色器中的属性位置)位置对应的数据值。pointer表示缓存对象中,从起始位置开始计算的数组数据的偏移值(假设起始地址为0),使用基本的系统单位(byte)。size表示每个顶点需要更新的分量数目,可以是1、2、3、4或者GL_BGRA。type指定了数组中每个元素的数据类型(GL_BYTE、GL_UNSIGNED_BYTE、GL_SHORT、GL_UNSIGNED_SHORT、GL_INT、GL_UNSIGNED_INT、GL_FIXED、GL_HALF_FLOAT、GL_FLOAT或GL_DOUBLE)。normalized设置顶点数据在存储前是否需要进行归一化(或者使用glVertexAttribFourN*())。stride是数组中每两个元素之间的大小偏移值(byte)。如果stride为0,那么数据应该紧密地封装在一起。

void glClear(GLbitfield mask);

清除指定的缓存数据并重设为当前的清除值。mask是一个可以通过逻辑“或”操作来指定多个数值的参数,可用的数值:颜色缓存-GL_COLOR_BUFFER_BIT、深度缓存-GL_DEPTH_BUFFER_BIT、模板缓存-GL_STENCIL_BUFFER_BIT

void glClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);

设置当前使用的清除颜色值,用于RGBA模式下对颜色缓存的清除工作。这里的red、green、blue、alpha都会被截断到[0,1]的范围内。默认的清除颜色是(0,0,0,0),在RGBA模式下它表示黑色。

void glDrawArrays(GLenum mode, GLint first, GLsizei count);

使用当前绑定的顶点数组元素来建立一系列的几何图元,其实位置为first,而结束位置为first+count-1.mode设置了构建图元的类型,它可以使GL_POINTS、GL_LINES、GL_LINE_STRIP、GL_LINE_LOOP、GL_TRIANGLES、GL_TRIANGLE_STRIP、GL_TRIANGLE_FAN和GL_PATCHES中的任意一种。

void glFinish(void);

强制所有当前的OpenGl命令立即执行,并且等待它们全部完成。

void glEnable(GLenum capability);

void glDisable(GLenum capability);

glEnable()会开启一个模式,glDisable()会关闭它。有很多枚举量可以作为模式参数传入glEnable()和glDisable()。例如GL_DEPTH_TEST可以用来开启或者关闭深度测试;GL_BLEND可以用来控制融合的操作,而GL_RASTERIZER_DISCARD用于transfrom feedback过程中的高级渲染控制。

GLboolean glIsEnabled(GLenum capability);

根据是否启用当前指定的模式,返回GL_TRUE或者GL_FALSE。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值