Men的博客

欢迎光临!

0%

OpenGL 接口

glActiveTexture - 激活纹理单元

C规范

void glActiveTexture(GLenum texture);

参数

texture

指定要激活的纹理单元,纹理单元的数量依赖于实现,但必须至少为8。texture必须是GL_TEXTUREi之一,其中i的范围从0到(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS - 1)。初始值是GL_TEXTURE0。

描述

被glActiveTexture 激活的纹理将会影响其后续的纹理调用状态。

错误

如果纹理ID(texture的值)不是GL_TEXTUREi(其中i的范围从0到(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS - 1))中的一个值得话,就会得到一个状态错误:GL_INVALID_ENUM

相关Gets

GL_ACTIVE_TEXTURE或GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS可以用glGetXXX来得到相关的纹理ID值或GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS值。

eg.

GLint maxNum;

glGetIntegerv(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS,&maxNum);

可以将GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 的值获取放在maxNum中。

另见

glTexParameter

glAttachShader- 将着色器对象附加到program对象

C规范

void glAttachShader(GLuint program,GLuint shader);

参数

program

指定着色器对象将附加到的program对象。

shader

指定要附加的着色器对象。

描述

为了创建一个可执行文件,必须要有一种方法来指定将被链接在一起的东西的列表。那么,program对象就提供了这么一种机制。

要在program对象中链接的shaders必须首先附加到该program对象上。那glAttachShader方法就是用于将指定的shaders附着到指定的program对象上。这就表明shader将被包含在要被执行的program的链接操作中。

不管shader对象是否被附着到program对象上,在shader对象上执行的所有操作都是有效的。

在源代码加载到着色器对象之前或着色器对象被编译之前,将shader对象附着到program对象上都是被允许的。

多个同类型(例如都是vertex shader类型,或都是fragment shader类型)的shader对象不能被附着到同一个program对象上。但是,单个shader对象可以被附着到多个program对象上。

如果着色器对象在附加到程序对象时被删除,它将被标记为删除,并且直到调用glDetachShader才能将其从它所连接的所有程序对象中分离出来,否则删除将不会发生。

错误

GL_INVALID_VALUE:如果program或shader不是由OpenGL所生成的值。

GL_INVALID_OPERATION:如果program参数传的不是program对象。

GL_INVALID_OPERATION:如果shader参数传的不是shader对象。

GL_INVALID_OPERATION:如果shader已经被添加到program对象上了,或者已经有一个同类型的shader对象添加到该program对象上的时候。

相关Gets

glGetAttachedShaders可依据一个有效的program对象来获得其所关联的shaders。

glIsProgram

glIsShader

另见

glCompileShader, glDetachShader, glLinkProgram, glShaderSource, glShaderBinary

glBindAttribLocation - 将通用顶点属性索引与命名属性变量相关联

C规范

void glBindAttribLocation(GLuint program,

                                              GLuint index,

                                              const GLchar *name);

参数

program

指定要在其中建立关联的程序对象的句柄。

index

指定要绑定的通用顶点属性的索引。

name

指定一个以空终止符结尾的字符串,其中包含要绑定索引的顶点着色器属性变量的名称。

描述

glBindAttribLocation用于将程序指定的程序对象中的用户定义属性变量与通用顶点属性索引相关联。用户定义的属性变量的名称作为名称中的空终止字符串传递。要绑定到此变量的通用顶点属性索引由index指定。当程序成为当前状态的一部分时,通过通用顶点属性索引提供的值将修改由name指定的用户定义属性变量的值。

如果name引用矩阵属性变量,则index引用矩阵的第一列。然后,对于mat2类型的矩阵,其他矩阵列自动绑定到位置index + 1; index + 1和index + 2表示mat3类型的矩阵;对于mat4类型的矩阵,index + 1,index + 2和index + 3。

此命令使顶点着色器可以使用属性变量的描述性名称,而不是编号为0到GL_MAX_VERTEX_ATTRIBS -1的泛型变量。发送到每个通用属性索引的值是当前状态的一部分,就像标准顶点属性(如颜色,法线和顶点位置)一样。如果通过调用glUseProgram使不同的程序对象成为当前的程序,则跟踪通用顶点属性,使得新程序对象中的属性也将观察到相同的值,这些属性也绑定到索引。

可以通过调用glBindAttribLocation随时显式分配程序对象的属性变量名称到通用属性索引绑定。在调用glLinkProgram之前,属性绑定不会生效。成功链接程序对象后,通用属性的索引值保持固定(并且可以查询它们的值),直到发生下一个链接命令。

不允许应用程序使用此命令绑定任何标准OpenGL顶点属性,因为它们在需要时自动绑定。在程序对象链接之后发生的任何属性绑定在下次链接程序对象之前不会生效。

注意

可以在任何顶点着色器对象绑定到指定程序对象之前调用glBindAttribLocation。也允许将通用属性索引绑定到从未在顶点着色器中使用的属性变量名称。

如果以前绑定了name,则该信息将丢失。因此,您不能将一个用户定义的属性变量绑定到多个索引,但您可以将多个用户定义的属性变量绑定到同一索引。

允许应用程序将多个用户定义的属性变量绑定到相同的通用顶点属性索引。这称为aliasing(别名),仅当可执行程序中只有一个别名属性处于活动状态时,或者如果没有通过着色器的路径消耗属于同一位置的一组属性的多个属性时,才允许使用别名。允许编译器和链接器假定没有进行别名,并且可以自由地使用仅在没有别名的情况下工作的优化。不需要OpenGL实现来进行错误检查以检测别名。由于无法绑定标准属性,因此无法使用常规属性对通用属性进行别名(通用属性0除外)。

调用glLinkProgram时,链接器将绑定未显式绑定的活动属性。可以通过调用glGetAttribLocation来查询分配的位置。

调用glBindAttribLocation时,OpenGL会复制名称字符串,因此应用程序可以在函数返回后立即释放其名称字符串的副本。

错误

GL_INVALID_VALUE:index>=GL_MAX_VERTEX_ATTRIBS

GL_INVALID_OPERATION:name以保留前缀“gl_”开头

GL_INVALID_VALUE:program不是OpenGL生成的值

GL_INVALID_OPERATION:program不是程序对象

相关Gets

glGet 参数GL_MAX_VERTEX_ATTRIBS

glGetActiveAttrib 参数program

glGetAttribLocation 参数program和name

glIsProgram

另见

glDisableVertexAttribArray,glEnableVertexAttribArray,glUseProgram,glVertexAttrib,glVertexAttribPointer

glBindBuffer- 绑定一个命名(ID)的缓冲区对象

C规范

void glBindBuffer(GLenum target,GLuint buffer);

参数

target

指定缓冲区对象绑定的目标。 符号常量必须为GL_ARRAY_BUFFER或GL_ELEMENT_ARRAY_BUFFER。

buffer

指定缓冲区对象的名称(ID)。

描述

glBindBuffer允许您创建或使用命名缓冲区对象。 调用glBindBuffer,目标设置为GL_ARRAY_BUFFER或GL_ELEMENT_ARRAY_BUFFER,缓冲区设置为新缓冲区对象的名称,这样就将缓冲区对象名称绑定到目标了。 当缓冲区对象绑定到目标时,该目标的先前绑定将自动中断。

缓冲区对象名称是无符号整数。 0值保留,但每个缓冲区对象目标没有默认缓冲区对象。 相反,缓冲区设置为0可以有效地取消绑定先前绑定的任何缓冲区对象,并恢复该缓冲区对象目标的客户机内存使用情况。 缓冲区对象名称和相应的缓冲区对象内容对于当前GL渲染上下文的共享对象空间是本地的。

您可以使用glGenBuffers生成一组新的缓冲区对象名称。

usage为GL_STATIC_DRAW时第一次绑定后的缓冲区对象的状态是零大小的内存缓冲区。

绑定非零缓冲区对象名称时,绑定到的目标上的GL操作会影响绑定缓冲区对象,并且绑定到的目标的查询将从绑定缓冲区对象返回状态。 当绑定缓冲区对象名称零时,如在初始状态中,尝试修改或查询绑定到的目标上的状态会生成GL_INVALID_OPERATION错误。

当通过调用glVertexAttribPointer更改顶点数组指针状态时,当前缓冲区对象绑定(GL_ARRAY_BUFFER_BINDING,GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING中的一个)被复制到要更改的顶点属性数组的相应客户端状态。当非零缓冲区对象绑定到GL_ARRAY_BUFFER目标时,传统上被解释为指向客户端内存的指针的顶点数组指针参数被解释为在基本机器单元中测量的缓冲区对象内的偏移量(glVertexAttribPointer原本的最后一个参数是顶点属性数组的指针,当绑定VBO后,最后一个参数就是指向所绑定的VBO的一个地址了)。

当非零缓冲区对象绑定到GL_ELEMENT_ARRAY_BUFFER目标时,glDrawElements的indices参数(传统上被解释为指向客户端内存的指针)被解释为在基本机器单元中测量的缓冲区对象内的偏移量。

使用glBindBuffer创建的缓冲区对象绑定保持活动状态,直到将不同的缓冲区对象名称绑定到同一目标,或者直到使用glDeleteBuffers删除绑定的缓冲区对象为止。

一旦创建,命名缓冲区对象可以根据需要经常重新绑定到任何目标。 但是,GL实现可以基于其初始绑定目标来选择如何优化缓冲区对象的存储。

错误

GL_INVALID_ENUM :target不是允许的值

相关Gets

glGet 参数GL_ARRAY_BUFFER_BINDING

glGet 参数GL_ELEMENT_ARRAY_BUFFER_BINDING

另见

glDeleteBuffers,glGenBuffers,glGet ,glIsBuffer

glBindFramebuffer- 绑定一个命名的帧缓冲区对象

C规范

void glBindFramebuffer(GLenum target,

                                            GLuint framebuffer);

参数

target

指定帧缓冲区对象绑定的目标。 符号常量必须是GL_FRAMEBUFFER。

framebuffer

指定帧缓冲区对象的名称。

描述

glBindFramebuffer允许您创建或使用命名的帧缓冲对象。 调用glBindFramebuffer并将目标设置为GL_FRAMEBUFFER,将framebuffer设置为新的绑定了帧缓冲区对象名称的帧缓冲区对象。 绑定帧缓冲区对象时,先前的绑定会自动中断。

帧缓冲区对象对象名称是无符号整数。 保留值零以表示由窗口系统提供的默认帧缓冲区。 帧缓冲区对象对象名称和相应的framebuffer对象内容对于当前GL渲染上下文的共享对象空间是本地的。

您可以使用glGenFramebuffers生成一组新的framebuffer对象名称。

第一次绑定后的帧缓冲对象的状态是三个附着点(GL_COLOR_ATTACHMENT0,GL_DEPTH_ATTACHMENT和GL_STENCIL_ATTACHMENT),每个附加点都以GL_NONE作为对象类型。

当绑定了非零帧缓冲区对象名称,但目标GL_FRAMEBUFFER上的GL操作会影响绑定的帧缓冲区对象,目标GL_FRAMEBUFFER或帧缓冲区详细信息(如GL_DEPTH_BITS)的查询将从绑定的帧缓冲区对象返回状态。 当绑定帧缓冲对象名称为0时,则处于初始状态中,尝试修改或查询目标GL_FRAMEBUFFER上的状态会生成GL_INVALID_OPERATION错误。

当绑定了非零帧缓冲对象名称时,所有渲染到帧缓冲区(使用glDrawArrays和glDrawElements)和从帧缓冲区读取(使用glReadPixels,glCopyTexImage2D或glCopyTexSubImage2D)都使用附加到应用程序创建的帧缓冲区对象的图像而不是 默认窗口系统提供的帧缓冲。

应用程序创建的帧缓冲对象(即具有非零名称的对象)与默认的窗口系统提供的帧缓冲区有几个重要的不同。首先,它们具有用于颜色缓冲器,深度缓冲器和模板缓冲器的可修改的附着点,帧缓冲器可附接的图像可以附着和分离。其次,附加图像的大小和格式完全在GL内控制,并且不受窗口系统事件的影响,例如像素格式选择,窗口大小调整和显示模式改变。第三,当渲染或从应用程序创建的帧缓冲对象读取时,像素所有权测试总是成功(即它们拥有所有像素)。第四,没有可见的颜色缓冲位平面,只有一个“屏幕外”的彩色图像附件,因此没有前后缓冲区或swap。最后,没有多重采样缓冲区,因此依赖于实现的状态变量GL_SAMPLES和GL_SAMPLE_BUFFERS的值对于应用程序创建的帧缓冲区对象都是零。

使用glBindFramebuffer创建的帧缓冲区对象绑定保持活动状态,直到绑定了不同的帧缓冲区对象名称,或者直到使用glDeleteFramebuffers删除绑定的帧缓冲区对象。

注意

依赖于实现的像素深度和相关状态的查询是从当前绑定的帧缓冲对象导出的。 这些包括GL_RED_BITS,GL_GREEN_BITS,GL_BLUE_BITS,GL_ALPHA_BITS,GL_DEPTH_BITS,GL_STENCIL_BITS,GL_IMPLEMENTATION_COLOR_READ_TYPE,GL_IMPLEMENTATION_COLOR_READ_FORMAT,GL_SAMPLES和GL_SAMPLE_BUFFERS。

错误

GL_INVALID_ENUM :target不是GL_FRAMEBUFFER。

相关Gets

glGet 参数GL_FRAMEBUFFER_BINDING

另见

glDeleteFramebuffers,glFramebufferRenderbuffer,glFramebufferTexture2D,glGenFramebuffers,glGet ,glGetFramebufferAttachmentParameteriv,glIsFramebuffer

glBindRenderbuffer - 绑定一个命名的渲染缓冲区对象

C规范

void glBindRenderbuffer(GLenum target,

                                              GLuint renderbuffer);

参数

target

指定renderbuffer对象绑定到的目标。 符号常量必须为GL_RENDERBUFFER。

renderbuffer

指定渲染缓冲区对象的名称。

描述

渲染缓冲区对象是一个数据存储对象,包含可渲染内部格式的单个图像。 渲染缓冲区的图像可以附加到帧缓冲区对象,以用作渲染目标和读取源。

glBindRenderbuffer允许您创建或使用命名的渲染缓冲区对象。 调用glBindRenderbuffer并将目标设置为GL_RENDERBUFFER并将renderbuffer设置为绑定了渲染缓冲区对象名称的新对象缓冲区。 绑定渲染缓冲区对象时,先前的绑定会自动中断。

渲染缓冲区对象名称是无符号整数。 零值保留,但没有默认的渲染缓冲区对象。 相反,renderbuffer设置为0可以有效地解除先前绑定的任何渲染缓冲区对象的绑定。 渲染缓冲区对象名称和相应的渲染缓冲区对象内容对于当前GL渲染上下文的共享对象空间是本地的。

您可以使用glGenFramebuffers生成一组新的renderbuffer对象名称。

第一次绑定后立即渲染缓冲区对象的状态是零大小的内存缓冲区,格式为GL_RGBA4,零大小的红色,绿色,蓝色,alpha,深度和模板像素深度。

绑定非零渲染缓冲区对象名称时,目标GL_RENDERBUFFER上的GL操作会影响绑定的渲染缓冲区对象,目标GL_RENDERBUFFER的查询将从绑定的渲染缓冲区对象返回状态。 当绑定渲染缓冲区对象名称为0时,如在初始状态中,尝试修改或查询目标GL_RENDERBUFFER上的状态会生成GL_INVALID_OPERATION错误。

使用glBindRenderbuffer创建的renderbuffer对象绑定保持活动状态,直到绑定了另一个renderbuffer对象名称,或者直到使用glDeleteRenderbuffers删除绑定的renderbuffer对象。

错误

GL_INVALID_ENUM :target不是GL_RENDERBUFFER。

相关Gets

glGet 参数GL_RENDERBUFFER_BINDING

另见

glDeleteRenderbuffers,glFramebufferRenderbuffer,glGenRenderbuffers,glGet,glGetRenderbufferParameteriv,glIsRenderbuffer,glRenderbufferStorage

glBindTexture- 将一个指定的纹理ID绑定到一个纹理目标上

C规范

void glBindTexture(GLenum target, GLuint texture);

参数

target

指定之前激活了的纹理要绑定到的一个目标。必须是GL_TEXTURE_2D 或GL_TEXTURE_CUBE_MAP。

texture

指定纹理ID。

描述

glBindTexture可以让你创建或使用一个纹理ID。调用glBindTexture,target设置为GL_TEXTURE_2D 或GL_TEXTURE_CUBE_MAP,texture设置为已经激活了的要绑定到目标的纹理ID。当一个纹理ID绑定到目标时,这个目标之前的绑定关系就会自动解除。

纹理ID都是无符整型的(unsigned intege),数值0被系统保留用于表示每个纹理目标的默认纹理。纹理ID和相应的纹理内容对当前的GL渲染环境的共享对象空间来说都是本地的。

我们可以调用glGenTextures来创建一些列的纹理ID。

当一个纹理首次被绑定时,它采用指定的目标:一个纹理首次绑定到GL_TEXTURE_2D将成为二维纹理,首次绑定到GL_TEXTURE_CUBE_MAP的将成为立方体贴图纹理,紧接在第一次绑定后的二维纹理的状态等效于GL初始化时的默认GL_TEXTURE_2D的状态,对于立方体映射的纹理也是如此。

当一个纹理被绑定后,那GL对该纹理所绑定到的目标进行的操作也将影响绑定的纹理,而对目标的查询将是返回该纹理的状态值,也就是相当于目标变成了纹理ID的另一个索引ID。纹理ID=0会引用在初始化时绑定到它们的默认纹理。

由glBindTexture创建的绑定关系将一直保持激活状态,除非当前目标被另一个纹理ID绑定,或者是绑定的纹理ID通过调用glDeleteTextures删除了。

一旦被创建,一个纹理ID是可以重复绑定到它原来的目标上的。使用glBindTexture将一个已经存在的纹理ID绑定到一个目标上要比通过glTexImage2D重新加载纹理图像快得多。

错误

GL_INVALID_ENUM :如果target不是一个被允许的值(GL_TEXTURE_2D 或GL_TEXTURE_CUBE_MAP)。

GL_INVALID_OPERATION :如果texture是之前创建的,并且绑定了一个目标,而这一次调用glBindTexture绑定的目标和之前的目标不一致。

相关Gets

glGet 变量:GL_TEXTURE_BINDING_2D 或 GL_TEXTURE_BINDING_CUBE_MAP

另见

glDeleteTextures glGenTextures glGet glGetTexParameter glIsTexture glTexImage2D glTexParameter

glBlendColor- 设置混合颜色

C规范

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

参数

red, green, blue, alpha

指定GL_BLEND_COLOR的组件

描述

GL_BLEND_COLOR可用于计算源和目标混合因子。 在存储之前,颜色分量被截断到[0,1]的范围。 有关混合操作的完整说明,请参阅glBlendFunc。 最初,GL_BLEND_COLOR设置为(0,0,0,0)。

相关Gets

glGet 参数GL_BLEND_COLOR

另见

glBlendEquation,glBlendFunc,glGetString

glBlendEquation - 指定用于RGB混合方程和Alpha混合方程的方程式

C规范

void glBlendEquation( GLenum mode);

参数

mode

指定源和目标颜色的组合方式。它必须是GL_FUNC_ADD,GL_FUNC_SUBTRACT或GL_FUNC_REVERSE_SUBTRACT。

描述

混合方程式确定新像素(“源”颜色)如何与​​帧缓冲区中已有的像素(“目标”颜色)组合。此功能将RGB混合方程和α混合方程设置为单个方程。

这些等式使用由glBlendFunc或glBlendFuncSeparate指定的源和目标混合因子。有关各种混合因子的说明,请参阅glBlendFunc或glBlendFuncSeparate。

在下面的等式中,源和目标颜色分量分别称为Rs Gs Bs As和Rd Gd Bd Ad。结果颜色称为Rr Gr Br Ar。源和目的地混合因子分别表示为sR sG sB sA和dR dG dB dA.对于这些等式,所有颜色分量被理解为具有[0,1]范围内的值。

Mode RGB Alpha
GL_FUNC_ADD
Rr = RssR + RddR
Gr = GssG + GddG
Br = BssB + BddB
Ar = AssA + AddA
GL_FUNC_SUBTRACT Rr = RssR - RddR
Gr = GssG - GddG
Br = BssB - BddB Ar = AssA - AddA
GL_FUNC_REVERSE_SUBTRACT Rr = RddR - RssR
Gr = GddG - GssG
Br = BddB - BssB Ar = AddA - AssA
这些方程的结果被限制在[0,1]的范围内。

除其他外,GL_FUNC_ADD方程对于抗锯齿和透明度非常有用。

默认的,RGB混合方程和α混合方程都设置为GL_FUNC_ADD。

错误

GL_INVALID_ENUM:mode不是GL_FUNC_ADD,GL_FUNC_SUBTRACT或GL_FUNC_REVERSE_SUBTRACT之一

相关Gets

glGet 参数GL_BLEND_EQUATION_RGB

glGet 参数GL_BLEND_EQUATION_ALPHA

另见

glGetString,glBlendColor,glBlendEquationSeparate,glBlendFunc,glBlendFuncSeparate

glBlendEquationSeparate - 分别设置RGB混合方程和alpha混合方程

C规范

void glBlendEquationSeparate( GLenum modeRGB,
GLenum modeAlpha);

参数

modeRGB

指定RGB混合方程,如何组合源和目标颜色的红色,绿色和蓝色分量。它必须是GL_FUNC_ADD,GL_FUNC_SUBTRACT或GL_FUNC_REVERSE_SUBTRACT。

modeAlpha

指定alpha混合等式,如何组合源和目标颜色的alpha分量。它必须是GL_FUNC_ADD,GL_FUNC_SUBTRACT或GL_FUNC_REVERSE_SUBTRACT。

描述

混合方程式确定新像素(“源”颜色)如何与​​帧缓冲区中已有的像素(“目标”颜色)组合。此函数指定RGB颜色分量的一个混合方程和alpha分量的一个混合方程。

这些等式使用由glBlendFunc或glBlendFuncSeparate指定的源和目标混合因子。有关各种混合因子的说明,请参阅glBlendFunc或glBlendFuncSeparate。

在下面的等式中,源和目标颜色分量分别称为Rs Gs Bs As和Rd Gd Bd Ad。结果颜色称为Rr Gr Br Ar。源和目的地混合因子分别表示为sR sG sB sA和dR dG dB dA.对于这些等式,所有颜色分量被理解为具有[0,1]范围内的值。

Mode RGB Alpha
GL_FUNC_ADD
Rr = RssR + RddR
Gr = GssG + GddG
Br = BssB + BddB
Ar = AssA + AddA
GL_FUNC_SUBTRACT Rr = RssR - RddR
Gr = GssG - GddG
Br = BssB - BddB Ar = AssA - AddA
GL_FUNC_REVERSE_SUBTRACT Rr = RddR - RssR
Gr = GddG - GssG
Br = BddB - BssB Ar = AddA - AssA
这些方程的结果被限制在[0,1]的范围内。

除其他外,GL_FUNC_ADD方程对于抗锯齿和透明度非常有用。

默认的,RGB混合方程和α混合方程都设置为GL_FUNC_ADD。

错误

GL_INVALID_ENUM:modeRGB或modeAlpha不是GL_FUNC_ADD,GL_FUNC_SUBTRACT或GL_FUNC_REVERSE_SUBTRACT之一。

相关Gets

glGet 参数GL_BLEND_EQUATION_RGB

glGet 参数GL_BLEND_EQUATION_ALPHA

另见

glGetString,glBlendColor,glBlendEquation,glBlendFunc,glBlendFuncSeparate

glBlendFunc - 指定像素算术

C规范

void glBlendFunc( GLenum sfactor,
GLenum dfactor);

参数

sfactor

指定如何计算红色,绿色,蓝色和alpha源混合因子。下列符号常量被接受:GL_ZERO,GL_ONE,GL_SRC_COLOR,GL_ONE_MINUS_SRC_COLOR,GL_DST_COLOR,GL_ONE_MINUS_DST_COLOR,GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA,GL_DST_ALPHA,GL_ONE_MINUS_DST_ALPHA,GL_CONSTANT_COLOR,GL_ONE_MINUS_CONSTANT_COLOR,GL_CONSTANT_ALPHA,GL_ONE_MINUS_CONSTANT_ALPHA和GL_SRC_ALPHA_SATURATE。初始值为GL_ONE。

dfactor

指定如何计算红色,绿色,蓝色和alpha目标混合因子。接受以下符号常量:GL_ZERO,GL_ONE,GL_SRC_COLOR,GL_ONE_MINUS_SRC_COLOR,GL_DST_COLOR,GL_ONE_MINUS_DST_COLOR,GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA,GL_DST_ALPHA,GL_ONE_MINUS_DST_ALPHA。 GL_CONSTANT_COLOR,GL_ONE_MINUS_CONSTANT_COLOR,GL_CONSTANT_ALPHA和GL_ONE_MINUS_CONSTANT_ALPHA。初始值为GL_ZERO。

描述

可以使用将输入(源)RGBA值与帧缓冲区中已有的RGBA值(目标值)混合的函数来绘制像素。最初禁用混合。使用参数GL_BLEND调用glEnable和glDisable以启用和禁用混合。

glBlendFunc定义启用时的混合操作。 sfactor指定用于缩放源颜色分量的方法。 dfactor指定用于缩放目标颜色分量的方法。可能的方法如下表所述。每种方法都定义了四个比例因子,分别为红色,绿色,蓝色和alpha。在表格和随后的等式中,源和目标颜色分量被称为Rs Gs Bs As和Rd Gd Bd Ad。 glBlendColor指定的颜色称为Rc Gc Bc Ac。它们被理解为具有0到kR kG kB kA之间的整数值,其中

kc=2^mc-1;(mR mG mB mA是红色,绿色,蓝色和alpha位平面的数量)

源和目标比例因子称为sR sG sB sA和dR dG dB dA.表中描述的比例因子,记为fR fG fB fA,表示源或目标因子。所有比例因子的范围均为[0,1]。

混合函数
混合系数枚举值 fR fG fB fA
GL_ZERO 0,0,0 0
GL_ONE 1,1,1 1
GL_SRC_COLOR Rs,Gs,Bs As
GL_ONE_MINUS_SRC_COLOR 1-Rs,1-Gs,1-Bs 1-As
GL_SRC_ALPHA As,As,As As
GL_ONE_MINUS_SRC_ALPHA 1-As,1-As,1-As 1-As
GL_DST_COLOR Rd,Gd,Bd Ad
GL_ONE_MINUS_DST_COLOR 1-Rd,1-Gd,1-Bd 1-Ad
GL_DST_ALPHA Ad,Ad,Ad Ad
GL_ONE_MINUS_DST_ALPHA 1-Ad,1-Ad,1-Ad 1-Ad
GL_CONSTANT_COLOR Rc,Gc,Bc Ac
GL_ONE_MINUS_CONSTANT_COLOR 1-Rc,1-Gc,1-Bc 1-Ac
GL_CONSTANT_ALPHA Ac,Ac,Ac Ac
GL_ONE_MINUS_CONSTANT_ALPHA 1-Ac,1-Ac,1-Ac 1-Ac
GL_SRC_ALPHA_SATURATE min(As,1-Ad) 1
为了确定像素的混合RGBA值,系统会使用由glBlendEquation或glBlendEquationSeparate设置的方程之一。

未精确指定混合算法,因为混合使用不精确的整数颜色值。但是,保证应该等于1的混合因子不会修改其被乘数,并且混合因子等于0会将其被乘数减少为0。

注意

传入(源)alpha被视为材料的不透明度,范围从表示完全不透明度的1.0(kA)到0.0(0),表示完全透明。

最好使用混合函数(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA)实现透明度,其中基元从最远到最近排序。请注意,此透明度计算不要求帧缓冲区中存在alpha位平面。

错误

GL_INVALID_ENUM:sfactor或dfactor不是可接受的值。

相关Gets

glGet 参数GL_BLEND_SRC_RGB或GL_BLEND_SRC_ALPHA

glGet 参数GL_BLEND_DST_RGB或GL_BLEND_DST_ALPHA

glIsEnabled 参数GL_BLEND

另见

glBlendColor,glBlendEquation,glBlendEquationSeparate,glBlendFuncSeparate,glClear,glEnable,glStencilFunc

glBlendFuncSeparate - 分别指定RGB和alpha分量的像素算术

C规范

void glBlendFuncSeparate( GLenum srcRGB,
GLenum dstRGB,
GLenum srcAlpha,
GLenum dstAlpha);

参数

srcRGB

指定如何计算红色,绿色和蓝色混合因子。下列符号常量被接受:GL_ZERO,GL_ONE,GL_SRC_COLOR,GL_ONE_MINUS_SRC_COLOR,GL_DST_COLOR,GL_ONE_MINUS_DST_COLOR,GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA,GL_DST_ALPHA,GL_ONE_MINUS_DST_ALPHA,GL_CONSTANT_COLOR,GL_ONE_MINUS_CONSTANT_COLOR,GL_CONSTANT_ALPHA,GL_ONE_MINUS_CONSTANT_ALPHA和GL_SRC_ALPHA_SATURATE。初始值为GL_ONE。

dstRGB

指定如何计算红色,绿色和蓝色目标混合因子。接受以下符号常量:GL_ZERO,GL_ONE,GL_SRC_COLOR,GL_ONE_MINUS_SRC_COLOR,GL_DST_COLOR,GL_ONE_MINUS_DST_COLOR,GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA,GL_DST_ALPHA,GL_ONE_MINUS_DST_ALPHA。 GL_CONSTANT_COLOR,GL_ONE_MINUS_CONSTANT_COLOR,GL_CONSTANT_ALPHA和GL_ONE_MINUS_CONSTANT_ALPHA。初始值为GL_ZERO。

srcAlpha

指定如何计算alpha源混合因子。对于srcRGB,接受相同的符号常量。初始值为GL_ONE。

dstAlpha

指定如何计算alpha目标混合因子。 dstRGB接受相同的符号常量。初始值为GL_ZERO。

描述

可以使用将输入(源)RGBA值与帧缓冲区中已有的RGBA值(目标值)混合的函数来绘制像素。最初禁用混合。使用参数GL_BLEND调用glEnable和glDisable以启用和禁用混合。

glBlendFuncSeparate定义启用时的混合操作。 srcRGB指定用于缩放源RGB颜色分量的方法。 dstRGB指定用于缩放目标RGB颜色分量的方法。同样,srcAlpha指定用于缩放源alpha颜色分量的方法,dstAlpha指定用于缩放目标alpha分量的方法。可能的方法如下表所述。每种方法都定义了四个比例因子,分别为红色,绿色,蓝色和alpha。

在表格和随后的等式中,源和目标颜色分量被称为Rs Gs Bs As和Rd Gd Bd Ad。 glBlendColor指定的颜色称为Rc Gc Bc Ac。它们被理解为具有0到kR kG kB kA之间的整数值,其中

kc=2^mc-1;(mR mG mB mA是红色,绿色,蓝色和alpha位平面的数量)

源和目标比例因子称为sR sG sB sA和dR dG dB dA.表中描述的比例因子,记为fR fG fB fA,表示源或目标因子。所有比例因子的范围均为[0,1]。

混合函数
混合系数枚举值 fR fG fB fA
GL_ZERO 0,0,0 0
GL_ONE 1,1,1 1
GL_SRC_COLOR Rs,Gs,Bs As
GL_ONE_MINUS_SRC_COLOR 1-Rs,1-Gs,1-Bs 1-As
GL_SRC_ALPHA As,As,As As
GL_ONE_MINUS_SRC_ALPHA 1-As,1-As,1-As 1-As
GL_DST_COLOR Rd,Gd,Bd Ad
GL_ONE_MINUS_DST_COLOR 1-Rd,1-Gd,1-Bd 1-Ad
GL_DST_ALPHA Ad,Ad,Ad Ad
GL_ONE_MINUS_DST_ALPHA 1-Ad,1-Ad,1-Ad 1-Ad
GL_CONSTANT_COLOR Rc,Gc,Bc Ac
GL_ONE_MINUS_CONSTANT_COLOR 1-Rc,1-Gc,1-Bc 1-Ac
GL_CONSTANT_ALPHA Ac,Ac,Ac Ac
GL_ONE_MINUS_CONSTANT_ALPHA 1-Ac,1-Ac,1-Ac 1-Ac
GL_SRC_ALPHA_SATURATE min(As,1-Ad) 1
为了确定像素的混合RGBA值,系统会使用由glBlendEquation或glBlendEquationSeparate设置的方程之一。

未精确指定混合算法,因为混合使用不精确的整数颜色值。但是,保证应该等于1的混合因子不会修改其被乘数,并且混合因子等于0会将其被乘数减少为0。

注意

传入(源)alpha被视为材料的不透明度,范围从表示完全不透明度的1.0(kA)到0.0(0),表示完全透明。

错误

GL_INVALID_ENUM:srcRGB,dstRGB,srcAlpha或dstAlpha不是可接受的值。

相关Gets

glGet 参数GL_BLEND_SRC_RGB

glGet 参数GL_BLEND_SRC_ALPHA

glGet 参数GL_BLEND_DST_RGB

glGet 参数GL_BLEND_DST_ALPHA

glIsEnabled 参数GL_BLEND

另见

glBlendColor,glBlendEquation,glBlendEquationSeparate,glBlendFunc,glClear,glEnable,glStencilFunc

glBufferData- 创建并初始化缓冲区对象的数据存储

C规范

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

参数

target

指定目标缓冲区对象。 符号常量必须为GL_ARRAY_BUFFER或GL_ELEMENT_ARRAY_BUFFER。

size

指定缓冲区对象的新数据存储的大小(以字节为单位)。

data

指定将复制到数据存储区以进行初始化的数据的指针,如果不复制数据,则指定NULL。

usage

指定数据存储的预期使用模式。 符号常量必须为GL_STREAM_DRAW,GL_STATIC_DRAW或GL_DYNAMIC_DRAW。

描述

glBufferData为当前绑定到target的缓冲区对象创建一个新的数据存储。 删除任何预先存在的数据存储。 使用指定的字节和usage创建新数据存储。 如果data不是NULL,则使用来自此指针的数据初始化数据存储。

usage是关于如何访问缓冲区对象的数据存储的GL实现的提示。这使GL实现能够做出更明智的决策,这可能会显着影响缓冲区对象的性能。 但是,它不会限制数据存储的实际使用。usage可以分为两部分:第一,访问频率(修改和使用),第二,访问的性质。 访问频率可能是以下之一:

STREAM

    数据存储内容将被修改一次并最多使用几次。

STATIC

    数据存储内容将被修改一次并多次使用。

DYNAMIC

    数据存储内容将被重复修改并多次使用。

访问的性质必须是:

DRAW

    数据存储内容由应用程序修改,并用作GL绘图和图像规范命令的源。

注意

如果data为NULL,则仍会创建指定大小的数据存储,但其内容仍未初始化,因此被视为未定义的。

客户端必须使数据元素与客户端平台的要求保持一致,并具有额外的基本级要求,即缓冲区内对包含N的数据的偏移量是N的倍数。

错误

GL_INVALID_ENUM :target不是GL_ARRAY_BUFFER或GL_ELEMENT_ARRAY_BUFFER。

GL_INVALID_ENUM :usage不是GL_STREAM_DRAW,GL_STATIC_DRAW或GL_DYNAMIC_DRAW。

GL_INVALID_VALUE :size是负数

GL_INVALID_OPERATION :如果保留的缓冲区对象名称0绑定到target。

GL_OUT_OF_MEMORY :如果GL无法创建具有指定大小的数据存储

相关Gets

glGetBufferParameteriv 参数 GL_BUFFER_SIZE 或GL_BUFFER_USAGE

另见

glBindBuffer,glBufferSubData​​​​​​​​​​​​​​

版权、

glBufferSubData - 更新缓冲区对象的数据存储的子集

C规范

void glBufferSubData( GLenum target,
GLintptr offset,
GLsizeiptr size,
const GLvoid * data);

参数

target

指定目标缓冲区对象。符号常量必须为GL_ARRAY_BUFFER或GL_ELEMENT_ARRAY_BUFFER。

offset

指定缓冲区对象的数据存储中的需要数据替换偏移量,以字节为单位进行测量。

size

指定要替换的数据存储区域的大小(以字节为单位)。
data

指定指向将复制到数据存储中的新数据的指针。

描述

glBufferSubData重新定义当前绑定到target的缓冲区对象的部分或全部数据存储。从字节偏移量offset开始并扩展为size字节的数据从data指向的存储器复制到数据存储器。如果offset和size一起定义超出缓冲区对象的数据存储边界的范围,则抛出错误。

注意

替换整个数据存储时,请考虑使用glBufferSubData而不是使用glBufferData完全重新创建数据存储。这避免了重新分配数据存储的成本。

考虑使用多个缓冲区对象,以避免在数据存储更新期间停止渲染管道。如果管道中的任何渲染引用glBufferSubData正在更新的缓冲区对象中的数据,特别是来自正在更新的特定区域,则在更新数据存储之前,该渲染必须从管道中消失。

客户端必须使数据元素与客户端平台的要求保持一致,并具有额外的基本级要求,即缓冲区内对包含N的数据的偏移量是N的倍数。

错误

GL_INVALID_ENUM:target不是GL_ARRAY_BUFFER或GL_ELEMENT_ARRAY_BUFFER

GL_INVALID_VALUE:offset或size为负,或者如果它们在一起,而定义超出缓冲区对象的已分配数据存储的内存区域。

GL_INVALID_OPERATION:保留的缓冲区对象名称0绑定到target

另见

glBindBuffer,glBufferData

glCheckFramebufferStatus - 返回帧缓冲区对象的帧缓冲区完整性状态

C规范

GLenum glCheckFramebufferStatus(GLenum target);

参数

target

指定目标帧缓冲区对象。 符号常量必须是GL_FRAMEBUFFER。

描述

glCheckFramebufferStatus返回一个符号常量,用于标识当前绑定的帧缓冲是否为帧缓冲完成,如果不是“完成”,则返回违反帧缓冲完整性的哪个规则的标识。

如果帧缓冲完成,则返回GL_FRAMEBUFFER_COMPLETE。 如果帧缓冲未完成,则返回值如下:

GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT

    并非所有帧缓冲附加点都是帧缓冲附件完成。 这意味着附加渲染缓冲区或纹理的至少一个附着点的附加对象不再存在,可能是具有宽度或高度为零的附加图像,或者颜色附加点附加了不可着色的图像, 或深度附着点附有非深度可渲染图像,或者模板附着点附有非模板可渲染图像。

    颜色可渲染格式包括GL_RGBA4,GL_RGB5_A1和GL_RGB565。 GL_DEPTH_COMPONENT16是唯一可深度渲染的格式。 GL_STENCIL_INDEX8是唯一的模板可渲染格式。

GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS

    并非所有附加图像都具有相同的宽度和高度。

GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT

    没有图像附加到帧缓冲区。

GL_FRAMEBUFFER_UNSUPPORTED

    附加图像的内部格式的组合违反了依赖于实现的一组限制。

如果当前绑定的帧缓冲区不是帧缓冲区完成,则尝试使用帧缓冲区进行写入或读取是错误的。 这意味着渲染命令(glClear,glDrawArrays和glDrawElements)以及读取帧缓冲区(glReadPixels,glCopyTexImage2D和glCopyTexSubImage2D)的命令将在帧缓冲区未完成帧缓冲区时调用时生成错误GL_INVALID_FRAMEBUFFER_OPERATION。

注意

强烈建议(即使并不需要),应用程序调用glCheckFramebufferStatus以查看帧缓冲是否在渲染之前完成。这是因为某些实现可能不支持呈现内部格式的特定组合。 在这种情况下将会返回GL_FRAMEBUFFER_UNSUPPORTED。

默认的窗口系统提供的帧缓冲区总是帧缓冲完成,因此当GL_FRAMEBUFFER_BINDING为0时返回GL_FRAMEBUFFER_COMPLETE。

此外,如果发生错误,则返回0。

错误

GL_INVALID_ENUM :如果target不是GL_FRAMEBUFFER。

另见

glBindRenderbuffer,glCopyTexImage2D,glCopyTexSubImage2D,glDrawArrays,glDrawElements,glReadPixels,glRenderbufferStorage

版权

glClear- 清除预设值的缓冲区

C规范

void glClear(GLbitfield mask);

参数

mask

使用掩码的按位异或运算来表示要清除的缓冲区。 三个掩码是GL_COLOR_BUFFER_BIT,GL_DEPTH_BUFFER_BIT和GL_STENCIL_BUFFER_BIT。

描述

glClear将窗口的位平面区域设置为先前由glClearColor,glClearDepthf和glClearStencil设置的值。

像素的归属测试,裁剪测试,抖动和缓冲区按位掩码都会影响glClear的操作。裁剪箱限定了清除区域。glClear忽略混合函数,模板,片元着色和深度缓冲。

glClear采用单个参数,该参数是多个值的按位异或,指示要清除哪个缓冲区。

值如下:

GL_COLOR_BUFFER_BIT
表示当前启用了颜色写入的缓冲区。

GL_DEPTH_BUFFER_BIT
深度缓冲区。

GL_STENCIL_BUFFER_BIT
指示模板缓冲区。

清除每个缓冲区的值取决于该缓冲区的清除值的设置。

注意

如果不存在缓冲区,则指向该缓冲区的glClear无效。

错误

GL_INVALID_VALUE :如果掩码中设置了除三个定义位以外的任何位。

相关Gets

glGet 参数GL_DEPTH_CLEAR_VALUE

glGet 参数GL_COLOR_CLEAR_VALUE

glGet 参数GL_STENCIL_CLEAR_VALUE

另见

glClearColor,glClearDepthf,glClearStencil,glColorMask,glDepthMask,glScissor,glStencilMask

glClearColor- 为颜色缓冲区指定清除值

C规范

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

参数

red

green

blue

alpha

指定颜色缓冲区清除时的RGBA值,默认都是0

描述

glClearColor为glClear清除颜色缓冲区时指定RGBA值(也就是所有的颜色都会被替换成指定的RGBA值)。每个值的取值范围都是0.0~1.0,超出范围的将被截断。

相关Gets

glGetXXX 获取GL_COLOR_CLEAR_VALUE的值。

另见

glClear

glClearDepthf - 指定深度缓冲区的清除值

C规范

void glClearDepthf( GLclampf depth);

参数

depth

指定清除深度缓冲区时使用的深度值。 初始值为1。

描述

glClearDepthf指定glClear用于清除深度缓冲区的深度值。 glClearDepthf指定的值被限制在0 1范围内。

相关Gets

glGet 参数GL_DEPTH_CLEAR_VALUE

另见

glClear

glClearStencil - 指定模板缓冲区的清除值

C规范

void glClearStencil( GLint s);

参数

s

指定清除模板缓冲区时使用的索引。 初始值为0。

描述

glClearStencil指定glClear用于清除模板缓冲区的索引。 s被设置为2^m - 1,其中m是模板缓冲区中的位数。

相关Gets

glGet 参数GL_STENCIL_CLEAR_VALUE

glGet 参数GL_STENCIL_BITS

另见

glClear,glStencilFunc,glStencilFuncSeparate,glStencilMask,glStencilMaskSeparate,glStencilOp,glStencilOpSeparate

glColorMask - 启用和禁用帧缓冲区颜色分量的写入

C规范

void glColorMask( GLboolean red,
GLboolean green,
GLboolean blue,
GLboolean alpha);

参数

red, green, blue, alpha

指定是否可以将红色,绿色,蓝色和alpha写入帧缓冲区。 初始值均为GL_TRUE,表示可以写入颜色分量。

描述

glColorMask指定是否可以写入帧缓冲区中的各个颜色分量。 例如,如果红色为GL_FALSE,则无论是否尝试绘制操作,都不会对任何颜色缓冲区中任何像素的红色分量进行任何更改。

无法控制对组件各个位的更改。 而是为整个颜色组件启用或禁用更改。

相关Gets

glGet 参数GL_COLOR_WRITEMASK

另见

glClear,glDepthMask,glStencilMask

glCompileShader - 编译一个着色器对象

C规范

void glCompileShader(GLuint shader);

参数

shader

指定要编译的着色器对象。

描述

对于支持着色器编译器的实现,glCompileShader编译已存储在shader指定的着色器对象中的源代码字符串。

编译状态将存储为着色器对象的状态的一部分。 如果着色器编译时没有错误并且可以使用,则此值将设置为GL_TRUE,否则将设置为GL_FALSE。 可以通过使用参数shader和GL_COMPILE_STATUS调用glGetShaderiv来查询状态值。

由于OpenGL ES着色语言规范指定的多种原因,着色器的编译可能会失败。 无论编译是否成功,都可以通过调用glGetShaderInfoLog从着色器对象的信息日志中获取有关编译的信息。

注意

着色器编译器支持是可选的,因此必须在使用之前通过使用参数GL_SHADER_COMPILER调用glGet来查询。glShaderSource,glCompileShader,glGetShaderPrecisionFormat,glReleaseShaderCompiler等在不支持着色器编译器的实现上都将生成GL_INVALID_OPERATION。这样的实现提供了glShaderBinary替代方案,用于提供预编译的着色器二进制文件。

错误

GL_INVALID_OPERATION:不支持着色器编译器

GL_INVALID_VALUE:shader不是OpenGL生成的值

GL_INVALID_OPERATION:shader不是着色器对象

相关Gets

glGet 参数GL_SHADER_COMPILER

glGetShaderiv 参数shader和GL_COMPILE_STATUS

glGetShaderInfoLog 参数shader

glIsShader

另见

glCreateShader,glLinkProgram,glReleaseShaderCompiler,glShaderSource,glGetShaderPrecisionFormat

版权

glCompressedTexImage2D - 以压缩格式指定二维纹理图像

C规范

void glCompressedTexImage2D( GLenum target,
GLint level,
GLenum internalformat,
GLsizei width,
GLsizei height,
GLint border,
GLsizei imageSize,
const GLvoid * data);

参数

target

指定活动纹理单元的目标纹理。必须是GL_TEXTURE_2D,GL_TEXTURE_CUBE_MAP_POSITIVE_X,GL_TEXTURE_CUBE_MAP_NEGATIVE_X,GL_TEXTURE_CUBE_MAP_POSITIVE_Y,GL_TEXTURE_CUBE_MAP_NEGATIVE_Y,GL_TEXTURE_CUBE_MAP_POSITIVE_Z或GL_TEXTURE_CUBE_MAP_NEGATIVE_Z。

level

指定详细级别。 0级是基本图像级别。级别n是第n个mipmap缩小图像。

internalformat

指定存储在地址数据中的压缩图像数据的格式。

width

指定纹理图像的宽度。所有实现都支持至少64个纹素宽的2D纹理图像和至少16个纹素宽的立方体映射纹理图像。

height

指定纹理图像的高度。所有实现都支持至少64个纹素高的2D纹理图像和至少16个纹素高的立方体映射纹理图像。

border

指定边框的宽度。必须为0。

imageSize

指定从data指定的地址开始的图像数据的无符号字节数。

data

指定指向内存中压缩图像数据的指针。

描述

纹理将指定纹理图像的一部分映射到纹理处于活动状态的每个图形基元上。当前片段着色器或顶点着色器使用内置纹理查找功能时,纹理处于活动状态。

glCompressedTexImage2D使用来自客户端内存的压缩图像数据定义二维纹理图像或立方体贴图纹理图像。根据定义指定内部格式的扩展规范来解码纹理图像。 OpenGL ES没有定义特定的压缩纹理格式,但确实提供了一种机制来获取扩展提供的这种格式的符号常量。通过查询GL_NUM_COMPRESSED_TEXTURE_FORMATS的值可以获得支持的压缩纹理格式的数量。支持的特定压缩纹理格式列表可以通过查询GL_COMPRESSED_TEXTURE_FORMATS的值来获得。

注意

GL实现可以选择以其选择的任何内部分辨率存储纹理数组。

glCompressedTexImage2D指定使用glActiveTexture指定的纹理单元的二维或立方体贴图纹理。

错误

GL_INVALID_ENUM:target不是GL_TEXTURE_2D,GL_TEXTURE_CUBE_MAP_POSITIVE_X,GL_TEXTURE_CUBE_MAP_NEGATIVE_X,GL_TEXTURE_CUBE_MAP_POSITIVE_Y,GL_TEXTURE_CUBE_MAP_NEGATIVE_Y,GL_TEXTURE_CUBE_MAP_POSITIVE_Z或GL_TEXTURE_CUBE_MAP_NEGATIVE_Z

GL_INVALID_ENUM:internalformat不是GL_COMPRESSED_TEXTURE_FORMATS中返回的受支持格式

GL_INVALID_VALUE:level小于0

GL_INVALID_VALUE:level大于log 2 max,其中max是当目标是GL_TEXTURE_2D时GL_MAX_TEXTURE_SIZE的返回值,或者当目标不是GL_TEXTURE_2D时GL_MAX_CUBE_MAP_TEXTURE_SIZE

GL_INVALID_VALUE:当target是GL_TEXTURE_2D时GL_MAX_TEXTURE_SIZE的宽度或高度小于或大于GL_MAX_TEXTURE_SIZE。

GL_INVALID_VALUE:border不为0

GL_INVALID_VALUE:imageSize与指定的压缩图像数据的格式,尺寸和内容不一致

GL_INVALID_OPERATION:特定纹理压缩扩展中指定的特定压缩内部格式不支持参数组合

如果数据的编码方式与定义内部压缩格式的扩展规范不一致,则会生成未定义的结果,包括异常的程序终止。

相关Gets

glGet 参数GL_NUM_COMPRESSED_TEXTURE_FORMATS和GL_COMPRESSED_TEXTURE_FORMATS

glGet 参数GL_MAX_TEXTURE_SIZE或GL_MAX_CUBE_MAP_TEXTURE_SIZE

另见

glActiveTexture,glCompressedTexSubImage2D,glCopyTexImage2D,glCopyTexSubImage2D,glTexImage2D,glTexSubImage2D,glTexParameter

glCompressedTexSubImage2D - 以压缩格式指定二维纹理子图像

C规范

void glCompressedTexSubImage2D( GLenum target,
GLint level,
GLint xoffset,
GLint yoffset,
GLsizei width,
GLsizei height,
GLenum format,
GLsizei imageSize,
const GLvoid * data);

参数

target

指定活动纹理单元的目标纹理。必须是GL_TEXTURE_2D,GL_TEXTURE_CUBE_MAP_POSITIVE_X,GL_TEXTURE_CUBE_MAP_NEGATIVE_X,GL_TEXTURE_CUBE_MAP_POSITIVE_Y,GL_TEXTURE_CUBE_MAP_NEGATIVE_Y,GL_TEXTURE_CUBE_MAP_POSITIVE_Z或GL_TEXTURE_CUBE_MAP_NEGATIVE_Z。

level

指定详细级别。 0级是基本图像级别。级别n是第n个mipmap缩小图像。

xoffset

指定纹理数组中x方向的纹素偏移。

yoffset

指定纹理数组内y方向的纹素偏移量。

width

指定纹理子图像的宽度。

height

指定纹理子图像的高度。

format

指定存储在地址数据中的压缩图像数据的格式。

imageSize

指定从data指定的地址开始的图像数据的无符号字节数。

data

指定指向内存中压缩图像数据的指针。

描述

纹理将指定纹理图像的一部分映射到纹理处于活动状态的每个图形基元上。当前片段着色器或顶点着色器使用内置纹理查找功能时,纹理处于活动状态。

glCompressedTexSubImage2D重新定义了现有二维纹理图像的连续子区域。数据引用的纹素将现有纹理数组的部分替换为x索引xoffset和xoffset + width - 1,以及y索引yoffset和yoffset + height - 1(包括0和yoffset)。该区域可能不包括纹理数组范围之外的任何纹素,如最初指定的那样。指定宽度为0的子纹理不是错误,但这样的规范没有效果。

format必须与glCompressedTexImage2D先前指定的扩展名指定的压缩纹理格式相同。

注意

glCompressedTexSubImage2D指定使用glActiveTexture指定的纹理单元的二维或立方体贴图纹理。

错误

GL_INVALID_ENUM:target不是GL_TEXTURE_2D,GL_TEXTURE_CUBE_MAP_POSITIVE_X,GL_TEXTURE_CUBE_MAP_NEGATIVE_X,GL_TEXTURE_CUBE_MAP_POSITIVE_Y,GL_TEXTURE_CUBE_MAP_NEGATIVE_Y,GL_TEXTURE_CUBE_MAP_POSITIVE_Z或GL_TEXTURE_CUBE_MAP_NEGATIVE_Z

GL_INVALID_ENUM:internalformat不是GL_COMPRESSED_TEXTURE_FORMATS中返回的受支持格式

GL_INVALID_VALUE:level小于0

GL_INVALID_VALUE:level大于log 2 max,其中max是当目标是GL_TEXTURE_2D时GL_MAX_TEXTURE_SIZE的返回值,或者当目标不是GL_TEXTURE_2D时GL_MAX_CUBE_MAP_TEXTURE_SIZE

GL_INVALID_VALUE:xoffset <0,xoffset + width> w,yoffset <0或yoffset + height> h,其中w是宽度,h是要修改的纹理图像的高度。

GL_INVALID_VALUE:宽度或高度小于0。

GL_INVALID_VALUE:imageSize与指定的压缩图像数据的格式,尺寸和内容不一致。

GL_INVALID_OPERATION:纹理数组尚未由之前的glCompressedTexImage2D操作定义,其内部格式与glCompressedTexSubImage2D的格式匹配。

GL_INVALID_OPERATION:特定纹理压缩扩展中指定的特定压缩内部格式不支持参数组合。

如果数据的编码方式与定义内部压缩格式的扩展规范不一致,则会生成未定义的结果,包括异常的程序终止。

相关Gets

glGet 参数GL_NUM_COMPRESSED_TEXTURE_FORMATS和GL_COMPRESSED_TEXTURE_FORMATS

glGet 参数GL_MAX_TEXTURE_SIZE或GL_MAX_CUBE_MAP_TEXTURE_SIZE

另见

glActiveTexture,glCompressedTexImage2D,glCopyTexImage2D,glCopyTexSubImage2D,glTexImage2D,glTexSubImage2D,glTexParameter

glCopyTexImage2D - 将像素复制到2D纹理图像中

C规范

void glCopyTexImage2D( GLenum target,
GLint level,
GLenum internalformat,
GLint x,
GLint y,
GLsizei width,
GLsizei height,
GLint border);

参数

target

指定活动纹理单元的目标纹理。必须是GL_TEXTURE_2D,GL_TEXTURE_CUBE_MAP_POSITIVE_X,GL_TEXTURE_CUBE_MAP_NEGATIVE_X,GL_TEXTURE_CUBE_MAP_POSITIVE_Y,GL_TEXTURE_CUBE_MAP_NEGATIVE_Y,GL_TEXTURE_CUBE_MAP_POSITIVE_Z或GL_TEXTURE_CUBE_MAP_NEGATIVE_Z。

level

指定详细级别。 0级是基本图像级别。级别n是第n个mipmap缩小图像。

internalformat

指定存储在地址数据中的压缩图像数据的格式。

x,y

指定要复制的像素矩形区域左下角的窗口坐标。

width

指定纹理图像的宽度。所有实现都支持至少64个纹素宽的2D纹理图像和至少16个纹素宽的立方体映射纹理图像。

height

指定纹理图像的高度。所有实现都支持至少64个纹素高的2D纹理图像和至少16个纹素高的立方体映射纹理图像。

border

指定边框的宽度。必须为0。

描述

纹理将指定纹理图像的一部分映射到纹理处于活动状态的每个图元上。当前片段着色器或顶点着色器使用内置纹理查找功能时,纹理处于活动状态。

glCopyTexImage2D定义了二维纹理图像或立方体贴图纹理图像,其中包含来自当前帧缓冲区的像素(而不是来自客户端内存,如glTexImage2D的情况)。

屏幕对齐的像素矩形,左下角为(x,y),宽度为width,高度为height,定义了由level指定的mipmap级别的纹理数组。 internalformat指定纹理数组的内部格式。

处理矩形中的像素就像调用format设置为GL_RGBA的glReadPixels一样,但是在转换RGBA值之后,该过程就会停止。后续处理与glTexImage2D描述的处理相同,首先将R,G,B和A值截断到0 1范围,然后转换为纹理的内部格式以存储在纹素阵列中。

internalformat所需的组件必须是framebuffer格式中存在的组件的子集。例如,GL_RGBA帧缓冲区可用于为任何内部格式提供组件。但是,GL_RGB帧缓冲区只能用于为GL_RGB或GL_LUMINANCE基本内部格式纹理提供组件,而不能用于GL_ALPHA,GL_LUMINANCE_ALPHA或GL_RGBA纹理。

像素排序使得较低的x和y屏幕坐标对应于较低的s和t纹理坐标。

如果指定矩形内的任何像素位于与当前渲染上下文关联的帧缓冲区之外,则为这些像素获取的值未定义。

注意

GL实现可以选择以其选择的任何内部分辨率存储纹理数组。

高度或宽度为0的图像表示NULL纹理。

glCopyTexImage2D为使用glActiveTexture指定的当前纹理单元指定二维或立方体贴图纹理。

错误

GL_INVALID_ENUM:target不是GL_TEXTURE_2D,GL_TEXTURE_CUBE_MAP_POSITIVE_X,GL_TEXTURE_CUBE_MAP_NEGATIVE_X,GL_TEXTURE_CUBE_MAP_POSITIVE_Y,GL_TEXTURE_CUBE_MAP_NEGATIVE_Y,GL_TEXTURE_CUBE_MAP_POSITIVE_Z或GL_TEXTURE_CUBE_MAP_NEGATIVE_Z。

GL_INVALID_ENUM:internalformat不是可接受的格式。

GL_INVALID_VALUE:target是六个立方体贴图2D图像目标之一并且width和height参数不相等。

GL_INVALID_VALUE:level小于0。

GL_INVALID_VALUE:level大于log 2 max,其中max是当目标是GL_TEXTURE_2D时GL_MAX_TEXTURE_SIZE的返回值,或者当目标不是GL_TEXTURE_2D时GL_MAX_CUBE_MAP_TEXTURE_SIZE。

GL_INVALID_VALUE:border不为0。

GL_INVALID_OPERATION:当前绑定的帧缓冲区格式不包含internalformat基本格式所需组件的超集。

GL_INVALID_FRAMEBUFFER_OPERATION:当前绑定的帧缓冲不是帧缓冲完成(即glCheckFramebufferStatus的返回值不是GL_FRAMEBUFFER_COMPLETE)

相关Gets

glGet 参数GL_MAX_TEXTURE_SIZE或GL_MAX_CUBE_MAP_TEXTURE_SIZE

另见

glActiveTexture,glCheckFramebufferStatus,glCompressedTexImage2D,glCompressedTexSubImage2D,

glCopyTexSubImage2D - 复制二维纹理子图像

C规范

void glCopyTexSubImage2D( GLenum target,
GLint level,
GLint xoffset,
GLint yoffset,
GLint x,
GLint y,
GLsizei width,
GLsizei height);

参数

target

指定活动纹理单元的目标纹理。必须是GL_TEXTURE_2D,GL_TEXTURE_CUBE_MAP_POSITIVE_X,GL_TEXTURE_CUBE_MAP_NEGATIVE_X,GL_TEXTURE_CUBE_MAP_POSITIVE_Y,GL_TEXTURE_CUBE_MAP_NEGATIVE_Y,GL_TEXTURE_CUBE_MAP_POSITIVE_Z或GL_TEXTURE_CUBE_MAP_NEGATIVE_Z。

level

指定详细级别。 0级是基本图像级别。级别n是第n个mipmap缩小图像。

x,y

指定要复制的像素矩形区域左下角的窗口坐标。

width

指定纹理图像的宽度。所有实现都支持至少64个纹素宽的2D纹理图像和至少16个纹素宽的立方体映射纹理图像。

height

指定纹理图像的高度。所有实现都支持至少64个纹素高的2D纹理图像和至少16个纹素高的立方体映射纹理图像。

xoffset

指定纹理数组中x方向的纹素偏移。

yoffset

指定纹理数组内y方向的纹素偏移量。

描述

纹理将指定纹理图像的一部分映射到纹理处于活动状态的每个图元上。当前片段着色器或顶点着色器使用内置纹理查找功能时,纹理处于活动状态。

glCopyTexSubImage2D用当前帧缓冲区中的像素(而不是客户端内存,如glTexSubImage2D的情况)替换二维纹理图像或立方体贴图纹理图像的矩形部分。

屏幕对齐的像素矩形,左下角为(x,y),宽度为width,高度为height,定义了由level指定的mipmap级别的纹理数组。

处理矩形中的像素就像调用format设置为GL_RGBA的glReadPixels一样,但是在转换RGBA值之后,该过程就会停止。后续处理与glTexSubImage2D描述的处理相同,首先将R,G,B和A值截断到0 1范围,然后转换为纹理的内部格式以存储在纹素阵列中。

纹理数组中的目标矩形可能不包括最初指定的纹理数组外的任何纹理像素。指定宽度或高度为零的子纹理不是错误,但这样的规范没有效果。

如果指定矩形内的任何像素位于与当前渲染上下文关联的帧缓冲区之外,则为这些像素获取的值为未定义的。

不会对指定纹理数组的internalformat,width或height参数或指定子区域外的纹素值进行更改。

注意

glCopyTexSubImage2D为使用glActiveTexture指定的当前纹理单元指定二维或立方体贴图纹理。

错误

GL_INVALID_ENUM:target不是GL_TEXTURE_2D,GL_TEXTURE_CUBE_MAP_POSITIVE_X,GL_TEXTURE_CUBE_MAP_NEGATIVE_X,GL_TEXTURE_CUBE_MAP_POSITIVE_Y,GL_TEXTURE_CUBE_MAP_NEGATIVE_Y,GL_TEXTURE_CUBE_MAP_POSITIVE_Z或GL_TEXTURE_CUBE_MAP_NEGATIVE_Z。

GL_INVALID_ENUM:internalformat不是可接受的格式。

GL_INVALID_VALUE:target是六个立方体贴图2D图像目标之一并且width和height参数不相等。

GL_INVALID_VALUE:level小于0。

GL_INVALID_OPERATION:纹理数组尚未由先前的glTexImage2D或glCopyTexImage2D操作定义。

GL_INVALID_OPERATION:当前绑定的帧缓冲区格式不包含internalformat基本格式所需组件的超集。

GL_INVALID_FRAMEBUFFER_OPERATION:当前绑定的帧缓冲不是帧缓冲完成(即glCheckFramebufferStatus的返回值不是GL_FRAMEBUFFER_COMPLETE)

相关Gets

glGet 参数GL_MAX_TEXTURE_SIZE或GL_MAX_CUBE_MAP_TEXTURE_SIZE

另见

glActiveTexture,glCheckFramebufferStatus,glCopyTexImage2D,glTexImage2D,glTexParameter,glTexSubImage2D

glCreateProgram- 创建一个program(建议不要翻译成“程序”,以免引起与APP的混淆)对象

C规范

GLuint glCreateProgram(void);

描述

glCreateProgram创建一个空program并返回一个可以被引用的非零值(program ID)。 program对象是可以附加着色器对象的对象。 这提供了一种机制来指定将链接以创建program的着色器对象。 它还提供了一种检查将用于创建program的着色器的兼容性的方法(例如,检查顶点着色器和片元着色器之间的兼容性)。 当不再需要作为program对象的一部分时,着色器对象就可以被分离了。

通过调用glCompileShader成功编译着色器对象,并且通过调用glAttachShader成功地将着色器对象附加到program 对象,并且通过调用glLinkProgram成功的链接program 对象之后,可以在program 对象中创建一个或多个可执行文件。

当调用glUseProgram时,这些可执行文件成为当前状态的一部分。 可以通过调用glDeleteProgram删除程序对象。 当program 对象不再是任何上下文的当前呈现状态的一部分时,将删除与program 对象关联的内存。

注意

与纹理对象一样,只要上下文的服务器端共享相同的地址空间,程序对象的名称空间就可以在一组上下文中共享。 如果名称空间跨上下文共享,则也会共享任何附加对象和与这些附加对象关联的数据。

当从不同的执行线程访问对象时,应用程序负责跨API调用提供同步。

错误

如果创建program 对象时发生错误,则此函数返回0。

相关Gets

glGet 参数GL_CURRENT_PROGRAM

glGetActiveAttrib 参数:有效的program对象和激活状态的属性变量的句柄。

glGetActiveUniform 参数:有效的program对象和激活状态的统一变量的句柄。

glGetAttachedShaders 参数:有效的program对象

glGetAttribLocation​​​​​​​ 参数:有效的program对象和属性变量的名称(在shader中的变量字符串)。

glGetProgramiv 参数:有效的program对象和要查询的参数符号

glGetProgramInfoLog 参数:有效的program对象

glGetUniform​​​​​​​ 参数:有效的program对象和一个统一变量地址

glGetUniformLocation​​​​​​​ 参数:有效的program对象和统一变量的名称(在shader中的变量字符串)。

glIsProgram​​​​​​​

另见

glAttachShader,glBindAttribLocation​​​​​​​,glCreateShader,glDeleteProgram,glDetachShader,glLinkProgram,glUniform​​​​​​​,glUseProgram,glValidateProgram

glCreateShader - 创建一个着色器对象

C规范

GLuint glCreateShader(GLenum shaderType);

参数

shaderType

指定要创建的着色器的类型。 只能是GL_VERTEX_SHADER或GL_FRAGMENT_SHADER。

描述

glCreateShader创建一个空的着色器对象,并返回一个可以引用的非零值(shader ID)。着色器对象用于维护定义着色器的源代码字符串。shaderType指示要创建的着色器的类型。 支持两种类型的着色器。 GL_VERTEX_SHADER类型的着色器是一个用于在可编程顶点处理器上运行的着色器。 GL_FRAGMENT_SHADER类型的着色器是一个着色器,旨在在可编程片段处理器上运行。

创建时,着色器对象的GL_SHADER_TYPE参数设置为GL_VERTEX_SHADER或GL_FRAGMENT_SHADER,具体取决于shaderType的值。

注意

与纹理对象一样,着色器对象的名称空间可以在一组上下文中共享,只要上下文的服务器端共享相同的地址空间即可。 如果名称空间跨上下文共享,则也会共享任何附加对象和与这些附加对象关联的数据。

当从不同的执行线程访问对象时,应用程序需要负责跨API调用提供同步。

错误

如果创建着色器对象时发生错误,则此函数返回0。

GL_INVALID_ENUM:shaderType不是一个可接受的值。

相关Gets

glGetShaderiv 使用有效的着色器对象和要查询的参数

glGetShaderInfoLog 使用有效的着色器对象

glGetShaderSource 使用有效的着色器对象

glIsShader

另见

glAttachShader,glCompileShader,glDeleteShader,glDetachShader,glShaderSource,glShaderBinary​​​​​​​

glCullFace - 指定是否可以剔除前面或后面的多边形

C规范

void glCullFace(GLenum mode);

参数

mode

指定前面或后面的多边形是否适合剔除。接受符号常量GL_FRONT,GL_BACK和GL_FRONT_AND_BACK。初始值为GL_BACK。

描述

glCullFace指定在启用多边形剔除时是否剔除前面或后面的多边形(由模式指定)。最初禁用多边形剔除。要启用和禁用多边形剔除,请使用参数GL_CULL_FACE调用glEnable和glDisable命令。

glFrontFace指定顺时针和逆时针多边形中的哪一个是正面和背面的。请参阅glFrontFace。

注意

如果mode为GL_FRONT_AND_BACK,则不绘制多边形,但绘制其他图元(如点和线)。

错误

GL_INVALID_ENUM :如果mode是一个不可接受的值。

相关Gets

glIsEnabled 参数GL_CULL_FACE
glGet 参数GL_CULL_FACE_MODE

另见

glEnable,glFrontFace

glDeleteBuffers - 删除命名缓冲区对象

C规范

void glDeleteBuffers(GLsizei n,const GLuint * buffers);

参数

n

指定要删除的缓冲区对象名称的数量。

buffers

指定要删除的缓冲区对象名称的数组。

描述

glDeleteBuffers删除由数组缓冲区的元素命名的n个缓冲区对象。 删除缓冲区对象后,它就没有内容了,其名称可以被重用(例如glGenBuffers调用生成该名称(ID))。如果删除当前绑定的缓冲区对象,则绑定将恢复为0(缺少任何缓冲区对象,这将恢复为客户机内存使用情况)。

glDeleteBuffers默认忽略0和与现有缓冲区对象不对应的名称。

错误

GL_INVALID_VALUE:n是负数

相关Gets

glIsBuffer

另见

glBindBuffer,glGenBuffers,glIsBuffer

glDeleteFramebuffers - 删除命名的framebuffer对象

C规范

void glDeleteFramebuffers(GLsizei n,

                                                 const GLuint * framebuffers);

参数

n

指定要删除的帧缓冲区对象的数量。

framebuffers

指定要删除的帧缓冲区对象数组。

描述

glDeleteFramebuffers删除由数组framebuffers的元素命名的n个framebuffer对象。 删除帧缓冲区对象后,它没有附件,其名称可以被复用(例如调用glGenFramebuffers生成)。 如果删除当前绑定的帧缓冲区对象,则绑定将恢复为0(窗口系统提供的帧缓冲区)。

glDeleteFramebuffers默认忽略0和与现有帧缓冲对象不对应的名称。

错误

GL_INVALID_VALUE :n是负数

相关Gets

glIsFramebuffer

另见

glBindFramebuffer,glGenFramebuffers,glIsFramebuffer

glDeleteProgram- 删除一个程序对象

C规范

void glDeleteProgram(GLuint program);

参数

program

指定要删除的程序对象。

描述

glDeleteProgram释放内存并使与着色器指定的着色器对象关联的ID无效。 这个命令有效地撤消了对glCreateProgram的调用的影响。

如果程序对象正在被用作当前渲染状态的一部分,则它将被标记为删除,但在它不再是任何渲染上下文的当前状态的一部分之前不会被删除。 如果要删除的程序对象附加了着色器对象,那么这些着色器对象将自动分离但不会被删除,除非它们已被标记为先前调用glDeleteShader而被删除。 程序的值0为0将被忽视。

要确定对象是否已标记为删除,请使用参数program和GL_DELETE_STATUS调用glGetProgramiv。

错误

GL_INVALID_VALUE:program不是OpenGL生成的值。

相关Gets

glGet 参数GL_CURRENT_PROGRAM

glGetProgramiv 参数program和GL_DELETE_STATUS

glIsProgram

另见

glCreateShader,glDetachShader,glIsProgram

glDeleteRenderbuffers - 删除命名的renderbuffer对象

C规范

void glDeleteRenderbuffers(GLsizei n,

                                                  const GLuint * renderbuffers);

参数

n

指定要删除的renderbuffer对象的数量。

renderbuffers

指定要删除的renderbuffer对象数组。

描述

glDeleteRenderbuffers删除由数组renderbuffers的元素命名的n个renderbuffer对象。 删除renderbuffer对象后,它没有内容,其名称可以被复用(例如glGenRenderbuffers)。

如果删除当前绑定的renderbuffer对象,则绑定将恢复为0(没有任何renderbuffer对象)。 此外,如果渲染缓冲区的图像附加到帧缓冲区对象,则在删除渲染缓冲区对象时必须特别小心。 在这种情况下,如果删除的renderbuffer对象附加到当前绑定的framebuffer对象,则会自动分离它。 但是,任何其他帧缓冲对象的附着都是应用程序的责任。

glDeleteRenderbuffers默认忽略0和与现有renderbuffer对象不对应的名称。

错误

GL_INVALID_VALUE : n是负数

相关Gets

glIsRenderbuffer

另见

glBindRenderbuffer,glGenRenderbuffers,glIsRenderbuffer

glDeleteShader - 删除一个着色器对象

C规范

void glDeleteShader(GLuint shader);

参数

shader

指定要删除的着色器对象。

描述

glDeleteShader释放内存并使与着色器指定的着色器对象关联的ID无效。 这个命令有效地撤消了对glCreateShader的调用的影响。

如果要删除的着色器对象附加到程序对象,它将被标记为删除,但它不会被删除,直到它不再附加到任何程序对象,对于任何渲染上下文(即,它必须与 它被附加之前的任何地方都将被删除)。shader为0将被忽视。

要确定对象是否已标记为删除,请使用参数shader和GL_DELETE_STATUS调用glGetShaderiv。

错误

GL_INVALID_VALUE:shader不是OpenGL生成的值。

相关Gets

glGetAttachedShaders 要查询的程序对象

glGetShaderiv 参数shader和GL_DELETE_STATUS

glIsShader

另见

glCreateProgram,glCreateShader,glDetachShader,glUseProgram

glDeleteTextures - 删除纹理

C规范

void glDeleteTextures(GLsizei n,

const GLuint *textures);

参数

n

指定要删除的纹理数量。

textures

指定要删除的纹理(ID)数组。

描述

glDeleteTextures删除由数组纹理元素命名的n个纹理。

纹理被删除后,它就没有内容也没有维度了,并且其名称(ID)可以重复使用(例如,通过glGenTextures)。

如果当前绑定的纹理被删除,绑定将恢复为0(默认纹理)。

错误

GL_INVALID_VALUE:如果参数n是负数。

相关Gets

glIsTexture

另见

glBindTexture glGenTextures glIsTexture

glDepthFunc - 指定用于深度缓冲区比较的值

C规范

void glDepthFunc( GLenum func);

参数

func

指定深度比较功能。接受符号常量GL_NEVER,GL_LESS,GL_EQUAL,GL_LEQUAL,GL_GREATER,GL_NOTEQUAL,GL_GEQUAL和GL_ALWAYS。初始值为GL_LESS。

描述

glDepthFunc指定用于将每个输入像素深度值与深度缓冲区中存在的深度值进行比较的函数。仅在启用深度测试时才执行比较。 (参见GL_DEPTH_TEST的glEnable和glDisable。)

func指定绘制像素的条件。比较功能如下:

GL_NEVER

永远不通过。

GL_LESS

如果传入深度值小于存储的深度值(离观看者更近),则通过。

GL_EQUAL

如果传入深度值等于存储的深度值,则通过。

GL_LEQUAL

如果传入深度值小于或等于存储的深度值,则通过。

GL_GREATER

如果传入深度值大于存储的深度值,则通过。

GL_NOTEQUAL

如果传入的深度值不等于存储的深度值,则通过。

GL_GEQUAL

如果传入的深度值大于或等于存储的深度值,则通过。

GL_ALWAYS

总是通过。

func的初始值是GL_LESS。最初,深度测试被禁用。如果禁用深度测试或不存在深度缓冲,则就好像深度测试总是通过一样。

注意

即使存在深度缓冲区且深度掩模不为零,如果禁用深度测试,也不会更新深度缓冲区。

错误

GL_INVALID_ENUM:func不是可接受的值

相关Gets

glGet 参数GL_DEPTH_FUNC

glIsEnabled 参数GL_DEPTH_TEST

另见

glDepthRangef,glEnable,glPolygonOffset

glDepthMask - 启用或禁用写入深度缓冲区

C规范

void glDepthMask( GLboolean flag);

参数

flag

指定是否可以写入启用深度缓冲区。 如果flag为GL_FALSE,则禁用深度缓冲区写入。 否则,它可以启用。 初始状态为启用深度缓冲区写入。

描述

glDepthMask指定是否可以写入启用深度缓冲区。 如果flag为GL_FALSE,则禁用深度缓冲区写入。 否则,它可以启用。 初始状态为启用深度缓冲区写入。

相关Gets

glGet 参数GL_DEPTH_WRITEMASK

另见

glColorMask,glDepthFunc,glDepthRangef,glStencilMask

glDepthRangef - 指定从标准化设备坐标到窗口坐标的深度值的映射

C规范

void glDepthRangef( GLclampf nearVal,
GLclampf farVal);

参数

nearVal

指定近剪裁平面到窗口坐标的映射。初始值为0。

farVal

指定远剪裁平面到窗口坐标的映射。初始值为1。

描述

在剪裁和除以w之后,深度坐标的范围从-1到1,对应于近剪裁平面和远剪裁平面。glDepthRangef指定此范围内的归一化深度坐标到窗口深度坐标的线性映射。无论实际的深度缓冲区实现如何,窗口坐标深度值都被视为从0到1(如颜色分量)。因此,glDepthRangef接受的值在被接受之前都被截断到该范围。

(0,1)的设置将近平面映射到0,将远平面映射到1.通过此映射,可以充分利用深度缓冲区范围。

注意

nearVal不必小于farVal。可以接受诸如nearVal = 1和farVal = 0的反向映射。

相关Gets

glGet 参数GL_DEPTH_RANGE

另见

glDepthFunc,glPolygonOffset,glViewport

glDetachShader- 从程序对象中分离着色器对象

C规范

void glDetachShader( GLuint program,
GLuint shader);

参数

program

指定从中分离着色器对象的程序对象。

shader

指定要分离的着色器对象。

描述

glDetachShader将shader指定的着色器对象与程序指定的程序对象分离。此命令可用于撤消命令glAttachShader的效果。

如果通过调用glDeleteShader已将标记器标记为删除,并且它未附加到任何其他程序对象,则在分离后它将被删除。

错误

GL_INVALID_VALUE:program或shader不是由OpenGL生成的值。

GL_INVALID_OPERATION:program不是程序对象。

GL_INVALID_OPERATION:shader不是着色器对象。

GL_INVALID_OPERATION:未将shader附加到程序。

相关Gets

glGetAttachedShaders 参数具有有效程序对象的句柄。

glGetShaderiv 参数shader和GL_DELETE_STATUS。

glIsProgram

glIsShader

另见

glAttachShader

glEnable- 启用或禁用服务器端GL功能

C规范

void glEnable(GLenum cap);

void glDisable(GLenum cap);

参数

cap

指定表示GL功能的符号常量。

描述

glEnable和glDisable启用和禁用各种功能。使用glIsEnabled或glGet确定任何功能的当前设置。除GL_DITHER(抖动)外,每个功能的初始值为GL_FALSE。GL_DITHER的初始值为GL_TRUE。

glEnable和glDisable都使用单个参数cap,它可以采用以下值之一:

GL_BLEND

    如果启用,则将计算的片段颜色值与颜色缓冲区中的值混合。 请参阅glBlendFunc。

GL_CULL_FACE

   如果启用,则根据窗口的坐标来剔除多边形。 请参阅glCullFace。

GL_DEPTH_TEST

   如果启用,进行深度比较并更新深度缓冲区。 注意,即使存在深度缓冲区且深度掩码不为零,如果禁用深度测试,也将不会更新深度缓冲区。 请参阅glDepthFunc和glDepthRangef。

GL_DITHER

   如果启用,则在将颜色组件或索引写入颜色缓冲区之前对其进行抖动。

GL_POLYGON_OFFSET_FILL

   如果启用,则会将偏移添加到由光栅化生成的多边形片段的深度值。 请参阅glPolygonOffset。(常用于处理Z-fighting)

GL_SAMPLE_ALPHA_TO_COVERAGE

   如果启用,则计算临时覆盖值,其中每个位由相应样本位置的alpha值确定。 然后,临时覆盖值与片段覆盖值进行AND运算。

GL_SAMPLE_COVERAGE

   如果启用,则片段的覆盖范围与临时覆盖值进行AND运算。 如果GL_SAMPLE_COVERAGE_INVERT设置为GL_TRUE,则反转coverage值。 请参阅glSampleCoverage。

GL_SCISSOR_TEST

   如果启用,则丢弃裁剪矩形之外的片段。 见glScissor。

GL_STENCIL_TEST

   如果启用,将进行模板测试并更新模板缓冲区。 请参阅glStencilFunc和glStencilOp。

错误

GL_INVALID_ENUM :如果cap不是之前列出的值之一。

相关Gets

glIsEnabled

glGet

另见

glActiveTexture,glBlendFunc,glCullFace,glDepthFunc,glDepthRangef,glGet,glIsEnabled,glLineWidth,glPolygonOffset,glScissor,glStencilFunc,glStencilOp,glTexImage2D

glEnableVertexAttribArray - 启用或禁用通用顶点属性数组

C规范

void glEnableVertexAttribArray(GLuint index);

void glDisableVertexAttribArray(GLuint index);

参数

index

指定要启用或禁用的通用顶点属性的索引。

描述

glEnableVertexAttribArray启用index指定的通用顶点属性数组。 glDisableVertexAttribArray禁用index指定的通用顶点属性数组。 默认情况下,禁用所有客户端功能,包括所有通用顶点属性数组。 如果启用,将访问通用顶点属性数组中的值,并在调用顶点数组命令(如glDrawArrays或glDrawElements)时用于呈现。

错误

GL_INVALID_VALUE:如果index大于或等于GL_MAX_VERTEX_ATTRIBS。

相关Gets

glGet 参数GL_MAX_VERTEX_ATTRIBS

glGetVertexAttrib 参数index和GL_VERTEX_ATTRIB_ARRAY_ENABLED

glGetVertexAttribPointerv 参数index和GL_VERTEX_ATTRIB_ARRAY_POINTER

另见

glBindAttribLocation,glDrawArrays,glDrawElements,glGetVertexAttrib,glGetVertexAttribPointerv

版权

glDrawArrays - 从数组数据中渲染图元

C规范

void glDrawArrays(GLenum mode,

                           GLint first,

                           GLsizei count);

参数

mode

指定要渲染的图元类型。 接受符号常量GL_POINTS,GL_LINE_STRIP,GL_LINE_LOOP,GL_LINES,GL_TRIANGLE_STRIP,GL_TRIANGLE_FAN和GL_TRIANGLES。

first

指定已启用阵列中的起始索引。

count

指定要渲染的索引数。

描述

glDrawArrays指定了几个子例程调用的几何图元。你可以使用glVertexAttribPointer预先指定单独的顶点,法线和颜色数组,而不是调用GL过程来传递每个单独的顶点属性并使用它们通过单次调用glDrawArrays来构造图元序列。

当调用glDrawArrays时,它使用每个启用数组中的计数顺序元素来构造几何图元序列,从元素first开始。mode指定构造什么类型的图元以及数组元素如何构造这些图元。

要启用和禁用通用顶点属性数组,请调用glEnableVertexAttribArray和glDisableVertexAttribArray。

注意

如果glUseProgram设置的当前程序对象无效,则渲染结果未定义。 但是,这种情况不会产生错误。

错误

GL_INVALID_ENUM:mode不是一个可接收的值

GL_INVALID_VALUE:count是负数

GL_INVALID_FRAMEBUFFER_OPERATION:如果当前绑定的帧缓冲区不是帧缓冲区完成状态(即glCheckFramebufferStatus的返回值不是GL_FRAMEBUFFER_COMPLETE)。

另见

glCheckFramebufferStatus,glEnableVertexAttribArray,glDisableVertexAttribArray,glDrawElements,glUseProgram,glVertexAttribPointer

glDrawElements - 从数组数据中渲染图元

C规范

void glDrawElements(GLenum mode,

                           GLsizei count,

                           GLenum type,

                           const GLvoid * indices);

参数

mode

指定要渲染的图元类型。 接受符号常量GL_POINTS,GL_LINE_STRIP,GL_LINE_LOOP,GL_LINES,GL_TRIANGLE_STRIP,GL_TRIANGLE_FAN和GL_TRIANGLES。

count

指定要渲染的元素数。

type

指定indices中值的类型。 必须是GL_UNSIGNED_BYTE或GL_UNSIGNED_SHORT。

indices

指定指向存储索引的位置的指针。

描述

glDrawElements指定了几个子例程调用的几何图元。你可以使用glVertexAttribPointer预先指定单独的顶点,法线和颜色数组,而不是调用GL过程来传递每个单独的顶点属性并使用它们通过单次调用glDrawElements来构造图元序列。

当调用glDrawElements时,它使用来自启用数组的计数顺序元素,从索引开始构造几何图元序列。mode指定构造什么类型的图元以及数组元素如何构造这些图元。 如果启用了多个数组,则使用每个数组。

要启用和禁用通用顶点属性数组,请调用glEnableVertexAttribArray和glDisableVertexAttribArray。

注意

如果glUseProgram设置的当前程序对象无效,则渲染结果未定义。 但是,这种情况不会产生错误。

错误

GL_INVALID_ENUM:mode不是一个可接收的值

GL_INVALID_ENUM:type不是GL_UNSIGNED_BYTE或GL_UNSIGNED_SHORT

GL_INVALID_VALUE:count是负数

GL_INVALID_FRAMEBUFFER_OPERATION:如果当前绑定的帧缓冲区不是帧缓冲区完成状态(即glCheckFramebufferStatus的返回值不是GL_FRAMEBUFFER_COMPLETE)。

另见

glCheckFramebufferStatus,glEnableVertexAttribArray,glDisableVertexAttribArray,glDrawArrays,glUseProgram,glVertexAttribPointer

glEnable- 启用或禁用服务器端GL功能

C规范

void glEnable(GLenum cap);

void glDisable(GLenum cap);

参数

cap

指定表示GL功能的符号常量。

描述

glEnable和glDisable启用和禁用各种功能。使用glIsEnabled或glGet确定任何功能的当前设置。除GL_DITHER(抖动)外,每个功能的初始值为GL_FALSE。GL_DITHER的初始值为GL_TRUE。

glEnable和glDisable都使用单个参数cap,它可以采用以下值之一:

GL_BLEND

    如果启用,则将计算的片段颜色值与颜色缓冲区中的值混合。 请参阅glBlendFunc。

GL_CULL_FACE

   如果启用,则根据窗口的坐标来剔除多边形。 请参阅glCullFace。

GL_DEPTH_TEST

   如果启用,进行深度比较并更新深度缓冲区。 注意,即使存在深度缓冲区且深度掩码不为零,如果禁用深度测试,也将不会更新深度缓冲区。 请参阅glDepthFunc和glDepthRangef。

GL_DITHER

   如果启用,则在将颜色组件或索引写入颜色缓冲区之前对其进行抖动。

GL_POLYGON_OFFSET_FILL

   如果启用,则会将偏移添加到由光栅化生成的多边形片段的深度值。 请参阅glPolygonOffset。(常用于处理Z-fighting)

GL_SAMPLE_ALPHA_TO_COVERAGE

   如果启用,则计算临时覆盖值,其中每个位由相应样本位置的alpha值确定。 然后,临时覆盖值与片段覆盖值进行AND运算。

GL_SAMPLE_COVERAGE

   如果启用,则片段的覆盖范围与临时覆盖值进行AND运算。 如果GL_SAMPLE_COVERAGE_INVERT设置为GL_TRUE,则反转coverage值。 请参阅glSampleCoverage。

GL_SCISSOR_TEST

   如果启用,则丢弃裁剪矩形之外的片段。 见glScissor。

GL_STENCIL_TEST

   如果启用,将进行模板测试并更新模板缓冲区。 请参阅glStencilFunc和glStencilOp。

错误

GL_INVALID_ENUM :如果cap不是之前列出的值之一。

相关Gets

glIsEnabled

glGet

另见

glActiveTexture,glBlendFunc,glCullFace,glDepthFunc,glDepthRangef,glGet,glIsEnabled,glLineWidth,glPolygonOffset,glScissor,glStencilFunc,glStencilOp,glTexImage2D

glEnableVertexAttribArray - 启用或禁用通用顶点属性数组

C规范

void glEnableVertexAttribArray(GLuint index);

void glDisableVertexAttribArray(GLuint index);

参数

index

指定要启用或禁用的通用顶点属性的索引。

描述

glEnableVertexAttribArray启用index指定的通用顶点属性数组。 glDisableVertexAttribArray禁用index指定的通用顶点属性数组。 默认情况下,禁用所有客户端功能,包括所有通用顶点属性数组。 如果启用,将访问通用顶点属性数组中的值,并在调用顶点数组命令(如glDrawArrays或glDrawElements)时用于呈现。

错误

GL_INVALID_VALUE:如果index大于或等于GL_MAX_VERTEX_ATTRIBS。

相关Gets

glGet 参数GL_MAX_VERTEX_ATTRIBS

glGetVertexAttrib 参数index和GL_VERTEX_ATTRIB_ARRAY_ENABLED

glGetVertexAttribPointerv 参数index和GL_VERTEX_ATTRIB_ARRAY_POINTER

另见

glBindAttribLocation,glDrawArrays,glDrawElements,glGetVertexAttrib,glGetVertexAttribPointerv

版权

glFinish- 阻止直到所有GL命令执行完成

C规范

void glFinish(void);

描述

在完成所有先前调用的GL命令的效果之前,glFinish不会返回。这些效果包括GL状态的所有更改,连接状态的所有更改以及帧缓冲区内容的所有更改。

注意

glFinish需要往返服务器。

另见

glFlush

glFlush - 在有限时间内强制执行GL命令

C规范

void glFlush(void);

描述

不同的GL实现在几个不同的位置缓冲命令,包括网络缓冲区和图形加速器本身。glFlush会清空所有这些缓冲区,促使所有已发出的命令在实际渲染引擎接受时尽快执行。尽管此执行可能无法在任何特定时间段内完成,但它确实在有限时间内完成。

因为任何GL程序可能通过网络或缓冲命令的加速器执行,所以每当程序依赖于完成所有先前发出的命令时,所有程序都应该调用glFlush。例如,在等待依赖于生成的图像的用户输入之前调用glFlush。

注意

glFlush可以随时返回。 它不会等到所有先前发出的GL命令的执行完成。

另见

glFinish

glFramebufferRenderbuffer- 将renderbuffer对象附加到framebuffer对象

C规范

void glFramebufferRenderbuffer(GLenum target,

                                                            GLenum attachment,

                                                            GLenum renderbuffertarget,

                                                            GLuint renderbuffer);

参数

target

指定帧缓冲目标。 符号常量必须是GL_FRAMEBUFFER。

attachment

指定renderbuffer应附加到的附着点。 必须是以下符号常量之一:GL_COLOR_ATTACHMENT0,GL_DEPTH_ATTACHMENT或GL_STENCIL_ATTACHMENT。

renderbuffertarget

指定renderbuffer目标。 符号常量必须为GL_RENDERBUFFER。

renderbuffer

指定要附加的renderbuffer对象。

描述

glFramebufferRenderbuffer将renderbuffer指定的renderbuffer附加为当前绑定的framebuffer对象的逻辑缓冲区之一。 attachment指定是否应将renderbuffer附加到framebuffer对象的颜色,深度或模板缓冲区。 渲染缓冲区不可以附加到默认(名称为0)的帧缓冲对象。

如果renderbuffer不为0,则指定附加点的GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE值设置为GL_RENDERBUFFER,GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME的值设置为renderbuffer。 GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL和GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE分别设置为默认值0和GL_TEXTURE_CUBE_MAP_POSITIVE_X。 先前绑定的帧缓冲区对象的附件逻辑缓冲区都将被破坏。

如果renderbuffer为0,则分离附加到当前绑定的framebuffer对象的附件逻辑缓冲区的当前图像(如果有的话)。 GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE的值设置为GL_NONE。 GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME的值设置为0. GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL和GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE分别设置为默认值0和GL_TEXTURE_CUBE_MAP_POSITIVE_X。

注意

如果在将图像附加到当前绑定的帧缓冲区时删除了渲染缓冲区对象,则就好像glFramebufferRenderbuffer已使用渲染缓冲区为0调用此图像附加到当前绑定的帧缓冲区对象中的附着点。 换句话说,渲染缓冲区图像与当前绑定的帧缓冲区分离。 请注意,渲染缓冲区图像不会与任何未绑定的帧缓冲区分离。从任何非绑定帧缓冲区中分离映像是应用程序的责任。

错误

GL_INVALID_ENUM :如果target不是GL_FRAMEBUFFER。

GL_INVALID_ENUM :如果renderbuffertarget不是GL_RENDERBUFFER且renderbuffer不是0。

GL_INVALID_ENUM :attachment是不可接收的附着点。

GL_INVALID_OPERATION :如果绑定了默认的帧缓冲对象名称0。

GL_INVALID_OPERATION :如果renderbuffer既不是0也不是现有渲染缓冲区对象的名称。

相关Gets

glGetFramebufferAttachmentParameteriv

另见

glBindFramebuffer,glBindRenderbuffer,glCheckFramebufferStatus,glDeleteFramebuffers,glDeleteRenderbuffers,glFramebufferTexture2D,glGetFramebufferAttachmentParameteriv,glRenderbufferStorage

版权

glFramebufferTexture2D - 将纹理图像附加到帧缓冲对象

C规范

void glFramebufferTexture2D(GLenum target,

                                                      GLenum attachment,

                                                      GLenum textarget,

                                                      GLuint texture,

                                                      GLint level);

参数

target

指定帧缓冲目标。 符号常量必须是GL_FRAMEBUFFER。

attachment

指定应附加纹理图像的附着点。 必须是以下符号常量之一:GL_COLOR_ATTACHMENT0,GL_DEPTH_ATTACHMENT或GL_STENCIL_ATTACHMENT。

textarget

指定纹理目标。 必须是以下符号常量之一:GL_TEXTURE_2D,GL_TEXTURE_CUBE_MAP_POSITIVE_X,GL_TEXTURE_CUBE_MAP_NEGATIVE_X,GL_TEXTURE_CUBE_MAP_POSITIVE_Y,GL_TEXTURE_CUBE_MAP_NEGATIVE_Y,GL_TEXTURE_CUBE_MAP_POSITIVE_Z或GL_TEXTURE_CUBE_MAP_NEGATIVE_Z。

texture

指定要附加图像的纹理对象。

level

指定要附加的纹理图像的mipmap级别,该级别必须为0。

描述

glFramebufferTexture2D将texture和level指定的纹理图像附加为当前绑定的帧缓冲区对象的逻辑缓冲区之一。 attachment指定是否应将纹理图像附加到帧缓冲对象的颜色,深度或模板缓冲区。 纹理图像不可以附加到默认(名称为0)的帧缓冲对象。

如果texture不为0,则指定附加点的GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE的值设置为GL_TEXTURE,GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME的值设置为texture,GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL的值设置为level。 如果纹理是立方体贴图纹理,则GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE的值设置为textarget; 否则将其设置为默认值GL_TEXTURE_CUBE_MAP_POSITIVE_X。 先前绑定的帧缓冲区对象的附件逻辑缓冲区都将被破坏。

如果texture为0,则分离附加到当前绑定的帧缓冲区对象的附件逻辑缓冲区的当前图像(如果有的话)。 GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE的值设置为GL_NONE。 GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME的值设置为0. GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL和GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE分别设置为默认值0和GL_TEXTURE_CUBE_MAP_POSITIVE_X。

注意

当纹理对象当前被绑定并可能被当前顶点或片段着色器采样时,需要采取特殊预防措施以避免将纹理图像附加到当前绑定的帧缓冲区。这样做可能导致在通过渲染操作写入像素和在当前绑定纹理中用作纹素时同时读取那些相同像素之间创建“反馈循环”。在这种情况下,帧缓冲区将被视为帧缓冲区完成,但在此状态下渲染的片段的值将是未定义的。纹理样本的值也可能是未定义的。

如果在将图像附加到当前绑定的帧缓冲区时删除纹理对象,这就好比使用纹理0调用glFramebufferTexture2D作为此图像附加到当前绑定的帧缓冲区对象中的附着点。换句话说,纹理图像与当前绑定的帧缓冲区分离了。请注意,纹理图像不会与任何未绑定的帧缓冲区分离。从任何非绑定帧缓冲区中分离映像是应用程序的责任。

错误

GL_INVALID_ENUM :target不是GL_FRAMEBUFFER。

GL_INVALID_ENUM :texture不为0时textarget不是可接收的纹理target。

GL_INVALID_ENUM :attachment是不可接收的附着点。

GL_INVALID_VALUE :level不是0时,texture不是0。

GL_INVALID_OPERATION :如果绑定了默认的帧缓冲对象名称0。

GL_INVALID_OPERATION :如果texture既不是0也不是现有纹理对象的名称。

GL_INVALID_OPERATION :如果texture是现有二维纹理对象的名称,但textarget不是GL_TEXTURE_2D,或者texture是现有立方体贴图纹理对象的名称,但textarget是GL_TEXTURE_2D。

相关Gets

glGetFramebufferAttachmentParameteriv

另见

glBindFramebuffer,glBindTexture,glCheckFramebufferStatus,glDeleteFramebuffers,glDeleteTextures,glFramebufferRenderbuffer,glGenerateMipmap,glGetFramebufferAttachmentParameteriv,glTexImage2D

版权

glFrontFace - 定义多边形的正面和背面

C规范

void glFrontFace(GLenum mode);

参数

mode

指定多边形的正面方向(顶点序列是按顺时针还是逆时针)。 GL_CW和GL_CCW被接受。初始值为GL_CCW(逆时针)。

描述

在完全由不透明闭合曲面组成的场景中,背面多边形永远不可见。消除这些不可见的多边形具有加速图像渲染的明显好处。要启用和禁用背面多边形的消除,请使用参数GL_CULL_FACE调用glEnable和glDisable。

多边形到窗口坐标的投影被称为顺时针缠绕,如果一个假想的对象跟随从其第一个顶点,第二个顶点等到其最后一个顶点的路径,最后返回到它的第一个顶点,则移动到顺时针方向绕多边形内部。如果跟随相同路径的假想物体围绕多边形内部沿逆时针方向移动,则称多边形的绕组是逆时针方向。 glFrontFace指定窗口坐标中顺时针缠绕的多边形或窗口坐标中的逆时针缠绕是否面向前方。将GL_CCW传递给模式选择逆时针多边形作为正面; GL_CW选择顺时针多边形作为正面。默认情况下,逆时针多边形被视为面向前方。

错误

GL_INVALID_ENUM :mode是不可接受的值

相关Gets

glGet 参数GL_FRONT_FACE

另见

glCullFace

glGenBuffers- 生成缓冲区对象名称

C规范

void glGenBuffers(GLsizei n,GLuint * buffers);

参数

n

指定要生成的缓冲区对象名称的数量。

buffers

指定存储生成的缓冲区对象名称的数组。

描述

glGenBuffers在buffers中返回n个缓冲区对象名称。我们无法保证这些名称形成一组连续的整数; 但是能够保证的是在调用glGenBuffers之前不会立即使用这些返回的名称。

调用glGenBuffers返回的缓冲区对象名称不会被后续调用返回,除非它们首先使用glDeleteBuffers删除。

在通过调用glBindBuffer进行绑定之前,没有缓冲区对象与返回的缓冲区对象名称关联。

错误

GL_INVALID_VALUE :n是个负数

相关Gets

glIsBuffer​​​​​​​

另见

glBindBuffer,glDeleteBuffers,glGet

glGenFramebuffers- 生成framebuffer对象名称

C规范

void glGenFramebuffers(GLsizei n,

                                             GLuint * framebuffers);

参数

n

指定要生成的帧缓冲区对象名称的数量。

framebuffers

指定存储生成的帧缓冲区对象名称的数组。

描述

glGenFramebuffers在framebuffers中返回n个帧缓冲区对象名。无法保证连续整数的名称; 但是,保证在调用glGenFramebuffers之前没有任何返回的名称被使用。

调用glGenFramebuffers返回的帧缓冲对象名称不会被后续调用返回,除非它们首先使用glDeleteFramebuffers删除。

没有帧缓冲对象与返回的帧缓冲区对象名称关联,直到它们首先通过调用glBindFramebuffer进行绑定。

错误

GL_INVALID_VALUE :n是负数

相关Gets

glIsFramebuffer

另见

glBindFramebuffer,glDeleteFramebuffers,glIsFramebuffer

glGenRenderbuffers- 生成渲染缓冲区对象名称

C规范

void glGenRenderbuffers(GLsizei n,

                                               GLuint * renderbuffers);

参数

n

指定要生成的渲染缓冲区对象名称的数量。

renderbuffers

指定存储生成的渲染缓冲区对象名称的数组。

描述

glGenRenderbuffers在renderbuffers中返回n个渲染缓冲区对象名。 无法保证这些名称形成一组连续的整数; 但是,保证在调用glGenRenderbuffers之前没有任何返回的名称被使用。

调用glGenRenderbuffers返回的渲染缓冲区对象名称不会被后续调用返回,除非首先使用glDeleteRenderbuffers删除它们。

在通过调用glBindRenderbuffer进行绑定之前,渲染缓冲区对象不会被关联渲染缓冲区对象名称。

错误

GL_INVALID_VALUE :n是负数。

相关Gets

glIsRenderbuffer

另见

glBindRenderbuffer,glDeleteRenderbuffers,glIsRenderbuffer

glGenTextures- 生成纹理名称(ID)

C规范

void glGenTextures( GLsizei n,GLuint * textures);

参数

n

指定要生成的纹理ID的数量。

textures

指定存储生成的纹理ID的数组。

描述

glGenTextures产生n个纹理ID存储在textures数组中,这个方法并不保存返回的是一串连续的整数数组,但是能保证的是:这些ID在调用glGenTextures之前都没有正在被使用。

生成的textures此时还是没有维度的,当他们第一次绑定纹理目标时才被指定维度(见glBindTexture)。

通过调用glGenTextures返回的纹理ID不会被后续调用返回,除非首先使用glDeleteTextures删除它们。

错误

GL_INVALID_VALUE:如果参数n是负数。

相关Gets

glIsTexture​​​​​​​

另见

glBindTexture​​​​​​​ glCopyTexImage2D glDeleteTextures​​​​​​​ glGet glGetTexParameter​​​​​​​ glTexImage2D​​​​​​​ glTexParameter

版权

glGenerateMipmap- 为纹理对象生成一组完整的mipmap

C规范

void glGenerateMipmap(GLenum target);

参数

target

指定将生成mipmap的纹理对象绑定到的活动纹理单元的纹理目标。 必须是以下符号常量之一:GL_TEXTURE_2D或GL_TEXTURE_CUBE_MAP。

描述

glGenerateMipmap计算从零级数组派生的一组完整的mipmap数组。 无论先前的内容如何,最多包括1x1维度纹理图像的数组级别都将替换为派生数组。 零级纹理图像保持不变(原图)。

派生的mipmap数组的内部格式都与零级纹理图像的内部格式相匹配。 通过将零级纹理图像的宽度和高度减半来计算派生数组的尺寸,然后将每个阵列级别的尺寸减半,直到达到1x1尺寸纹理图像。

通过重复滤波减少零电平阵列来计算导出阵列的内容。 虽然建议使用盒式过滤器,但不需要特殊的过滤算法。 可以调用glHint来表示对过滤速度或质量的偏好。

错误

GL_INVALID_ENUM :如果target不是GL_TEXTURE_2D或GL_TEXTURE_CUBE_MAP;

GL_INVALID_OPERATION:如果纹理绑定的是立方体贴图,但是6个面却不共用统一的宽高格式和类型;

GL_INVALID_OPERATION :如果原图的宽高不是2^N。(纹理贴图没这个要求,但是如要生成mipmap组则要注意这个要求)

GL_INVALID_OPERATION :如果零级数组以压缩内部格式存储。

另见

glBindTexture,glFramebufferTexture2D,glHint​​​​​​​,glTexImage2D,glTexParameter

版权

glGet - 返回所选参数的值

C规范

void glGetBooleanv( GLenum pname,
GLboolean * params);

void glGetFloatv( GLenum pname,
GLfloat * params);

void glGetIntegerv( GLenum pname,
GLint * params);

参数

pname

指定要返回的参数值。接受下面列表中的符号常量。

params

返回指定参数的值。

描述

这些命令返回GL中简单状态变量的值。 pname是一个符号常量,表示要返回的状态变量,params是一个指向指定类型数组的指针,用于放置返回的数据。

如果params的类型与请求的状态变量值不同,则执行类型转换。如果调用glGetBooleanv,当且仅当它是0.0(或0)时,浮点(或整数)值才会转换为GL_FALSE。否则,它将转换为GL_TRUE。如果调用glGetIntegerv,则布尔值将返回GL_TRUE或GL_FALSE,并且大多数浮点值将四舍五入为最接近的整数值。但是,浮点颜色和法线将返回一个线性映射,该映射将1.0映射到最正可表示的整数值,将-1.0映射到最负可表示的整数值。如果调用glGetFloatv,则布尔值将作为GL_TRUE或GL_FALSE返回,并且整数值将转换为浮点值。pname接受以下符号常量:

GL_ACTIVE_TEXTURE

params返回一个表示活动多重纹理单元的值。初始值为GL_TEXTURE0。请参阅glActiveTexture。

GL_ALIASED_LINE_WIDTH_RANGE

params返回两个值,即别名行的最小和最大支持宽度。范围必须包括宽度1。

GL_ALIASED_POINT_SIZE_RANGE

params返回两个值,即别名点支持的最小和最大尺寸。范围必须包括1号。

GL_ALPHA_BITS

params返回一个值,即当前绑定的帧缓冲区的颜色缓冲区中的alpha位平面的数量。

GL_ARRAY_BUFFER_BINDING

params返回单个值,即当前绑定到目标GL_ARRAY_BUFFER的缓冲区对象的名称。如果没有缓冲区对象绑定到此目标,则返回0。初始值为0.请参阅glBindBuffer。

GL_BLEND

params返回一个布尔值,指示是否启用了混合。初始值为GL_FALSE。请参阅glBlendFunc。

GL_BLEND_COLOR

params返回四个值,红色,绿色,蓝色和alpha值,它们是混合颜色的组成部分。请参阅glBlendColor。

GL_BLEND_DST_ALPHA

params返回一个值,该符号常量标识alpha目标混合函数。初始值为GL_ZERO。请参阅glBlendFunc和glBlendFuncSeparate。

GL_BLEND_DST_RGB

params返回一个值,该符号常量标识RGB目标混合函数。初始值为GL_ZERO。请参阅glBlendFunc和glBlendFuncSeparate。

GL_BLEND_EQUATION_ALPHA

params返回一个值,一个符号常量,指示Alpha混合方程是GL_FUNC_ADD,GL_FUNC_SUBTRACT还是GL_FUNC_REVERSE_SUBTRACT。请参阅glBlendEquationSeparate。

GL_BLEND_EQUATION_RGB

params返回一个值,一个符号常量,指示RGB混合方程是GL_FUNC_ADD,GL_FUNC_SUBTRACT还是GL_FUNC_REVERSE_SUBTRACT。请参阅glBlendEquationSeparate。

GL_BLEND_SRC_ALPHA

params返回一个值,这是一个标识alpha源混合函数的符号常量。初始值为GL_ONE。请参阅glBlendFunc和glBlendFuncSeparate。

GL_BLEND_SRC_RGB

params返回一个值,这个符号常量标识RGB源混合函数。初始值为GL_ONE。请参阅glBlendFunc和glBlendFuncSeparate。

GL_BLUE_BITS

params返回一个值,即当前绑定的帧缓冲区的颜色缓冲区中的蓝色位平面的数量。

GL_COLOR_CLEAR_VALUE

params返回四个值:用于清除颜色缓冲区的红色,绿色,蓝色和alpha值。如果请求,整数值从内部浮点表示线性映射,使得1.0返回最正可表示的整数值,-1.0返回最负可表示的整数值。初始值为(0,0,0,0)。请参阅glClearColor。

GL_COLOR_WRITEMASK

params返回四个布尔值:红色,绿色,蓝色和alpha写入启用颜色缓冲区。初始值为(GL_TRUE,GL_TRUE,GL_TRUE,GL_TRUE)。请参阅glColorMask。

GL_COMPRESSED_TEXTURE_FORMATS

params返回长度为GL_NUM_COMPRESSED_TEXTURE_FORMATS的符号常量列表,指示哪些压缩纹理格式可用。请参阅glCompressedTexImage2D。

GL_CULL_FACE

params返回一个布尔值,指示是否启用了多边形剔除。初始值为GL_FALSE。请参阅glCullFace。

GL_CULL_FACE_MODE

params返回一个值,一个符号常量,指示要剔除哪些多边形面。初始值为GL_BACK。请参阅glCullFace。

GL_CURRENT_PROGRAM

params返回一个值,即当前活动的程序对象的名称,如果没有程序对象处于活动状态,则返回0。请参阅glUseProgram。

GL_DEPTH_BITS

params返回一个值,即当前绑定的帧缓冲区的深度缓冲区中的位平面数。

GL_DEPTH_CLEAR_VALUE

params返回一个值,该值用于清除深度缓冲区。如果请求,整数值从内部浮点表示线性映射,使得1.0返回最正可表示的整数值,-1.0返回最负可表示的整数值。初始值为1.请参阅glDepthRangef。

GL_DEPTH_FUNC

params返回一个值,表示深度比较函数的符号常量。初始值为GL_LESS。请参阅glDepthFunc。

GL_DEPTH_RANGE

params返回两个值:深度缓冲区的近和远映射限制。如果请求,整数值从内部浮点表示线性映射,使得1.0返回最正可表示的整数值,-1.0返回最负可表示的整数值。初始值为(0,1)。请参阅glDepthRangef。

GL_DEPTH_TEST

params返回一个布尔值,指示是否启用了片段的深度测试。初始值为GL_FALSE。请参阅glDepthFunc和glDepthRangef。

GL_DEPTH_WRITEMASK

params返回一个布尔值,指示深度缓冲区是否已启用写入。初始值为GL_TRUE。请参阅glDepthMask。

GL_DITHER

params返回一个布尔值,指示是否启用了片段颜色和索引的抖动。初始值为GL_TRUE。

GL_ELEMENT_ARRAY_BUFFER_BINDING

params返回单个值,即当前绑定到目标GL_ELEMENT_ARRAY_BUFFER的缓冲区对象的名称。如果没有缓冲区对象绑定到此目标,则返回0。初始值为0.请参阅glBindBuffer。

GL_FRAMEBUFFER_BINDING

params返回单个值,即当前绑定的帧缓冲区的名称。初始值为0,表示默认的帧缓冲区。请参阅glBindFramebuffer。

GL_FRONT_FACE

params返回一个值,一个符号常数,表示顺时针或逆时针多边形绕组是否被视为正面。初始值为GL_CCW。请参阅glFrontFace。

GL_GENERATE_MIPMAP_HINT

params返回一个值,一个符号常量,指示mipmap生成过滤提示的模式。初始值为GL_DONT_CARE。见glHint。

GL_GREEN_BITS

params返回一个值,即当前绑定的帧缓冲区的颜色缓冲区中的绿色位平面的数量。

GL_IMPLEMENTATION_COLOR_READ_FORMAT

params返回一个值,即实现选择的格式,其中可以从当前绑定的帧缓冲区的颜色缓冲区中读取像素,并结合GL_IMPLEMENTATION_COLOR_READ_TYPE。除了这种依赖于实现的格式/类型对之外,每个实现始终允许格式GL_RGBA和类型GL_UNSIGNED_BYTE,而不管当前绑定的渲染表面如何。请参阅glReadPixels。

GL_IMPLEMENTATION_COLOR_READ_TYPE

params返回一个值,该实现选择的类型可以从当前绑定的帧缓冲区的颜色缓冲区中读取像素,并结合GL_IMPLEMENTATION_COLOR_READ_FORMAT。除了这种依赖于实现的格式/类型对之外,每个实现始终允许格式GL_RGBA和类型GL_UNSIGNED_BYTE,而不管当前绑定的渲染表面如何。请参阅glReadPixels。

GL_LINE_WIDTH

params返回一个值,即glLineWidth指定的行宽。初始值为1。

GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS

params返回一个值,最大支持的纹理图像单元数,可用于从顶点着色器和片段处理器组合访问纹理贴图。如果顶点着色器和片段处理阶段都访问相同的纹理图像单元,则计数为使用两个纹理图像单元来抵抗此限制。该值必须至少为8.请参阅glActiveTexture。

GL_MAX_CUBE_MAP_TEXTURE_SIZE

params返回一个值。该值粗略估计了GL可以处理的最大立方体贴图纹理。该值必须至少为16.请参阅glTexImage2D。

GL_MAX_FRAGMENT_UNIFORM_VECTORS

params返回一个值,可以保存在片段着色器的统一变量存储中的四元素浮点数,整数或布尔矢量的最大数量。该值必须至少为16.请参阅glUniform。

GL_MAX_RENDERBUFFER_SIZE

params返回一个值。该值表示GL可以处理的最大渲染缓冲区宽度和高度。该值必须至少为1.请参阅glRenderbufferStorage。

GL_MAX_TEXTURE_IMAGE_UNITS

params返回一个值,这是支持的最大纹理图像单元,可用于从片段着色器访问纹理贴图。该值必须至少为8.请参阅glActiveTexture。

GL_MAX_TEXTURE_SIZE

params返回一个值。该值粗略估计了GL可以处理的最大纹理。该值必须至少为64.请参阅glTexImage2D。

GL_MAX_VARYING_VECTORS

params返回一个值,最大数量的四元素浮点向量可用于插入顶点和片段着色器使用的变量变量。声明为矩阵或数组的变量变量将使用多个插值器。该值必须至少为8。

GL_MAX_VERTEX_ATTRIBS

params返回一个值,即顶点着色器可访问的4分量通用顶点属性的最大数量。该值必须至少为8.请参阅glVertexAttrib。

GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS

params返回一个值,最大支持的纹理图像单元,可用于从顶点着色器访问纹理贴图。值可能为0.请参阅glActiveTexture。

GL_MAX_VERTEX_UNIFORM_VECTORS

params返回一个值,可以保存在顶点着色器的统一变量存储中的四元素浮点数,整数或布尔矢量的最大数量。该值必须至少为128.请参阅glUniform。

GL_MAX_VIEWPORT_DIMS

params返回两个值:视口的最大支持宽度和高度。这些必须至少与要渲染的显示器的可见尺寸一样大。请参阅glViewport。

GL_NUM_COMPRESSED_TEXTURE_FORMATS

params返回一个整数值,表示可用的压缩纹理格式的数量。最小值为0.请参阅glCompressedTexImage2D。

GL_NUM_SHADER_BINARY_FORMATS

params返回一个整数值,表示可用着色器二进制格式的数量。最小值为0.请参阅glShaderBinary。

GL_PACK_ALIGNMENT

params返回一个值,用于将像素数据写入内存的字节对齐。初始值为4.请参阅glReadPixels。

GL_POLYGON_OFFSET_FACTOR

params返回一个值,缩放因子用于确定添加到多边形光栅化时生成的每个片段的深度值的变量偏移量。初始值为0.请参阅glPolygonOffset。

GL_POLYGON_OFFSET_FILL

params返回一个布尔值,指示在填充模式下是否为多边形启用了多边形偏移。初始值为GL_FALSE。请参阅glPolygonOffset。

GL_POLYGON_OFFSET_UNITS

params返回一个值。此值乘以特定于实现的值,然后添加到栅格化多边形时生成的每个片段的深度值。初始值为0.请参阅glPolygonOffset。

GL_RED_BITS

params返回一个值,即当前绑定的帧缓冲区的颜色缓冲区中的红色位平面的数量。

GL_RENDERBUFFER_BINDING

params返回单个值,即当前绑定的renderbuffer的名称。初始值为0,表示没有绑定渲染缓冲区。请参阅glBindRenderbuffer。

GL_SAMPLE_ALPHA_TO_COVERAGE

params返回一个布尔值,指示片段覆盖值是否应与基于片段的alpha值的临时覆盖值进行AND运算。初始值为GL_FALSE。请参阅glSampleCoverage。

GL_SAMPLE_BUFFERS

params返回一个整数值,表示与当前绑定的帧缓冲区关联的样本缓冲区的数量。请参阅glSampleCoverage。

GL_SAMPLE_COVERAGE

params返回一个布尔值,指示片段覆盖值是否应与基于当前样本覆盖值的临时覆盖值进行AND运算。初始值为GL_FALSE。请参阅glSampleCoverage。

GL_SAMPLE_COVERAGE_INVERT

params返回一个布尔值,指示是否应该反转临时覆盖值。请参阅glSampleCoverage。

GL_SAMPLE_COVERAGE_VALUE

params返回单个正浮点值,表示当前样本覆盖值。请参阅glSampleCoverage。

GL_SAMPLES

params返回一个整数值,表示当前绑定的帧缓冲区的coverage掩码大小。请参阅glSampleCoverage。

GL_SCISSOR_BOX

params返回四个值:裁剪框的x和y窗口坐标,后跟宽度和高度。最初,x和y窗口坐标均为0,宽度和高度设置为窗口大小。见glScissor。

GL_SCISSOR_TEST

params返回一个布尔值,指示是否启用裁剪。初始值为GL_FALSE。见glScissor。

GL_SHADER_BINARY_FORMATS

params返回长度为GL_NUM_SHADER_BINARY_FORMATS的符号常量列表,指示哪些着色器二进制格式可用。请参阅glShaderBinary。

GL_SHADER_COMPILER

params返回一个布尔值,指示是否支持着色器编译器。 GL_FALSE表示对glShaderSource,glCompileShader或glReleaseShaderCompiler的任何调用都将导致生成GL_INVALID_OPERATION错误。

GL_STENCIL_BACK_FAIL

params返回一个值,一个符号常量,指示当模板测试失败时对后向多边形采取的操作。初始值为GL_KEEP。请参阅glStencilOpSeparate。

GL_STENCIL_BACK_FUNC

params返回一个值,一个符号常量,指示用于后向多边形的函数,以将模板参考值与模板缓冲区值进行比较。初始值为GL_ALWAYS。请参阅glStencilFuncSeparate。

GL_STENCIL_BACK_PASS_DEPTH_FAIL

params返回一个值,一个符号常量,表示当模板测试通过时对背面多边形采取的操作,但深度测试失败。初始值为GL_KEEP。请参阅glStencilOpSeparate。

GL_STENCIL_BACK_PASS_DEPTH_PASS

params返回一个值,一个符号常量,表示当模板测试通过并且深度测试通过时,对于背面多边形采取的操作。初始值为GL_KEEP。请参阅glStencilOpSeparate。

GL_STENCIL_BACK_REF

params返回一个值,该值与背面多边形的模板缓冲区内容进行比较。初始值为0.请参阅glStencilFuncSeparate。

GL_STENCIL_BACK_VALUE_MASK

params返回一个值,用于背面多边形的掩码在比较之前屏蔽模板参考值和模板缓冲区值。初始值全是1。请参阅glStencilFuncSeparate。

GL_STENCIL_BACK_WRITEMASK

params返回一个值,该值控制用于背面多边形的模板位平面的写入。初始值全是1。请参阅glStencilMask。

GL_STENCIL_BITS

params返回一个值,即当前绑定的帧缓冲区的模板缓冲区中的位平面数。

GL_STENCIL_CLEAR_VALUE

params返回一个值,即模板位平面被清除的索引。初始值为0.请参阅glClearStencil。

GL_STENCIL_FAIL

params返回一个值,一个符号常量,表示当前面的多边形和非多边形的模板测试失败时采取的操作。初始值为GL_KEEP。请参阅glStencilOp和glStencilOpSeparate。

GL_STENCIL_FUNC

params返回一个值,一个符号常量,指示用于将模板参考值与前面多边形和非多边形的模板缓冲区值进行比较的函数。初始值为GL_ALWAYS。请参阅glStencilFunc和glStencilFuncSeparate。

GL_STENCIL_PASS_DEPTH_FAIL

params返回一个值,一个符号常量,表示模板测试通过时采取的操作,但前向多边形和非多边形的深度测试失败。初始值为GL_KEEP。请参阅glStencilOp和glStencilOpSeparate。

GL_STENCIL_PASS_DEPTH_PASS

params返回一个值,一个符号常量,表示模板测试通过时采取的操作,深度测试通过前面的多边形和非多边形。初始值为GL_KEEP。请参阅glStencilOp和glStencilOpSeparate。

GL_STENCIL_REF

params返回一个值,该值与前面的多边形和非多边形的模板缓冲区的内容进行比较。初始值为0.请参阅glStencilFunc和glStencilFuncSeparate。

GL_STENCIL_TEST

params返回一个布尔值,指示是否启用了片段的模板测试。初始值为GL_FALSE。请参阅glStencilFunc和glStencilOp。

GL_STENCIL_VALUE_MASK

params返回一个值,该掩码用于在比较前面的多边形和非多边形之前屏蔽模板参考值和模板缓冲区值。初始值全是1。请参阅glStencilFunc和glStencilFuncSeparate。

GL_STENCIL_WRITEMASK

params返回一个值,该控件用于控制前面的多边形和非多边形的模板位平面的写入。初始值全是1。请参阅glStencilMask和glStencilMaskSeparate。

GL_SUBPIXEL_BITS

params返回一个值,即用于在窗口坐标中定位栅格化几何的子像素分辨率的位数估计值。该值必须至少为4。

GL_TEXTURE_BINDING_2D

params返回单个值,即当前绑定到活动多纹理单元的目标GL_TEXTURE_2D的纹理的名称。初始值为0.请参阅glBindTexture。

GL_TEXTURE_BINDING_CUBE_MAP

params返回单个值,当前绑定到活动多纹理单元的目标GL_TEXTURE_CUBE_MAP的纹理的名称。初始值为0.请参阅glBindTexture。

GL_UNPACK_ALIGNMENT

params返回一个值,用于从内存中读取像素数据的字节对齐。初始值为4.请参阅glPixelStorei。

GL_VIEWPORT

params返回四个值:视口的x和y窗口坐标,后跟其宽度和高度。最初,x和y窗口坐标都设置为0,宽度和高度设置为GL将进行渲染的窗口的宽度和高度。请参阅glViewport。

使用glIsEnabled也可以更轻松地查询许多布尔参数。

错误

GL_INVALID_ENUM:pname不是前面列出的值之一

另见

glGetActiveAttrib,glGetActiveUniform,glGetAttachedShaders,glGetAttribLocation,glGetBufferParameteriv,glGetError,glGetFramebufferAttachmentParameteriv,glGetProgramiv,glGetProgramInfoLog,glGetRenderbufferParameteriv,glGetShaderiv,glGetShaderInfoLog,glGetShaderInfoLog,glGetString,glGetTexParameter,glGetUniform,glGetUniformLocation,glGetVertexAttrib,glGetVertexAttribPointerv,glIsEnabled

glGetActiveAttrib - 激活纹理单元

C规范

void glGetActiveAttrib( GLuint program,
GLuint index,
GLsizei bufSize,
GLsizei *length,
GLint *size,
GLenum *type,
GLchar *name);

参数

program

指定要查询的程序对象。

index

指定要查询的属性变量的索引。

bufSize

指定允许OpenGL在由name指示的字符缓冲区中写入的最大字符数。

length

如果传递NULL以外的值,则返回由name指示的字符串中的OpenGL实际写入的字符数(不包括空终止符)。

size

返回属性变量的尺寸大小。

type

返回属性变量的数据类型。

name

返回包含属性变量名称的以null结尾的字符串。

描述

glGetActiveAttrib返回有关程序指定的program对象中的活动属性变量的信息。可以通过使用值GL_ACTIVE_ATTRIBUTES调用glGetProgramiv来获取活动属性的数量。索引的值为0将选择第一个活动属性变量。索引的允许值范围从0到活动属性变量数减1。

属性变量具有任意名称,并通过编号的通用顶点属性获取其值。如果在链接操作期间确定属性变量可以在程序执行期间被访问,则该属性变量被认为是活动的。因此,程序之前应该是调用glLinkProgram的目标,但它没有必要成功链接。

可以通过调用值为GL_ACTIVE_ATTRIBUTE_MAX_LENGTH的glGetProgramiv来获取在程序中存储最长属性变量名所需的字符缓冲区的大小。此值应用于分配足够大小的缓冲区来存储返回的属性名称。该字符缓冲区的大小在bufSize中传递,并且在该名称中传递指向该字符缓冲区的指针。

glGetActiveAttrib返回index指示的属性变量的名称,将其存储在name指定的字符缓冲区中。返回的字符串将以null结尾。写入此缓冲区的实际字符数以长度形式返回,并且此计数不包括空终止字符。如果不需要返回字符串的长度,则可以在length参数中传递NULL值。

type参数将返回指向属性变量数据类型的指针。可以返回符号常量GL_FLOAT,GL_FLOAT_VEC2,GL_FLOAT_VEC3,GL_FLOAT_VEC4,GL_FLOAT_MAT2,GL_FLOAT_MAT3或GL_FLOAT_MAT4。 size参数将返回属性的大小,以type中返回的类型为单位。

此函数将返回尽可能多的有关指定活动属性变量的信息。如果没有可用信息,则长度为0,name为空字符串。如果在失败的链接操作后调用此函数,则可能发生这种情况。如果发生错误,则返回值length,size,type和name将不会被修改。

错误

GL_INVALID_VALUE:program不是OpenGL生成的值

GL_INVALID_OPERATION:program不是程序对象

GL_INVALID_VALUE:index>=程序中活动属性变量的数量

GL_INVALID_VALUE:bufSize<0

相关Gets

glGet 参数GL_MAX_VERTEX_ATTRIBS

glGetProgramiv 参数GL_ACTIVE_ATTRIBUTES或GL_ACTIVE_ATTRIBUTE_MAX_LENGTH

glIsProgram

另见

glBindAttribLocation,glGetActiveUniform,glLinkProgram,glVertexAttrib,glVertexAttribPointer

glGetActiveUniform - 返回有关活动统一变量的信息

C规范

void glGetActiveUniform(GLuint program,

                                             GLuint index,

                                             GLsizei bufSize,

                                             GLsizei *length,

                                             GLint *size,

                                             GLenum *type,

                                             GLchar *name);

参数

program

指定要查询的程序对象。

index

指定要查询的统一变量的索引。

bufSize

指定允许OpenGL在由name指示的字符缓冲区中写入的最大字符数。

length

如果传递NULL以外的值,则返回由name指示的字符串中的OpenGL实际写入的字符数(不包括空终止符)。

size

返回统一变量的大小。

type

返回统一变量的数据类型。

name

返回包含统一变量名称的以null结尾的字符串。

描述

glGetActiveUniform返回有关程序指定的程序对象中的活动统一变量的信息。可以通过使用值GL_ACTIVE_UNIFORMS调用glGetProgramiv来获得活动的统一变量的数量。索引的值为0的是选择第一个活动的统一变量。索引的允许值范围从0到活动统一变量的数量减1。

着色器可以使用内置的统一变量,用户定义的统一变量或两者。内置的统一变量具有前缀“gl_”并且引用现有的OpenGL状态或从这种状态导出的值(例如,gl_DepthRange)。用户定义的统一变量具有任意名称,并通过调用glUniform从应用程序获取它们的值。如果在链接操作期间确定可以在程序执行期间访问它,则统一变量(内置或用户定义)被认为是活动的。因此,程序之前应该是调用glLinkProgram的目标,但它没有必要成功链接。

在程序中存储最长的统一变量名所需的字符缓冲区的大小可以通过调用值为GL_ACTIVE_UNIFORM_MAX_LENGTH的glGetProgramiv来获得。此值应用于分配足够大小的缓冲区来存储返回的统一变量名称。该字符缓冲区的大小在bufSize中传递,并且在该名称中传递指向该字符缓冲区的指针。

glGetActiveUniform返回由index指示的统一变量的名称,将其存储在name指定的字符缓冲区中。返回的字符串将以null结尾。写入此缓冲区的实际字符数以长度形式返回,并且此计数不包括空终止字符。如果不需要返回字符串的长度,则可以在length参数中传递NULL值。

type参数将返回指向统一变量数据类型的指针。可以返回符号常数GL_FLOAT,GL_FLOAT_VEC2,GL_FLOAT_VEC3,GL_FLOAT_VEC4,GL_INT_GLEC_VEC2,GL_INT_VEC3,GL_INT_VEC4,GL_BOOL,GL_BOOL_VEC2,GL_BOOL_VEC3,GL_BOOL_VEC4,GL_FLOAT_MAT2,GL_FLOAT_MAT3,GL_FLOAT_MAT4,GL_SAMPLER_2D或GL_SAMPLER_CUBE。

如果数组的一个或多个元素处于活动状态,则在name中返回数组的名称,类型以type返回,并且size参数返回使用的最高数组元素索引加上1,具体由编译器确定和/或链接器。对于统一阵列,仅报告一个活动的统一变量。

声明为结构或结构数组的统一变量不会由此函数直接返回。相反,这些统一变量中的每一个都将被简化为包含“.”和“[]”运算符的基本组成部分,使得每个名称作为glGetUniformLocation的参数有效。

统一变量的大小将以size返回。除数组之外的统一变量将具有1的维度大小。结构和结构数组将如前所述减少,使得返回的每个名称将是先前列表中的数据类型。

活动统一变量列表可以包括内置的统一变量(以前缀“gl_”开头)以及用户定义的统一变量名称。

此函数将返回尽可能多的有关指定的活动统一变量的信息。如果没有可用信息,则length为0,name为空字符串(如果在失败的链接操作后调用此函数,则可能发生这种情况)。如果发生错误,则返回值length,size,type和name将不会被修改。

错误

GL_INVALID_VALUE:program不是OpenGL生成的值。

GL_INVALID_OPERATION:program不是程序对象。

GL_INVALID_VALUE:index>=程序中活动统一变量的数量。

GL_INVALID_VALUE:bufSize<0

相关Gets

glGet 参数GL_MAX_VERTEX_UNIFORM_VECTORS或GL_MAX_FRAGMENT_UNIFORM_VECTORS

glGetProgramiv 参数GL_ACTIVE_UNIFORMS或GL_ACTIVE_UNIFORM_MAX_LENGTH

glIsProgram

另见

glGetActiveAttrib,glGetUniform,glGetUniformLocation,glLinkProgram,glUniform,glUseProgram

glGetAttribLocation - 返回属性变量的位置

C规范

GLint glGetAttribLocation(GLuint program,const GLchar *name);

参数

program

指定要查询的程序对象。

name

要查询其位置的属性变量的名称。

描述

glGetAttribLocation查询由program指定的先前链接的程序对象,用于name指定的属性变量,并返回绑定到该属性变量的通用顶点属性的索引。 如果name是矩阵属性变量,则返回矩阵的第一列的索引。 如果指定的属性变量不是指定程序对象中的活动属性,或者名称以保留前缀“gl_”开头,则返回-1。

可以通过调用glBindAttribLocation随时指定属性变量名和通用属性索引之间的关联。 在调用glLinkProgram之前,属性绑定不会生效。 成功链接程序对象后,属性变量的索引值将保持固定,直到发生下一个链接命令。 如果链接成功,则只能在链接后查询属性值。 glGetAttribLocation返回上次为指定程序对象调用glLinkProgram时实际生效的绑定。 glGetAttribLocation不返回自上次链接操作以来指定的属性绑定。

错误

GL_INVALID_OPERATION :program不是OpenGL生成的值。

GL_INVALID_OPERATION :program不是程序对象。

GL_INVALID_OPERATION :program没有成功链接。

相关Gets

glGetActiveAttrib 参数program和活动的属性索引。

glIsProgram

另见

glBindAttribLocation,glLinkProgram,glVertexAttrib,glVertexAttribPointer

glGetBufferParameteriv - 返回缓冲区对象的参数

C规范

void glGetBufferParameteriv( GLenum target,
GLenum value,
GLint * data);

参数

target

指定目标缓冲区对象。符号常量必须为GL_ARRAY_BUFFER或GL_ELEMENT_ARRAY_BUFFER。

value

指定缓冲区对象参数的符号名称。可接受的值为GL_BUFFER_SIZE或GL_BUFFER_USAGE。

data

返回请求的参数。

描述

glGetBufferParameteriv在数据中返回target指定的缓冲区对象的选定参数。value命名一个特定的缓冲区对象参数,如下所示:

GL_BUFFER_SIZE

data返回缓冲区对象的大小,以字节为单位。初始值为0。

GL_BUFFER_USAGE

data返回缓冲区对象的使用模式。初始值为GL_STATIC_DRAW。

注意

如果生成错误,则不会更改数据内容。

错误

GL_INVALID_ENUM:target或value不是可接受的值。

GL_INVALID_OPERATION:保留的缓冲区对象名称0绑定到target。

另见

glBindBuffer,glBufferData

glGetError- 返回错误信息

C规范

GLenum glGetError(void);

描述

glGetError返回错误标志的值。每个可检测的错误都分配有数字代码和符号名称。发生错误时,错误标志将设置为相应的错误代码值。在调用glGetError(返回错误代码)之前,不会记录其他错误,并将标志重置为GL_NO_ERROR。如果对glGetError的调用返回GL_NO_ERROR,则自上次调用glGetError或自GL初始化以来,没有可检测到的错误。

为了允许分布式实现,可能存在多个错误标志。如果任何单个错误标志记录了错误,则返回该标志的值,并在调用glGetError时将该标志重置为GL_NO_ERROR。如果多个标志记录了错误,glGetError将返回并清除任意错误标志值。因此,如果要重置所有错误标志,则应始终在循环中调用glGetError,直到它返回GL_NO_ERROR。

初始情况下,所有错误标志都设置为GL_NO_ERROR。

目前定义了以下错误:

GL_NO_ERROR (0)

没有记录错误。 此符号常量的值保证为0。

GL_INVALID_ENUM (1280)

为枚举参数指定了不可接受的值。 违规命令被忽略,除了设置错误标志之外没有其他副作用。

GL_INVALID_VALUE (1281)

数字参数超出范围。 违规命令被忽略,除了设置错误标志之外没有其他副作用。

GL_INVALID_OPERATION (1282)

当前状态下不允许指定的操作。 违规命令被忽略,除了设置错误标志之外没有其他副作用。

GL_INVALID_FRAMEBUFFER_OPERATION (1286)

该命令试图渲染到帧缓冲区或从帧缓冲区读取,而当前绑定的帧缓冲区不是帧缓冲区完成状态(即glCheckFramebufferStatus的返回值不是GL_FRAMEBUFFER_COMPLETE)。 违规命令被忽略,除了设置错误标志之外没有其他副作用。

GL_OUT_OF_MEMORY (1285)

没有足够的内存来执行命令。 在记录此错误之后,GL的状态是未定义的,除了错误标志的状态。

设置错误标志时,仅当GL_OUT_OF_MEMORY发生时,GL操作的结果才是未定义的。 在所有其他情况下,生成错误的命令将被忽略,并且不会影响GL状态或帧缓冲区内容。 如果generate命令返回一个值,则返回0。

另见

glCheckFramebufferStatus

glGetFramebufferAttachmentParameteriv - 返回帧缓冲对象的附件参数

C规范

void glGetFramebufferAttachmentParameteriv( GLenum target,
GLenum attachment,
GLenum pname,
GLint * params);

参数

target

指定目标帧缓冲区对象。符号常量必须是GL_FRAMEBUFFER。

attachment

指定帧缓冲区对象附加点的符号名称。可接受的值为GL_COLOR_ATTACHMENT0,GL_DEPTH_ATTACHMENT和GL_STENCIL_ATTACHMENT。

pname

指定帧缓冲区对象附件参数的符号名称。可接受的值为GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE,GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME,GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL和GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE。

params

返回请求的参数。

描述

glGetFramebufferAttachmentParameteriv以params形式返回当前绑定的framebuffer对象的附着点的选定附件参数。pname命名一个特定的framebuffer对象附件参数,如下所示:

GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE

params返回包含附加图像的对象类型,GL_RENDERBUFFER,GL_TEXTURE,或者如果没有附加图像,则返回GL_NONE。初始值为GL_NONE。

GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME

如果GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE的值为GL_RENDERBUFFER,则params返回包含附加图像的renderbuffer对象的名称。如果GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE的值为GL_TEXTURE,则params返回包含附加图像的纹理对象的名称。初始值为零。

GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL

如果GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE的值为GL_TEXTURE,则params返回包含附加图像的纹理对象的mipmap级别。初始值为零。

GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE

如果GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE的值为GL_TEXTURE且GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME是立方体贴图纹理的名称,则params返回包含附加图像的立方体贴图纹理对象的立方体贴图面。如果附加图像来自纹理对象但不是立方体贴图,则params返回0.初始值为GL_TEXTURE_CUBE_MAP_POSITIVE_X。

注意

如果生成错误,则不会更改params的内容。

错误

GL_INVALID_ENUM:target不是GL_FRAMEBUFFER。

GL_INVALID_ENUM:attachment不是GL_COLOR_ATTACHMENT0,GL_DEPTH_ATTACHMENT或GL_STENCIL_ATTACHMENT。

GL_INVALID_ENUM:指定附着点处的附加对象为GL_RENDERBUFFER但pname不是GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE或GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME。

GL_INVALID_ENUM:指定附着点处的附加对象是GL_TEXTURE但pname不是GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE,GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME,GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL或GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE。

GL_INVALID_ENUM:命名附加点上没有附加对象但pname不是GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE。

GL_INVALID_OPERATION:绑定了默认帧缓冲区对象名称0。

另见

glBindFramebuffer,glFramebufferRenderbuffer,glFramebufferTexture2D

glGetProgramInfoLog- 返回program对象的信息日志

C规范

void glGetProgramInfoLog(GLuint program,GLsizei maxLength,GLsizei *length,GLchar *infoLog);

参数

program

指定要查询其信息日志的程序对象。

maxLength

指定用于存储返回的信息日志的字符缓冲区的大小。

length

返回infoLog中返回的字符串的长度(不包括空终止符)。

infoLog

指定用于返回信息日志的字符数组。

描述

glGetProgramInfoLog返回指定程序对象的信息日志。 在链接或验证程序对象时,将修改程序对象的信息日志。 返回的字符串将以空结尾。

glGetProgramInfoLog尽可能多地在infoLog中返回信息日志,最多可返回maxLength个字符。实际返回的字符数(不包括空终止字符)由length指定。 如果不需要返回字符串的长度,则可以在length参数中传递NULL值。 可以通过调用值为GL_INFO_LOG_LENGTH的glGetProgramiv来获取存储返回的信息日志所需的缓冲区大小。

程序对象的信息日志是一个字符串,其中可能包含诊断信息,警告信息以及有关上次编译操作的其他信息。 创建程序对象时,其信息日志将为长度为0的字符串。

注意

程序对象的信息日志是OpenGL实现者用于传达有关链接或验证程序的信息的主要机制。 因此,即使链接或验证成功,信息日志也可以在开发过程中对应用程序开发人员有所帮助。 应用程序开发人员不应期望不同的OpenGL实现生成相同的信息日志。

错误

GL_INVALID_VALUE:program不是OpenGL生成的值。

GL_INVALID_OPERATION:program不是程序对象。

GL_INVALID_VALUE:maxLength小于0

相关Gets

glGetProgramiv参数GL_INFO_LOG_LENGTH获取信息日志的长度

glIsProgram

另见

glCompileShader,glGetShaderInfoLog,glLinkProgram,glValidateProgram

版权

glGetProgramiv- 从program对象返回一个参数的值

C规范

void glGetProgramiv(GLuint program,GLenum pname,GLint *params);

参数

program

指定要查询的program对象。

pname

指定program对象参数。 接受的符号名称为GL_DELETE_STATUS,GL_LINK_STATUS,GL_VALIDATE_STATUS,GL_INFO_LOG_LENGTH,GL_ATTACHED_SHADERS,GL_ACTIVE_ATTRIBUTES,GL_ACTIVE_UNIFORMS,GL_ACTIVE_ATTRIBUTE_MAX_LENGTH,GL_ACTIVE_UNIFORM_MAX_LENGTH。

params

返回请求的对象参数的值。

描述

glGetProgramiv以params形式返回指定的program对象的参数值。 定义了以下参数:

GL_DELETE_STATUS

如果program当前标记为删除,则params返回GL_TRUE,否则返回GL_FALSE。

GL_LINK_STATUS

如果program的最后一个链接操作成功,则params返回GL_TRUE,否则返回GL_FALSE。

GL_VALIDATE_STATUS

params返回GL_TRUE,program的最后一次验证操作成功了也返回GL_TRUE,否则返回GL_FALSE。

GL_INFO_LOG_LENGTH

params返回program信息日志中的字符数,包括空终止字符(即,存储信息日志所需的字符缓冲区的大小)。 如果程序没有信息日志,则返回值0。

GL_ATTACHED_SHADERS

params返回附加到program的着色器对象的数量。

GL_ACTIVE_ATTRIBUTES

params返回program的激活状态的属性变量数。

GL_ACTIVE_ATTRIBUTE_MAX_LENGTH

params返回program的最长激活状态的属性名称的长度,包括空终止字符(即,存储最长属性名称所需的字符缓冲区的大小)。 如果不存在活动属性,则返回0。

GL_ACTIVE_UNIFORMS

params返回program的激活状态的统一变量的数量。

GL_ACTIVE_UNIFORM_MAX_LENGTH

params返回program的最长激活状态的统一变量名称的长度,包括空终止字符(即,存储最长统一变量名称所需的字符缓冲区的大小)。 如果不存在活动的统一变量,则返回0。

注意

如果生成错误,则不会更改params的内容。

错误

GL_INVALID_ENUM :pname不是一个可接受的值

GL_INVALID_VALUE :program不是OpenGL生成的值

GL_INVALID_OPERATION: program没有关联program对象

相关Gets

glGetActiveAttrib 参数:program

glGetActiveUniform 参数:program

glGetAttachedShaders 参数:program

glGetProgramInfoLog 参数:program

glIsProgram

另见

glAttachShader, glCreateProgram, glDeleteProgram, glGetShaderiv, glLinkProgram, glValidateProgram

glGetRenderbufferParameteriv - 返回renderbuffer对象的参数

C规范

void glGetRenderbufferParameteriv( GLenum target,
GLenum pname,
GLint * params);

参数

target

指定目标renderbuffer对象。符号常量必须为GL_RENDERBUFFER。

pname

指定renderbuffer对象参数的符号名称。可接受的值是GL_RENDERBUFFER_WIDTH,GL_RENDERBUFFER_HEIGHT,GL_RENDERBUFFER_INTERNAL_FORMAT,GL_RENDERBUFFER_RED_SIZE,GL_RENDERBUFFER_GREEN_SIZE,GL_RENDERBUFFER_BLUE_SIZE,GL_RENDERBUFFER_ALPHA_SIZE,GL_RENDERBUFFER_DEPTH_SIZE,或GL_RENDERBUFFER_STENCIL_SIZE。

params

返回请求的参数。

描述

glGetRenderbufferParameteriv以params形式返回当前绑定的renderbuffer对象的选定参数。pname命名一个特定的renderbuffer对象参数,如下所示:

GL_RENDERBUFFER_WIDTH

params返回当前绑定的渲染缓冲区图像的宽度(以像素为单位)。初始值为0。

GL_RENDERBUFFER_HEIGHT

params返回当前绑定的渲染缓冲区图像的高度(以像素为单位)。初始值为0。

GL_RENDERBUFFER_INTERNAL_FORMAT

params返回当前绑定的renderbuffer图像的内部格式。初始值为GL_RGBA4。

GL_RENDERBUFFER_RED_SIZE

params返回当前绑定的渲染缓冲区图像的红色分量的分辨率。初始值为0。

GL_RENDERBUFFER_GREEN_SIZE

params返回当前绑定的渲染缓冲区图像的绿色分量的分辨率。初始值为0。

GL_RENDERBUFFER_BLUE_SIZE

params返回当前绑定的渲染缓冲区图像的蓝色分量的分辨率。初始值为0。

GL_RENDERBUFFER_ALPHA_SIZE

params返回当前绑定的渲染缓冲区图像的alpha分量的分辨率。初始值为0。

GL_RENDERBUFFER_DEPTH_SIZE

params返回当前绑定的渲染缓冲区图像的深度分量的分辨率。初始值为0。

GL_RENDERBUFFER_STENCIL_SIZE

params返回当前绑定的渲染缓冲区图像的模板组件的分辨率。初始值为0。

注意

glGetRenderbufferParameteriv报告的组件分辨率是组件存储的实际分辨率,可能与glRenderbufferStorage的internalformat参数请求的分辨率不同。

如果生成错误,则不会更改params的内容。

错误

GL_INVALID_ENUM:目标不是GL_RENDERBUFFER。

GL_INVALID_ENUM:pname不上述值之一。

GL_INVALID_OPERATION:绑定了保留的renderbuffer对象名称0。

另见

glBindRenderbuffer,glRenderbufferStorage

glGetShaderInfoLog - 返回着色器对象的信息日志

C规范

void glGetShaderInfoLog(GLuint shader,GLsizei maxLength,GLsizei *length,GLchar *infoLog);

参数

shader

指定要查询其信息日志的着色器对象。

maxLength

指定用于存储返回的信息日志的字符缓冲区的大小。

length

返回infoLog中返回的字符串的长度(不包括空终止符)。

infoLog

指定用于返回信息日志的字符数组。

描述

glGetShaderInfoLog返回指定着色器对象的信息日志。 编译着色器时,将修改着色器对象的信息日志。 返回的字符串将以空结尾。

glGetShaderInfoLog尽可能多地在infoLog中返回信息日志,最多可返回maxLength个字符。实际返回的字符数(不包括空终止字符)由length指定。 如果不需要返回字符串的长度,则可以在length参数中传递NULL值。 可以通过调用值为GL_INFO_LOG_LENGTH的glGetShaderiv来获取存储返回的信息日志所需的缓冲区大小。

着色器对象的信息日志是一个字符串,其中可能包含诊断信息,警告信息以及有关上次编译操作的其他信息。 创建着色器对象时,其信息日志将为长度为0的字符串。

注意

着色器对象的信息日志是OpenGL实现者用于传达有关编译过程的信息的主要机制。 因此,即使编译成功,信息日志也可以在开发过程中对应用程序开发人员有所帮助。 应用程序开发人员不应期望不同的OpenGL实现生成相同的信息日志。

错误

GL_INVALID_VALUE:shader不是OpenGL生成的值。

GL_INVALID_OPERATION:shader不是着色器对象。

GL_INVALID_VALUE:maxLength小于0

相关Gets

glGetShaderiv 参数GL_INFO_LOG_LENGTH获取信息日志的长度

glIsShader

另见

glCompileShader,glGetProgramInfoLog,glLinkProgram,glValidateProgram

glGetShaderPrecisionFormat - 返回不同着色器数字格式的范围和精度

C规范

void glGetShaderPrecisionFormat( GLenum shaderType,
GLenum precisionType,
GLint *range,
GLint *precision);

参数

shaderType

指定要查询的着色器的类型。必须是GL_VERTEX_SHADER或GL_FRAGMENT_SHADER。

precisionType

指定要查询的数字格式,对应于着色器精度限定符和变量类型。必须是GL_LOW_FLOAT,GL_MEDIUM_FLOAT,GL_HIGH_FLOAT,GL_LOW_INT,GL_MEDIUM_INT或GL_HIGH_INT中的一个。

range

指定指向两元素数组的指针,其中返回log以2为底格式的最小和最大为对数的值。

precision

指定指向返回格式精度的log 2的位置的指针。

描述

glGetShaderPrecisionFormat返回具有低,中和高精度限定符的浮点和整数着色器变量格式的范围和精度限制。当minRep和maxRep是格式的最小和最大可表示值时,floor = log2⁡minRep和floor⁡=log2⁡maxRep分别作为第一个和第二个元素返回range。

如果大于1的最小可表示值是1 +ε,则以精度返回floor⁡ - log2⁡ε。整数格式的ε为1,因此将返回0.浮点格式将返回大于0的值。

注意

OpenGL ES着色语言规范中描述了不同格式所需的最小范围和精度。

如果片段着色器不支持高精度浮点格式,则使用参数GL_FRAGMENT_SHADER和GL_HIGH_FLOAT调用glGetShaderPrecisionFormat将为range和precision返回0。对于顶点着色器,必须支持高精度浮点格式。

着色器编译器支持是可选的,因此必须在使用之前通过使用参数GL_SHADER_COMPILER调用glGet来查询。 glShaderSource,glCompileShader,glGetShaderPrecisionFormat和glReleaseShaderCompiler将在不支持着色器编译器的实现上生成GL_INVALID_OPERATION。这样的实现提供了glShaderBinary替代方案,用于提供预编译的着色器二进制文件。

如果生成错误,则不会更改range或precision的内容。

错误

GL_INVALID_OPERATION:不支持着色器编译器。

GL_INVALID_ENUM:shaderType或precisionType不是可接受的值。

相关Gets

glGet 参数GL_SHADER_COMPILER

另见

glCompileShader,glShaderSource

glGetShaderSource - 从着色器对象返回源代码字符串

C规范

void glGetShaderSource( GLuint shader,
GLsizei bufSize,
GLsizei *length,
GLchar *source);

参数

shader

指定要查询的着色器对象。

bufSize

指定用于存储返回的源代码字符串的字符缓冲区的大小。

length

返回source中返回的字符串的长度(不包括null终止符)。

source

指定用于返回源代码字符串的字符数组。

描述

glGetShaderSource返回由着色器指定的着色器对象的源代码字符串的串联。着色器对象的源代码字符串是先前调用glShaderSource的结果。函数返回的字符串将以null结尾。

glGetShaderSource尽可能多地在源代码中返回源代码字符串,最多可返回bufSize字符。实际返回的字符数(不包括空终止字符)由length指定。如果不需要返回字符串的长度,则可以在length参数中传递NULL值。可以通过调用值为GL_SHADER_SOURCE_LENGTH的glGetShaderiv来获取存储返回的源代码字符串所需的缓冲区大小。

错误

GL_INVALID_VALUE:shader不是OpenGL生成的值。

GL_INVALID_OPERATION:shader不是着色器对象。

GL_INVALID_VALUE:bufSize小于0。

相关Gets

glGetShaderiv 参数GL_SHADER_SOURCE_LENGTH

glIsShader

另见

glCreateShader,glShaderSource

glGetShaderiv - 从着色器对象返回一个参数

C规范

void glGetShaderiv(GLuint shader,GLenum pname,GLint *params);

参数

shader

指定要查询的着色器对象。

pname

指定着色器对象的参数。 可接受的符号名称为GL_SHADER_TYPE,GL_DELETE_STATUS,GL_COMPILE_STATUS,GL_INFO_LOG_LENGTH,GL_SHADER_SOURCE_LENGTH。

params

返回请求的参数结果值。

描述

glGetShaderiv以params形式返回特定着色器对象的参数值。 定义了以下参数:

GL_SHADER_TYPE

如果着色器是顶点着色器对象,则params返回GL_VERTEX_SHADER;如果着色器是片段着色器对象,则                                  返回GL_FRAGMENT_SHADER。

GL_DELETE_STATUS

如果shader当前被标记为删除,则params返回GL_TRUE,否则返回GL_FALSE。

GL_COMPILE_STATUS

对于支持着色器编译器的实现,如果着色器上的最后一次编译操作成功,则params返回GL_TRUE,否则返回GL_FALSE。

GL_INFO_LOG_LENGTH

对于支持着色器编译器的实现,params返回着色器信息日志的字符数,包括空终止字符(即,存储信息日志所需的字符缓冲区的大小)。 如果着色器没有信息日志,则返回值0。

GL_SHADER_SOURCE_LENGTH

对于支持着色器编译器的实现,params返回构成着色器着色器源的源字符串的串联长度,包括空终止字符。 (即,存储着色器源所需的字符缓冲区的大小)。 如果不存在源代码,则返回0。

注意

着色器编译器支持是可选的,因此必须在使用之前通过使用参数GL_SHADER_COMPILER调用glGet来查询。glShaderSource,glCompileShader,glGetShaderPrecisionFormat,glReleaseShaderCompiler等在不支持着色器编译器的实现上都将生成GL_INVALID_OPERATION。用glGetShaderiv去查询GL_COMPILE_STATUS,GL_INFO_LOG_LENGTH和GL_SHADER_SOURCE_LENGTH也会是返回GL_INVALID_OPERATION。这样的实现提供了glShaderBinary替代方案,用于提供预编译的着色器二进制文件。

如果生成错误,则不会更改params的内容。

错误

GL_INVALID_ENUM:pname不是一个可接受的值。

GL_INVALID_VALUE:shader不是OpenGL生成的值。

GL_INVALID_OPERATION:不支持着色器编译器的情况下查询pname为GL_COMPILE_STATUS,GL_INFO_LOG_LENGTH或GL_SHADER_SOURCE_LENGTH(GL_SHADER_TYPE,GL_DELETE_STATUS不会报这个错)。

GL_INVALID_OPERATION:shader没有关联着色器对象。

相关Gets

glGet 参数GL_SHADER_COMPILER

glGetShaderInfoLog 参数shader

glGetShaderSource 参数shader

glIsShader

另见

glCompileShader,glCreateShader,glDeleteShader,glGetProgramiv,glShaderSource,glShaderBinary

版权

glGetString- 返回描述当前GL连接的字符串

C规范

const GLubyte* glGetString(GLenum name);

参数

name

指定符号常量,GL_VENDOR,GL_RENDERER,GL_VERSION,GL_SHADING_LANGUAGE_VERSION或GL_EXTENSIONS之一。

描述

glGetString返回一个指向静态字符串的指针,该字符串描述当前GL连接的某些方面。 name可以是以下之一:

GL_VENDOR

返回负责此GL实施的公司。 此名称在发行版之间不会发生变化。

GL_RENDERER

返回渲染器的名称。 此名称通常特定于硬件平台的特定配置。 它不会在发行版之间发生变化。

GL_VERSION

返回版本号

GL_SHADING_LANGUAGE_VERSION

返回着色语言的版本号或发行版号。

GL_EXTENSIONS

返回GL支持的空格分隔的扩展列表。

由于GL不包含对实现的性能特征的查询,因此编写一些应用程序以识别已知平台并基于这些平台的已知性能特征修改其GL使用。 字符串GL_VENDOR和GL_RENDERER一起唯一地指定平台。 它们不会在发行版之间发生变化,可以作为平台识别的算法使用。

某些应用程序希望使用不属于标准GL的功能。 这些特征可以实现为标准GL的扩展。 GL_EXTENSIONS字符串是一个以空格分隔的受支持的GL扩展列表。 (扩展名不包含空格字符。)

所有字符串都以空值终止。

注意

如果生成错误,glGetString将会返回0。

客户端和服务器可能支持不同的版本或扩展。 glGetString始终返回兼容的版本号或扩展列表。 版本号始终描述的是服务器。

错误

GL_INVALID_ENUM :如果name不是上述值。

glGetTexParameter - 返回纹理参数值

C规范

void glGetTexParameterfv( GLenum target,
GLenum pname,
GLfloat * params);
void glGetTexParameteriv( GLenum target,
GLenum pname,
GLint * params);

参数

target

指定活动纹理单元的目标纹理的符号名称。 GL_TEXTURE_2D和GL_TEXTURE_CUBE_MAP被接受。

pname

指定纹理参数的符号名称。接受GL_TEXTURE_MAG_FILTER,GL_TEXTURE_MIN_FILTER,GL_TEXTURE_WRAP_S和GL_TEXTURE_WRAP_T。

params

返回纹理参数。

描述

glGetTexParameter以params形式返回指定为pname的纹理参数的值。 target定义活动纹理单元的目标纹理(GL_TEXTURE_2D或GL_TEXTURE_CUBE_MAP),以指定二维或多维数据集映射纹理。 pname接受与glTexParameter相同的符号,具有相同的解释:

GL_TEXTURE_MAG_FILTER

返回单值纹理放大过滤器,一个符号常量。初始值为GL_LINEAR。

GL_TEXTURE_MIN_FILTER

返回单值纹理缩小过滤器,一个符号常量。初始值为GL_NEAREST_MIPMAP_LINEAR。

GL_TEXTURE_WRAP_S

返回纹理坐标s的单值包装函数,即符号常量。初始值为GL_REPEAT。

GL_TEXTURE_WRAP_T

返回纹理坐标t的单值包装函数,即符号常量。初始值为GL_REPEAT。

注意

如果生成错误,则不会更改params的内容。

错误

GL_INVALID_ENUM:target或pname不是可接受的值。

另见

glTexParameter

glGetUniform - 返回统一变量的值

C规范

void glGetUniformfv( GLuint program,
GLint location,
GLfloat *params);

void glGetUniformiv( GLuint program,
GLint location,
GLint *params);

参数

program

指定要查询的程序对象。

location

指定要查询的统一变量的位置。

params

返回指定的统一变量的值。

描述

glGetUniform以params形式返回指定统一变量的值。由location指定的统一变量的类型确定返回的值的数量。如果将着色器变量在着色器中定义为boolean,int或float,则将返回单个值。如果将其定义为vec2,ivec2或bvec2,则将返回两个值。如果将其定义为vec3,ivec3或bvec3,则将返回三个值,依此类推。要查询存储在声明为数组的统一变量中的值,请为数组的每个元素调用glGetUniform。要查询存储在声明为结构的统一变量中的值,请为结构中的每个字段调用glGetUniform。声明为矩阵的统一变量的值将按列主要顺序返回。

在程序对象链接之前,不知道分配给统一变量的位置。发生链接后,命令glGetUniformLocation可用于获取统一变量的位置。然后可以将此位置值传递给glGetUniform,以查询统一变量的当前值。成功链接程序对象后,统一变量的索引值保持不变,直到发生下一个链接命令。如果链接成功,则只能在链接后查询统一变量值。

注意

如果生成错误,则不会更改params的内容。

错误

GL_INVALID_VALUE:program不是OpenGL生成的值。

GL_INVALID_OPERATION:program不是程序对象。

GL_INVALID_OPERATION:程序尚未成功链接。

GL_INVALID_OPERATION:location不对应于指定程序对象的有效统一变量位置。

相关Gets

glGetActiveUniform 参数program和活动统一变量的索引。

glGetProgramiv 参数GL_ACTIVE_UNIFORMS或GL_ACTIVE_UNIFORM_MAX_LENGTH。

glGetUniformLocation 参数program和统一变量的名称。

glIsProgram

另见

glCreateProgram,glLinkProgram,glUniform

glGetUniformLocation- 返回统一变量的位置

C规范

GLint glGetUniformLocation(GLuint program,const GLchar *name);

参数

program

指定要查询的程序对象。

name

要查询其位置的统一变量的名称。

描述

glGetUniformLocation返回一个整数,表示程序对象中特定统一变量的位置。 name必须是不包含空格的空终止字符串。 name必须是程序中的活动统一变量名,它不能是结构,也不能是结构数组或向量或矩阵的子组件。 如果name与程序中的活动统一变量不对应,或者name以保留前缀“gl_”开头,则此函数返回-1。

可以通过为结构中的每个字段调用glGetUniformLocation来查询作为结构或结构数组的统一变量。 数组元素运算符“[]”和结构字段运算符“.” 可以在name中使用,以便选择数组中的元素或结构中的字段。 使用这些运算符的结果不允许是另一个结构,结构数组或向量或矩阵的子组件。 除非name的最后一部分表示统一变量数组,否则可以使用数组的名称或使用“[0]”附加的名称来检索数组的第一个元素的位置。

在程序对象成功链接之前,分配给统一变量的实际位置是不知道的。发生链接后,命令glGetUniformLocation可用于获取统一变量的位置。 然后可以将此位置值传递给glUniform以设置统一变量的值或glGetUniform以查询统一变量的当前值。成功链接程序对象后,统一变量的索引值保持不变,直到发生下一个链接命令。 如果链接成功,则只能在链接后查询统一变量位置和值。

错误

GL_INVALID_VALUE :program不是OpenGL生成的值。

GL_INVALID_OPERATION :program不是程序对象。

GL_INVALID_OPERATION :program没有成功链接。

相关Gets

glGetActiveUniform 参数program和活动的统一变量索引。

glGetProgramiv 参数program和GL_ACTIVE_UNIFORMS 或 GL_ACTIVE_UNIFORM_MAX_LENGTH

glGetUniform 参数program和统一变量的名称

glIsProgram

另见

glLinkProgram,glUniform

glGetVertexAttrib - 返回通用顶点属性参数

C规范

void glGetVertexAttribfv( GLuint index,
GLenum pname,
GLfloat *params);
void glGetVertexAttribiv( GLuint index,
GLenum pname,
GLint *params);

参数

index

指定要查询的通用顶点属性参数。

pname

指定要查询的顶点属性参数的符号名称。可接受的值为GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING,GL_VERTEX_ATTRIB_ARRAY_ENABLED,GL_VERTEX_ATTRIB_ARRAY_SIZE,GL_VERTEX_ATTRIB_ARRAY_STRIDE,GL_VERTEX_ATTRIB_ARRAY_TYPE,GL_VERTEX_ATTRIB_ARRAY_NORMALIZED或GL_CURRENT_VERTEX_ATTRIB。

params

返回请求的数据。

描述

glGetVertexAttrib以params形式返回通用顶点属性参数的值。要查询的通用顶点属性由index指定,要查询的参数由pname指定。接受的参数名称如下:

GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING

params返回单个值,当前绑定到绑定点的缓冲区对象的名称对应于通用顶点属性数组索引。如果没有绑定缓冲区对象,则返回0。初始值为0。

GL_VERTEX_ATTRIB_ARRAY_ENABLED

如果启用了索引的顶点属性数组,则params返回非零(true)的单个值,如果禁用,则返回0(false)。初始值为GL_FALSE。

GL_VERTEX_ATTRIB_ARRAY_SIZE

params返回单个值,即index的顶点属性数组的大小。大小是顶点属性数组的每个元素的值的数量,它将是1,2,3或4.初始值是4。

GL_VERTEX_ATTRIB_ARRAY_STRIDE

params返回单个值,数组步长(索引的顶点属性数组中的连续元素之间的字节数)。值为0表示数组元素按顺序存储在内存中。初始值为0。

GL_VERTEX_ATTRIB_ARRAY_TYPE

params返回单个值,一个符号常量,指示索引的顶点属性数组的数组类型。可能的值为GL_BYTE,GL_UNSIGNED_BYTE,GL_SHORT,GL_UNSIGNED_SHORT,GL_FIXED和GL_FLOAT。初始值为GL_FLOAT。

GL_VERTEX_ATTRIB_ARRAY_NORMALIZED

如果由index指示的顶点属性数组的定点数据类型在转换为浮点时被标准化,则params返回非零(true)的单个值,否则返回0(false)。初始值为GL_FALSE。

GL_CURRENT_VERTEX_ATTRIB

params返回四个值,表示index指定的通用顶点属性的当前值。初始值为(0,0,0,1)。

除GL_CURRENT_VERTEX_ATTRIB之外的所有参数都表示客户端状态。

注意

如果生成错误,则不会更改params的内容。

错误

GL_INVALID_ENUM:pname不是可接受的值。

GL_INVALID_VALUE:index大于或等于GL_MAX_VERTEX_ATTRIBS。

相关Gets

glGet 参数GL_MAX_VERTEX_ATTRIBS。

glGetVertexAttribPointerv 参数index和GL_VERTEX_ATTRIB_ARRAY_POINTER。

另见

glBindAttribLocation,glBindBuffer,glDisableVertexAttribArray,glEnableVertexAttribArray,glVertexAttrib,glVertexAttrib

glGetVertexAttribPointerv - 返回指定的通用顶点属性指针的地址

C规范

void glGetVertexAttribPointerv( GLuint index,
GLenum pname,
GLvoid **pointer);

参数

index

指定要返回的通用顶点属性参数。

pname

指定要返回的通用顶点属性参数的符号名称。必须是GL_VERTEX_ATTRIB_ARRAY_POINTER。

pointer

返回指针值。

描述

glGetVertexAttribPointerv返回指针信息。index是要查询的通用顶点属性,pname是指示要返回的指针的符号常量,params是指向放置返回数据的位置的指针。

如果在先前指定了所需指针时将非零命名缓冲区对象绑定到GL_ARRAY_BUFFER目标(请参阅glBindBuffer),则返回的指针是缓冲区对象的数据存储中的字节偏移量。

注意

返回的指针是客户端状态。

每个指针的初始值为0。

错误

GL_INVALID_ENUM:pname不是可接受的值。

GL_INVALID_VALUE:index大于或等于GL_MAX_VERTEX_ATTRIBS。

相关Gets

glGet 参数GL_MAX_VERTEX_ATTRIBS

另见

glGetVertexAttrib,glVertexAttribPointer

glHint - 指定特定于实现的提示

C规范

void glHint( GLenum target,
GLenum mode);

参数

target

指定一个符号常量,指示要控制的行为。接受GL_GENERATE_MIPMAP_HINT。

mode

指定表示所需行为的符号常量。接受GL_FASTEST,GL_NICEST和GL_DONT_CARE。

描述

当存在解释空间时,GL行为的某些方面可以通过提示来控制。使用两个参数指定提示。 target是指示要控制的行为的符号常量,mode是指示所需行为的另一个符号常量。每个目标的初始值为GL_DONT_CARE。模式可以是以下之一:

GL_FASTEST

应该选择最有效的选择。

GL_NICEST

应选择最正确或最高质量的选项。

GL_DONT_CARE

都可以。

虽然可以暗示的实现方面已经明确定义,但提示的解释取决于实现。可以使用target指定的提示方面以及建议的语义如下:

GL_GENERATE_MIPMAP_HINT

使用glGenerateMipmap生成mipmap图像时指示过滤的质量。

注意

提示的解释取决于实施。某些实现忽略glHint设置。

目前只是在生成mipmap的时候有用到吧。

错误

GL_INVALID_ENUM:target或mode不是可接受的值。

另见

glGenerateMipmap

glIsBuffer - 确定名称是否对应于缓冲区对象

C规范

GLboolean glIsBuffer(GLuint buffer);

参数

buffer

指定一个值,该值可能是缓冲区对象的名称。

描述

如果buffer当前是缓冲区对象的名称,glIsBuffer将返回GL_TRUE。 如果buffer为零,或者是当前不是缓冲区对象名称的非零值,或者发生错误,则glIsBuffer返回GL_FALSE。

glGenBuffers返回的名称,但尚未通过调用glBindBuffer与缓冲区对象关联,不是缓冲区对象的名称。

另见

glBindBuffer,glDeleteBuffers,glGenBuffers,glGet

版权

glIsEnabled - 测试是否启用了某功能

C规范

GLboolean glIsEnabled(GLenum cap);

参数

cap

指定表示GL功能的符号常量。

描述

如果cap是启用的功能,glIsEnabled将返回GL_TRUE,否则返回GL_FALSE。 初始化时禁用除GL_DITHER之外的所有功能; GL_DITHER初始化时启用。

cap接受以下常量:

常量 另见
GL_BLEND glBlendFunc
GL_CULL_FACE glCullFace
GL_DEPTH_TEST glDepthFunc,glDepthRangef
GL_DITHER glEnable
GL_POLYGON_OFFSET_FILL glPolygonOffset
GL_SAMPLE_ALPHA_TO_COVERAGE glSampleCoverage
GL_SAMPLE_COVERAGE glSampleCoverage
GL_SCISSOR_TEST glScissor
GL_STENCIL_TEST glStencilFunc,glStencilOp
注意

如果生成错误,glIsEnabled将返回0。

错误

GL_INVALID_ENUM :cap不是上述可接受的值。

另见

glEnable,glGet

glIsFramebuffer - 确定名称是否对应于帧缓冲区对象

C规范

GLboolean glIsFramebuffer(GLuint framebuffer);

参数

framebuffer

指定一个值,该值可能是帧缓冲区对象的名称。

描述

如果framebuffer当前是帧缓冲区对象的名称,glIsFramebuffer将返回GL_TRUE。 如果framebuffer为零,或者是当前不是帧缓冲区对象名称的非零值,或者发生错误,则glIsFramebuffer返回GL_FALSE。

glGenFramebuffers返回的名称,但尚未通过调用glBindFramebuffer与帧缓冲区对象关联,不是帧缓冲区对象的名称。

另见

glBindFramebuffer,glDeleteFramebuffers,glGenFramebuffers

glIsProgram- 判断一个名称是否与一个program对象相对应。

C规范

GLboolean glIsProgram(GLuint program);

参数

program

指定一个潜在的(可能的)program对象

描述

如果参数program是之前用glCreateProgram创建的program对象的名称并且呢尚未使用glDeleteProgram方法来删除它,那么 glIsProgram方法将会返回GL_TRUE。

如果参数program的值是0,或者是它不是program对象的名称所对应的非0值,或者发生了错误,那么glIsProgram方法都将返回GL_FALSE。

注意

如果program不是有效的program对象名称,那是不会生成错误的。

如果program对象被glDeleteProgram标记为删除了,但是仍然作为当前状态中的一部分被使用时,那参数program仍然会被当作是program对象,此时glIsProgram返回的结果将会是GL_TRUE。

另见

glCreateProgram, glDeleteProgram, glUseProgram

glIsRenderbuffer - 确定名称是否对应于renderbuffer对象

C规范

GLboolean glIsRenderbuffer(GLuint renderbuffer);

参数

renderbuffer

指定一个值,该值可能是渲染缓冲区对象的名称。

描述

如果renderbuffer当前是渲染缓冲区对象的名称,glIsRenderbuffer将返回GL_TRUE。 如果renderbuffer为零,或者是当前不是渲染缓冲区对象名称的非零值,或者发生错误,则glIsRenderbuffer返回GL_FALSE。

glGenRenderbuffers返回的名称,但尚未通过调用glBindRenderbuffer与渲染缓冲区对象关联,不是渲染缓冲区对象的名称。

另见

glBindRenderbuffer,glDeleteRenderbuffers,glGenRenderbuffers

glIsShader- 判断一个名称是否与一个shader对象相对应。

C规范

GLboolean glIsShader(GLuint shader);

参数

shader

指定一个潜在的(可能的)shader对象。

描述

如果参数shader是由之前的glCreateShader方法创建出来的shader对象所对应的名称,并且尚未被glDeleteShader方法标记删除,那么glIsShader方法将返回GL_TRUE。

如果参数shader的值是0,或者是一个不是shader对象所对应的名称的非0值,或者发生了错误,那么glIsShader方法都将返回GL_FALSE。

注意

如果参数shader不是一个有效的shader对象所对应的名称,那这是不会产生错误的。

如果一个shader对象被glDeleteShader方法标记为删除,但是仍然被附着在一个program对象上的时候,那它仍然被当作是一个shader对象,并且glIsShader会返回GL_TRUE。(也就是说其实glDeleteShader只是标记一个shader要删除,但并不是真正的删除了,而且如果很长时间不再用它的时候才去回收它,但是如果这个shader对象附着在program对象上的时候,程序是不会回收它的,这个时候用glIsShader来判断,是会返回GL_TRUE的)。

另见

glCreateShader, glDeleteShader

glIsTexture-确定一个ID是否与纹理相对应。

C规范

GLboolean glIsTexture(GLuint texture);

参数

texture

指定一个可能是纹理ID的值。

描述

如果texture是一个纹理ID那么glIsTexture将返回GL_TRUE。如果texture的值是0或者非0但是不是纹理ID又或者有错误生成了glIsTexture都会返回GL_FALSE。

如果这个texture确实是由glGenTextures生成的,但是还没有调用glBindTexture来关联,那么我们也认为这个texture不是纹理ID

另见

glBindTexture glCopyTexImage2D glDeleteTextures glGenTextures glGet glGetTexParameter glTexImage2D glTexParameter

glLineWidth - 指定栅格化线条的宽度

C规范

void glLineWidth(GLfloat width);

参数

width

指定栅格化线条的宽度。初始值为1。

描述

glLineWidth指定线条的栅格化宽度。

通过将提供的宽度四舍五入到最接近的整数来确定实际宽度。如果Δx> =Δy,则在每个光栅化的列中填充i个像素,其中i是宽度的舍入值。否则,在光栅化的每一行中填充i个像素。

有一系列支持的线宽。仅保证宽度1是绝对支持的;其他的依赖于实现。要查询支持的宽度范围,请使用参数GL_ALIASED_LINE_WIDTH_RANGE调用glGet。

注意

查询GL_LINE_WIDTH时,始终返回glLineWidth指定的行宽。截断和四舍五入对指定值没有影响(就是查到的值还是width)。

线宽可能因实现的最大值而被截断。使用GL_ALIASED_LINE_WIDTH_RANGE调用glGet以确定最大宽度。

错误

GL_INVALID_VALUE :width<=0

相关Gets

glGet 参数GL_LINE_WIDTH

glGet 参数GL_ALIASED_LINE_WIDTH_RANGE

另见

glEnable

glLinkProgram- 连接一个program对象。

C规范

void glLinkProgram(GLuint program);

参数

program

指定要链接的program对象的句柄。

描述

glLinkProgram链接program指定的program对象。附加到program的类型为GL_VERTEX_SHADER的着色器对象用于创建将在可编程顶点处理器上运行的可执行文件。 附加到program的类型为GL_FRAGMENT_SHADER的着色器对象用于创建将在可编程片段处理器上运行的可执行文件。

链接操作的状态将存储为program对象状态的一部分。 如果程序对象链接没有错误并且可以使用,则此值将设置为GL_TRUE,否则将设置为GL_FALSE。 可以通过使用参数program和GL_LINK_STATUS调用glGetShaderiv来查询它。

作为链接操作成功的结果,属于program的所有激活的用户定义的统一变量的值将被初始化为0,并且将为每个program对象的活动统一变量分配一个可以通过调用glGetUniformLocation来查询的位置。 此外,任何尚未绑定到通用顶点属性索引的活动用户定义属性变量此时也将绑定到一个索引。

由于OpenGL ES着色语言规范中指定的多种原因,program对象的链接可能会失败。 以下列出了导致链接错误的一些条件:

顶点着色器和片元着色器不同时存在于程序对象中。
已超出支持的活动属性变量数。
已超出统一变量的存储限制。
已超出支持的活动统一变量的数量。
顶点着色器或片段着色器缺失main函数。
片元着色器中实际使用的易变变量未在顶点着色器中以相同的方式声明(或根本未声明)。
对函数或变量名的引用尚未解析。
使用两种不同类型或两种不同的初始值声明的全局共享变量。
一个或多个附加的着色器对象尚未成功编译(通过glCompileShader)或未成功加载预编译的着色器二进制文件(通过glShaderBinary)。
绑定通用属性矩阵导致矩阵的某些行超出允许的最大值GL_MAX_VERTEX_ATTRIBS。
没有足够的连续顶点属性槽来绑定属性矩阵
成功链接program对象后,可以通过调用glUseProgram使program对象成为当前状态的一部分。 无论链接操作是否成功,program对象的信息日志都将被覆盖。 可以通过调用glGetProgramInfoLog来检索信息日志。

如果链接操作成功并且由于先前调用glUseProgram而指定的program对象当前已被使用,glLinkProgram还将安装生成的可执行文件作为当前呈现状态的一部分。如果当前正在使用的program对象重新链接失败,其链接状态将设置为GL_FALSE,但可执行文件和关联状态将保持当前状态的一部分,直到后续调用glUseProgram将其从使用中删除。 从使用中删除后,在成功重新链接之前,它不能成为当前状态的一部分。

链接操作完成时,program对象的信息日志就被更新了,而且程序也被生成了。在链接操作之后,应用程序可以自由修改附加的着色器对象,编译附加的着色器对象,分离着色器对象,删除着色器对象以及附加其他着色器对象。 这些操作都不会影响信息日志或作为程序对象一部分的程序。

注意

如果链接操作不成功,则关于程序上的先前链接操作的任何信息都将丢失(即,失败的链接不会恢复旧的程序状态)。 即使链接操作不成功,仍然可以从程序中检索某些信息。 例如,glGetActiveAttrib和glGetActiveUniform。

错误

GL_INVALID_VALUE:如果program或shader不是由OpenGL所生成的值。

GL_INVALID_OPERATION:如果program参数传的不是program对象。

相关Gets

glGet 参数:GL_CURRENT_PROGRAM

glGetActiveAttrib 参数:有效的program对象和激活状态的属性变量的句柄。

glGetActiveUniform 参数:有效的program对象和激活状态的统一变量的句柄。

glGetAttachedShaders 参数:有效的program对象

glGetAttribLocation 参数:有效的program对象和属性变量的名称(在shader中的变量字符串)。

glGetProgramiv 参数:有效的program对象和GL_LINK_STATUS

glGetProgramInfoLog 参数:有效的program对象

glGetUniform​​​​​​​ 参数:有效的program对象和一个统一变量地址

glGetUniformLocation​​​​​​​ 参数:有效的program对象和统一变量的名称(在shader中的变量字符串)。

glIsProgram​​​​​​​

另见

glAttachShader, glBindAttribLocation, glCompileShader, glShaderBinary, glCreateProgram, glDeleteProgram, glDetachShader, glUniform, glUseProgram, glValidateProgram

glPixelStorei - 设置像素存储模式

C规范

void glPixelStorei(GLenum pname,

                                   GLint param);

参数

pname

指定要设置的参数的符号名称。 一个值会影响像素数据到内存的打包:GL_PACK_ALIGNMENT。 另一个影响从内存中解压缩像素数据:GL_UNPACK_ALIGNMENT。

param

指定pname设置为的值。

描述

glPixelStorei设置像素存储模式,这些模式会影响后续glReadPixels的操作以及纹理模式的解包(请参阅glTexImage2D和glTexSubImage2D)。

pname是一个符号常量,表示要设置的参数,param是新值。 一个存储参数会影响像素数据返回客户端内存的方式:

GL_PACK_ALIGNMENT

指定内存中每个像素行开头的对齐要求。允许值为1(字节对齐),2(行与偶数字节对齐),4(字对齐)和8(行从双字边界开始)。

另一个存储参数会影响从客户端内存中读取像素数据的方式:

GL_UNPACK_ALIGNMENT

指定内存中每个像素行开头的对齐要求。 允许值为1(字节对齐),2(行与偶数字节对齐),4(字对齐)和8(行从双字边界开始)。

下表给出了可以使用glPixelStorei设置的每个存储参数的类型,初始值和有效值范围。

pname 类型 初始值 可用值
GL_PACK_ALIGNMENT 整型 4 1,2,4,8
GL_UNPACK_ALIGNMENT 整型 4 1,2,4,8

如果param为0,则布尔参数设置为false,否则设置为true。

错误

GL_INVALID_ENUM :如果pname不是可接受的值。

GL_INVALID_VALUE :如果指定对齐不是1,2,4或8。

相关Gets

glGet 参数GL_PACK_ALIGNMENT 或GL_UNPACK_ALIGNMENT

另见

glReadPixels,glTexImage2D,glTexSubImage2D

glPolygonOffset - 设置用于计算深度值的比例和单位

C规范

void glPolygonOffset(GLfloat factor,

                                       GLfloat units);

参数

factor

指定用于为每个多边形创建变量深度偏移的比例因子。初始值为0。

units

乘以特定于实现的值以创建恒定的深度偏移。初始值为0。

描述

启用GL_POLYGON_OFFSET_FILL后,每个片段的深度值将在从相应顶点的深度值进行插值后进行偏移。偏移的值是factor×DZ + r×units,其中DZ是相对于多边形的屏幕区域的深度变化的度量,并且r是保证给定的可解析偏移的最小值实现。注意在执行深度测试并将值写入深度缓冲区之前添加偏移量。

glPolygonOffset可用于渲染隐藏线图像,将贴花应用于曲面以及渲染具有突出显示边的实体。(用于解决Z-fighting)

相关Gets

glIsEnabled 参数GL_POLYGON_OFFSET_FILL。

glGet 参数GL_POLYGON_OFFSET_FACTOR或GL_POLYGON_OFFSET_UNITS。

另见

glDepthFunc,glEnable,glGet ,glIsEnabled

glReadPixels - 从帧缓冲区中读取一个像素块

C规范

void glReadPixels(GLint x,

                                GLint y,

                                GLsizei width,

                                GLsizei height,

                                GLenum format,

                                GLenum type,

                                GLvoid * data);

参数

x,y

指定从帧缓冲区读取的第一个像素的窗口坐标。 此位置是矩形像素块的左下角。

width,height

指定像素矩形的尺寸。 一个宽度和高度对应于单个像素。

format

指定像素数据的格式。 接受以下符号值:GL_ALPHA,GL_RGB和GL_RGBA。

type

指定像素数据的数据类型。 必须是GL_UNSIGNED_BYTE,GL_UNSIGNED_SHORT_5_6_5,GL_UNSIGNED_SHORT_4_4_4_4或GL_UNSIGNED_SHORT_5_5_5_1之一。

data

返回像素数据。

描述

glReadPixels从帧缓冲区返回像素数据,从左下角位于(x,y)的像素开始,从位置data开始返回客户端内存。使用glPixelStorei命令设置的GL_PACK_ALIGNMENT参数会影响像素数据在放入客户端内存之前的处理。

glReadPixels返回每个像素的值,左下角为x + i y + j,0 <= i <width,0 <= j <height。 该像素被称为第j行中的第i个像素。 像素按行顺序从最低行返回到最高行,每行从左到右排列。

format指定返回像素值的格式; 可接受的值是:

GL_ALPHA

GL_RGB

GL_RGBA

从颜色缓冲区读取RGBA颜色分量。 每个颜色分量都转换为浮点,使零强度映射到0.0,全强度映射到1.0。

丢弃不需要的数据。 例如,GL_ALPHA丢弃红色,绿色和蓝色组件,而GL_RGB仅丢弃alpha组件。 最终值被限制在[0 1]的范围内。

最后,组件将转换为由类型指定合适的格式,。 当类型为GL_UNSIGNED_BYTE时,每个组件乘以2^8 - 1。 当类型为GL_UNSIGNED_SHORT_5_6_5,GL_UNSIGNED_SHORT_4_4_4_4或GL_UNSIGNED_SHORT_5_5_5_1时,每个分量乘以2^N-1,其中N是位域中的位数。

返回值按如下方式放入内存中。 如果format是GL_ALPHA,则返回单个值,并且第j行中第i个像素的数据放置在位置j*width + i中。 GL_RGB返回三个值,GL_RGBA为每个像素返回四个值,所有值对应于占据数据中连续空间的单个像素。 由glPixelStorei设置的存储参数GL_PACK_ALIGNMENT会影响数据写入内存的方式。 有关说明,请参阅glPixelStorei。

注意

如果当前绑定的帧缓冲区不是默认的帧缓冲区对象,则从附加到GL_COLOR_ATTACHMENT0附着点的彩色图像中读取颜色分量。

只有两个format/type参数对是可接受的。GL_RGBA / GL_UNSIGNED_BYTE是始终都可以接受的,另外的就需要查询了:通过查询GL_IMPLEMENTATION_COLOR_READ_FORMAT和GL_IMPLEMENTATION_COLOR_READ_TYPE来发现其他可接受的对。

位于连接到当前GL上下文的窗口之外的像素值是未定义的。

如果生成错误,则不会更改data内容。

错误

GL_INVALID_ENUM :如果format或type不是可接受的值。

GL_INVALID_VALUE :如果width或height是负数

GL_INVALID_OPERATION :如果type为GL_UNSIGNED_SHORT_5_6_5且格式不是GL_RGB。

GL_INVALID_OPERATION :如果type为GL_UNSIGNED_SHORT_4_4_4_4或GL_UNSIGNED_SHORT_5_5_5_1且格式不是GL_RGBA。

GL_INVALID_OPERATION :如果format和type分别既不是GL_RGBA又不是GL_UNSIGNED_BYTE,也不是通过查询GL_IMPLEMENTATION_COLOR_READ_FORMAT和GL_IMPLEMENTATION_COLOR_READ_TYPE返回的格式/类型对。

GL_INVALID_FRAMEBUFFER_OPERATION :如果当前绑定的帧缓冲区不是帧缓冲区完成状态(即glCheckFramebufferStatus的返回值不是GL_FRAMEBUFFER_COMPLETE)。

相关Gets

glGet 参数GL_IMPLEMENTATION_COLOR_READ_FORMAT或GL_IMPLEMENTATION_COLOR_READ_TYPE

glGet 参数GL_PACK_ALIGNMENT

另见

glCheckFramebufferStatus,glPixelStorei

glReleaseShaderCompiler - (提示)释放着色器编译器分配的资源

C规范

void glReleaseShaderCompiler(void);

描述

对于支持着色器编译器的实现,glReleaseShaderCompiler释放着色器编译器分配的资源。这是应用程序的一个提示,即至少在一段时间内不太可能发生额外的着色器编译,并且着色器编译器消耗的资源可能会被释放并在其他地方更好地使用。

但是,如果在调用glReleaseShaderCompiler之后调用glCompileShader,则必须恢复着色器编译器以服务编译请求,就像从未调用过glReleaseShaderCompiler一样。

注意

着色器编译器支持是可选的,因此必须在使用之前通过使用参数GL_SHADER_COMPILER调用glGet来查询。 glShaderSource,glCompileShader,glGetShaderPrecisionFormat和glReleaseShaderCompiler将在不支持着色器编译器的实现上生成GL_INVALID_OPERATION。这样的实现提供了glShaderBinary替代方案,用于提供预编译的着色器二进制文件。

错误

GL_INVALID_OPERATION:如果实现不支持着色器编译器

相关Gets

glGet与参数GL_SHADER_COMPILER

另见

glCompileShader,glShaderSource

glRenderbufferStorage - 创建并初始化renderbuffer对象的数据存储

C规范

void glRenderbufferStorage(GLenum target,

                                                    GLenum internalformat,

                                                    GLsizei width,

                                                    GLsizei height);

参数

target

指定renderbuffer目标。 符号常量必须为GL_RENDERBUFFER。

internalformat

指定渲染缓冲区的颜色可渲染,深度可渲染或模板可渲染格式。 必须是以下符号常量之一:GL_RGBA4,GL_RGB565,GL_RGB5_A1,GL_DEPTH_COMPONENT16或GL_STENCIL_INDEX8。

width

指定渲染缓冲区的宽度(以像素为单位)。

height

指定渲染缓冲区的高度(以像素为单位)。

描述

glRenderbufferStorage建立renderbuffer对象图像的数据存储,格式和尺寸。 删除渲染缓冲区的任何现有数据存储,则新数据存储的内容为未定义的。

实现可以基于任何glRenderbufferStorage参数(target除外)改变其内部组件分辨率的分配,但是分配和选择的内部格式不能是任何其他状态的函数,并且一旦建立就不能改变。 可以使用glGetRenderbufferParameteriv查询分配的图像的每个分量的实际分辨率。

错误

GL_INVALID_ENUM :target不是GL_RENDERBUFFER。

GL_INVALID_ENUM :internalformat不是可接受的值。

GL_INVALID_VALUE :如果width或height小于零或大于GL_MAX_RENDERBUFFER_SIZE。

GL_OUT_OF_MEMORY :如果实现无法创建具有请求的width和height的数据存储。

GL_INVALID_OPERATION :如果绑定了保留的renderbuffer对象名称0。

相关Gets

glGetRenderbufferParameteriv

另见

glBindRenderbuffer,glDeleteRenderbuffers,glFramebufferRenderbuffer,glGenRenderbuffers,glGetRenderbufferParameteriv,glIsRenderbuffer

glSampleCoverage - 指定多重采样覆盖率参数

C规范

void glSampleCoverage( GLclampf value,
GLboolean invert);

参数

value

指定单个浮点样本覆盖率值。该值被限制在[0,1]的范围内。初始值为1.0。

invert

指定一个布尔值,表示是否应反转coverage掩码。接受GL_TRUE和GL_FALSE。初始值为GL_FALSE。

描述

多重采样在各种依赖于实现的子像素位置处对像素进行多次采样以产生抗锯齿效果。如果启用了多重采样,将对点,线和多边形进行抗锯齿处理。

value用于构造临时掩模,用于确定将用于解析最终片段颜色的样本。该掩码与多重采样计算生成的覆盖掩码一致。如果设置了反转标志,则反转临时掩码(所有位翻转),然后按位与计算。

如果实现没有可用的多重采样缓冲区,或者禁用了多重采样,则仅使用单个样本计算像素的最终RGB颜色就会发生光栅化。

如果实现支持多重采样缓冲区,并且启用了多重采样,则通过组合每个像素的多个采样来生成像素的最终颜色。每个样本都包含颜色,深度和模板信息,允许对每个样本执行这些操作。

相关Gets

glGet 参数GL_SAMPLE_COVERAGE_VALUE

glGet 参数GL_SAMPLE_COVERAGE_INVERT

glIsEnabled 参数GL_SAMPLE_ALPHA_TO_COVERAGE

glIsEnabled 参数GL_SAMPLE_COVERAGE

另见

glEnable

glScissor - 定义一个裁剪矩形区域

C规范

void glScissor( GLint x,
GLint y,
GLsizei width,
GLsizei height);

参数

x, y

指定矩形区域的左下角。最初(0,0)。

width, height

指定矩形区域的宽度和高度。首次将GL上下文附加到窗口时,width和height将被设置为该窗口的尺寸。

描述

glScissor在窗口坐标中定义了一个称为裁剪框的矩形。前两个参数x和y指定框的左下角。 width和height指定框的宽度和高度。

要启用和禁用裁剪测试,请使用参数GL_SCISSOR_TEST调用glEnable和glDisable。该测试最初被禁用。启用测试时,只能通过绘制命令修改位于剪刀框内的像素。窗口坐标在帧缓冲区像素的共享角上具有整数值。glScissor(0,0,1,1)只允许修改窗口中的左下角像素,而glScissor(0,0,0,0)不允许修改窗口中的任何像素。

当裁剪测试被禁用时,就好像裁剪盒包含了整个窗口。

错误

GL_INVALID_VALUE:width或height为负。

相关Gets

glGet 参数GL_SCISSOR_BOX

glIsEnabled 参数GL_SCISSOR_TEST

另见

glEnable,glViewport

glShaderBinary - 加载预编译的着色器二进制文件

C规范

void glShaderBinary( GLsizei n,
const GLuint *shaders,
GLenum binaryformat,
const void *binary,
GLsizei length);

参数

n

指定着色器中存在的着色器对象句柄的数量。

shaders

指定指向将加载着色器二进制文件的着色器对象控制器数组的指针。

binaryformat

指定着色器二进制格式。

binary

指定指向客户端内存中着色器二进制数据的指针。

length

指定着色器二进制数据的长度(以字节为单位)。

描述

对于支持它们的实现,glShaderBinary加载预编译的着色器二进制文件。着色器包含n个着色器对象句柄的列表。每个句柄都引用一种独特的着色器类型(顶点着色器或片段着色器)。二进制指向客户端内存中预编译的二进制着色器代码,binaryformat表示预编译代码的格式。

根据定义指定二进制格式的扩展规范对二进制图像进行解码。 OpenGL ES没有定义特定的二进制格式,但确实提供了一种机制来获取扩展提供的这种格式的符号常量。可以通过查询GL_NUM_SHADER_BINARY_FORMATS的值来获取支持的着色器二进制格式的数量。支持的特定二进制格式列表可以通过查询GL_SHADER_BINARY_FORMATS的值来获得。

根据着色器中着色器对象的类型,glShaderBinary将单独加载二进制顶点或片段着色器,或加载包含存储在同一二进制文件中的优化顶点和片段着色器对的可执行二进制文件。

如果glShaderBinary失败,则不会恢复为其加载二进制文件的旧对象着色器对象。

注意

着色器二进制支持是可选的,因此必须在使用之前通过使用参数GL_NUM_SHADER_BINARY_FORMATS和GL_SHADER_BINARY_FORMATS调用glGet来查询。 glShaderBinary在不支持任何着色器二进制格式的实现上生成GL_INVALID_OPERATION错误。这样的实现提供了glShaderSource替代方案,用于提供用于编译的OpenGL ES着色语言着色器源。

如果支持着色器二进制格式,则实现可能需要将一组优化的顶点和片段着色器二进制文件一起编译给glLinkProgram。未指定优化可能导致glLinkProgram失败。这种限制(如果存在)将记录在定义二进制格式的扩展规范中。

调用glShaderBinary时,OpenGL会复制着色器二进制数据,因此应用程序可以在函数返回后立即释放其数据副本。

错误

GL_INVALID_ENUM:binaryformat不是GL_SHADER_BINARY_FORMATS中返回的受支持格式。

GL_INVALID_VALUE:着色器中的任何值不是OpenGL生成的值。

GL_INVALID_VALUE:二进制指向的数据格式与binaryformat不匹配。

GL_INVALID_VALUE:n或length为负。

GL_INVALID_OPERATION:着色器中的任何值不是着色器对象,或者着色器中有多个顶点着色器对象句柄或多个片段着色器对象句柄。

相关Gets

glGet 参数GL_NUM_SHADER_BINARY_FORMATS和GL_SHADER_BINARY_FORMATS

glIsShader

另见

glCreateShader,glDeleteShader,glLinkProgram

glShaderSource - 替换着色器对象中的源代码

C规范

void glShaderSource(GLuint shader,GLsizei count,const GLchar * const *string,const GLint *length);

参数

shader

要被替换源代码的着色器对象的句柄(ID)。

count

指定字符串和长度数组中的元素数。

string

指定指向包含要加载到着色器的源代码的字符串的指针数组。

length

指定字符串长度的数组。

描述

对于支持着色器编译器的实现,glShaderSource将着色器中的源代码设置为string指定的字符串数组中的源代码。先前存储在着色器对象中的任何源代码都将被完全替换。数组中的字符串数由count指定。 如果length为NULL,则认为每个字符串都以null结尾。如果length不是NULL,则它指向包含字符串的每个相应元素的字符串长度的数组。length数组中的每个元素可以包含相应字符串的长度(空字符不计为字符串长度的一部分)或小于0的值以表示该字符串为空终止。此时不扫描或解析源代码字符串; 它们只是复制到指定的着色器对象中。

注意

着色器编译器支持是可选的,因此必须在使用之前通过使用参数GL_SHADER_COMPILER调用glGet来查询。glShaderSource,glCompileShader,glGetShaderPrecisionFormat,glReleaseShaderCompiler等在不支持着色器编译器的实现上都将生成GL_INVALID_OPERATION。这样的实现提供了glShaderBinary替代方案,用于提供预编译的着色器二进制文件。

调用glShaderSource时,OpenGL会复制着色器源代码字符串,因此应用程序可以在函数返回后立即释放源代码字符串的副本。

错误

GL_INVALID_OPERATION:不支持着色器编译器

GL_INVALID_VALUE:shader不是OpenGL生成的值

GL_INVALID_OPERATION:shader不是着色器对象

GL_INVALID_VALUE:count比0小

相关Gets

glGet 参数GL_SHADER_COMPILER

glGetShaderiv 参数shader和GL_SHADER_SOURCE_LENGTH

glGetShaderSource 参数shader

glIsShader

另见

glCompileShader,glGetShaderPrecisionFormat,glCreateShader,glDeleteShader

glStencilFunc - 设置模板测试的前后功能和参考值

glStencilFuncSeparate - 设置模板测试的前端和/或后端功能和参考值

C规范

void glStencilFunc( GLenum func,
GLint ref,
GLuint mask);

void glStencilFuncSeparate( GLenum face,
GLenum func,
GLint ref,
GLuint mask);

参数

face

指定是否更新前和/或后模板状态。三个符号常量有效:GL_FRONT,GL_BACK和GL_FRONT_AND_BACK。

func

指定测试功能。八个符号常量有效:GL_NEVER,GL_LESS,GL_LEQUAL,GL_GREATER,GL_GEQUAL,GL_EQUAL,GL_NOTEQUAL和GL_ALWAYS。初始值为GL_ALWAYS。

ref

指定模板测试的参考值。 ref被截断到[0,2^n - 1]的范围,其中n是模板缓冲器中的位平面数。初始值为0。

mask

指定在测试完成时与参考值和存储的模板值进行AND运算的掩码。初始值全是1。

描述

与深度缓冲一样,模板测试可以在每个像素的基础上启用和禁用绘图。首先使用GL绘图基元绘制模板平面,然后使用模板平面渲染几何体和图像以屏蔽部分屏幕。 Stenciling通常用于多通道渲染算法以实现特殊效果,例如贴花,轮廓和构造性实体几何渲染。

模板测试基于参考值和模板缓冲器中的值之间的比较结果有条件地消除像素。要启用和禁用测试,请使用参数GL_STENCIL_TEST调用glEnable和glDisable。要根据模板测试的结果指定操作,请调用glStencilOp或glStencilOpSeparate。

可以有两组独立的func,ref和mask参数;一个影响面向后的多边形,另一个影响前面的多边形以及其他非多边形基元。 glStencilFunc将前后模板状态设置为相同的值。使用glStencilFuncSeparate将前后模板状态设置为不同的值。

func是一个符号常量,用于确定模板比较函数。它接受八个值中的一个,如下面的列表所示。 ref是在模板比较中使用的整数参考值。它被截断到[0,2^n - 1]的范围,其中n是模板缓冲器中的位平面数。mask与参考值和存储的模板值进行按位AND运算。

如果模板表示存储在相应模板缓冲区位置中的值,则以下列表显示可由func指定的每个比较函数的效果。仅当比较成功时,像素才会传递到光栅化过程中的下一个阶段(请参阅glStencilOp)。所有测试都将模板值视为[0,2^n - 1]范围内的无符号整数,其中n是模板缓冲区中的位平面数。

func接受以下值:

GL_NEVER

总是失败。

GL_LESS

( ref & mask ) < ( stencil & mask ) 则通过。

GL_LEQUAL

( ref & mask ) <= ( stencil & mask )则通过。

GL_GREATER

( ref & mask ) > ( stencil & mask )则通过。

GL_GEQUAL

( ref & mask ) >= ( stencil & mask )则通过。

GL_EQUAL

( ref & mask ) = ( stencil & mask )则通过。

GL_NOTEQUAL

( ref & mask ) != ( stencil & mask )则通过。

GL_ALWAYS

总是通过。

注意

最初,模板测试被禁用。如果没有模板缓冲区,则不会发生模板修改,就好像模板测试总是通过一样。

glStencilFunc与调用glStencilFuncSeparate并将face设置为GL_FRONT_AND_BACK相同。

错误

GL_INVALID_ENUM:face不是GL_FRONT,GL_BACK或GL_FRONT_AND_BACK

GL_INVALID_ENUM:func不是八个接受值之一。

相关Gets

glGet 参数GL_STENCIL_FUNC,GL_STENCIL_VALUE_MASK,GL_STENCIL_REF,GL_STENCIL_BACK_FUNC,GL_STENCIL_BACK_VALUE_MASK,GL_STENCIL_BACK_REF或GL_STENCIL_BITS

glIsEnabled 参数GL_STENCIL_TEST

另见

glBlendFunc,glDepthFunc,glEnable,glStencilMask,glStencilMaskSeparate,glStencilOp,glStencilOpSeparate

glStencilMask - 控制模板平面中各个位的正面和背面写入

C规范

void glStencilMask(GLuint mask);

参数

mask

指定位掩码以启用和禁用模板平面中各个位的写入。最初,mask全是1。

描述

glStencilMask控制模板平面中各个位的写入。掩码的最低有效n位,其中n是模板缓冲区中的位数,指定掩码。如果掩码中出现1,则可以写入模板缓冲区中的相应位。出现0时,相应的位被写保护。最初,所有位都被启用以进行写入。

可以有两个独立的掩码writemasks;一个影响面向后的多边形,另一个影响前面的多边形以及其他非多边形基元。 glStencilMask将前后模板写入掩码设置为相同的值。使用glStencilMaskSeparate将前后模板写掩码设置为不同的值。

注意

glStencilMask与将face设置为GL_FRONT_AND_BACK时调用glStencilMaskSeparate相同。

相关Gets

glGet 参数GL_STENCIL_WRITEMASK,GL_STENCIL_BACK_WRITEMASK或GL_STENCIL_BITS

另见

glColorMask,glDepthMask,glStencilFunc,glStencilFuncSeparate,glStencilMaskSeparate,glStencilOp,glStencilOpSeparate

glStencilFuncSeparate - 控制模板平面中各个位的正面和/或背面写入

C规范

void glStencilMaskSeparate( GLenum face,
GLuint mask);

参数

face

指定是否更新前和/或后模板写掩码。三个符号常量有效:GL_FRONT,GL_BACK和GL_FRONT_AND_BACK。

mask

指定位掩码以启用和禁用模板平面中各个位的写入。最初,面具全是1。

描述

glStencilMaskSeparate控制模板平面中各个位的写入。掩码的最低有效n位,其中n是模板缓冲区中的位数,指定掩码。如果掩码中出现1,则可以写入模板缓冲区中的相应位。出现0时,相应的位被写保护。最初,所有位都被启用以进行写入。

可以有两个独立的掩码写掩码;一个影响面向后的多边形,另一个影响前面的多边形以及其他非多边形基元。 glStencilMask将前后模板写入掩码设置为相同的值,就像调用glStencilMaskSeparate并将face设置为GL_FRONT_AND_BACK一样。

错误

GL_INVALID_ENUM:face不是GL_FRONT,GL_BACK或GL_FRONT_AND_BACK

相关Gets

glGet 参数GL_STENCIL_WRITEMASK,GL_STENCIL_BACK_WRITEMASK或GL_STENCIL_BITS

另见

glColorMask,glColorMask,glStencilFunc,glStencilFuncSeparate,glStencilMask,glStencilOp,glStencilOpSeparate

glStencilOp- 设置正面和背面模板测试操作

glStencilOpSeparate - 设置前端和/或后端模板测试操作

C规范

void glStencilOp( GLenum sfail,
GLenum dpfail,
GLenum dppass);

void glStencilOpSeparate( GLenum face,
GLenum sfail,
GLenum dpfail,
GLenum dppass);

参数

face

指定是否更新前和/或后模板状态。三个符号常量有效:GL_FRONT,GL_BACK和GL_FRONT_AND_BACK。

sfail

指定模板测试失败时要执行的操作。接受八个符号常量:GL_KEEP,GL_ZERO,GL_REPLACE,GL_INCR,GL_INCR_WRAP,GL_DECR,GL_DECR_WRAP和GL_INVERT。初始值为GL_KEEP。

dpfail

指定模板测试通过时的模板操作,但深度测试失败。 dpfail接受与sfail相同的符号常量。初始值为GL_KEEP。

dppass

指定模板测试和深度测试通过时的模板操作,或模板测试通过时的模板操作,并且未启用深度缓冲或深度测试。 dppass接受与sfail相同的符号常量。初始值为GL_KEEP。

描述

与深度缓冲一样,模板测试可以在每个像素的基础上启用和禁用绘图。首先使用GL绘图基元绘制模板平面,然后使用模板平面渲染几何体和图像以屏蔽部分屏幕。 Stenciling通常用于多通道渲染算法以实现特殊效果,例如贴花,轮廓和构造性实体几何渲染。

模板测试基于参考值和模板缓冲器中的值之间的比较结果有条件地消除像素。要启用和禁用测试,请使用参数GL_STENCIL_TEST调用glEnable和glDisable。要控制它,请调用glStencilFunc或glStencilFuncSeparate。

可以有两组独立的sfail,dpfail和dppass参数;一个影响面向后的多边形,另一个影响前面的多边形以及其他非多边形基元。 glStencilOp将前后模板状态设置为相同的值,就像调用glStencilOpSeparate并将face设置为GL_FRONT_AND_BACK一样。

glStencilOp/glStencilOpSeparate接受三个参数,指示在启用模板处理时存储的模板值会发生什么。如果模板测试失败,则不会更改像素的颜色或深度缓冲区,sfail指定模板缓冲区内容会发生什么。以下八个动作是可能的。

GL_KEEP

保持当前值。

GL_ZERO

将模板缓冲区值设置为0。

GL_REPLACE

将模板缓冲区值设置为ref,由glStencilFunc指定。

GL_INCR

增加当前模板缓冲区值。截断到最大的可表示无符号值。

GL_INCR_WRAP

增加当前模板缓冲区值。当递增最大可表示无符号值时,将模板缓冲区值包含到零。

GL_DECR

减少当前的模板缓冲区值。截断到0。

GL_DECR_WRAP

减少当前的模板缓冲区值。在将模板缓冲区值减小为零时,将模板缓冲区值包装到最大可表示无符号值。

GL_INVERT

按位反转当前模板缓冲区值。

模板缓冲区值被视为无符号整数。递增和递减时,值被钳位为[0,2^n - 1],其中n是查询GL_STENCIL_BITS返回的值。

glStencilOp/glStencilOpSeparate的另外两个参数指定模板缓冲区操作,这些操作取决于后续深度缓冲区测试是成功(dppass)还是失败(dpfail)(请参阅glDepthFunc)。使用与sfail相同的八个符号常量指定操作。请注意,如果没有深度缓冲区,或者未启用深度缓冲区,则会忽略dpfail。在这些情况下,sfail和dppass分别在模板测试失败和通过时指定模板操作。

注意

最初,模板测试被禁用。如果没有模板缓冲区,则不会发生模板修改,就好像模板测试总是通过一样。

错误

GL_INVALID_ENUM:face不是GL_FRONT,GL_BACK或GL_FRONT_AND_BACK

GL_INVALID_ENUM:sfail,dpfail或dppass是除八个定义的符号常量值之外的任何值。

相关Gets

glGet 参数GL_STENCIL_FUNC,GL_STENCIL_VALUE_MASK,GL_STENCIL_REF,GL_STENCIL_BACK_FUNC,GL_STENCIL_BACK_VALUE_MASK,GL_STENCIL_BACK_REF或GL_STENCIL_BITS

glIsEnabled 参数GL_STENCIL_TEST

另见

glBlendFunc,glDepthFunc,glEnable,glStencilFunc,glStencilFuncSeparate,glStencilMask,glStencilMaskSeparate

glTexImage2D- 指定一个二维的纹理图片

C规范

void glTexImage2D(GLenum target,

                                   GLint level, 

                                   GLint internalformat, 

                                   GLsizei width, 

                                   GLsizei height, 

                                   GLint border, 

                                   GLenum format, 

                                   GLenum type, 

                                   const GLvoid * data);

参数

target

指定活动纹理单元的目标纹理。必须是GL_TEXTURE_2D,GL_TEXTURE_CUBE_MAP_POSITIVE_X,GL_TEXTURE_CUBE_MAP_NEGATIVE_X,GL_TEXTURE_CUBE_MAP_POSITIVE_Y,GL_TEXTURE_CUBE_MAP_NEGATIVE_Y,GL_TEXTURE_CUBE_MAP_POSITIVE_Z,或GL_TEXTURE_CUBE_MAP_NEGATIVE_Z.

level

指定细节级别,0级表示基本图像,n级则表示Mipmap缩小n级之后的图像(缩小2^n)

internalformat

指定纹理内部格式,必须是下列符号常量之一:GL_ALPHA,GL_LUMINANCE,GL_LUMINANCE_ALPHA,GL_RGB,GL_RGBA。

width height

指定纹理图像的宽高,所有实现都支持宽高至少为64 纹素的2D纹理图像和宽高至少为16 纹素的立方体贴图纹理图像 。

border

指定边框的宽度。必须为0。

format

指定纹理数据的格式。必须匹配internalformat。下面的符号值被接受:GL_ALPHA,GL_RGB,GL_RGBA,GL_LUMINANCE,和GL_LUMINANCE_ALPHA。

type

指定纹理数据的数据类型。下面的符号值被接受:GL_UNSIGNED_BYTE,GL_UNSIGNED_SHORT_5_6_5,GL_UNSIGNED_SHORT_4_4_4_4,和GL_UNSIGNED_SHORT_5_5_5_1。

data

指定一个指向内存中图像数据的指针。

描述

纹理将指定纹理图像的一部分映射到纹理化为活动的每个图形基元上。当前片段着色器或顶点着色器使用内置纹理查找函数时,纹理处于活动状态。

要定义纹理图像,请调用glTexImage2D。参数描述纹理图像的参数,如高度,宽度,细节级别(详见glTexParameter)以及格式。最后三个参数描述了图像在内存中的表示方式。

数据从data一系列无符号字节或短路中读取,具体取决于type。当type是GL_UNSIGNED_BYTE,每个字节被解释为一个颜色分量。当type是以下当中的一个GL_UNSIGNED_SHORT_5_6_5,GL_UNSIGNED_SHORT_4_4_4_4或GL_UNSIGNED_SHORT_5_5_5_1,各无符号短值被解释为包含所有组件用于单个纹素,利用根据设置在颜色分量format。颜色分量被视为一个,两个,三个或四个值的组,也是基于format。组件组被称为纹理元素(纹素)。

width × height个纹素将从内存中读取(起始位置就是data的起始地址)。默认情况下,这些纹素是从相邻的内存位置获取的,除了在读取所有width个纹素后,读指针前进到下一个四字节边界。glReadPixels使用参数GL_UNPACK_ALIGNMENT指定四字节行对齐,并且可以将其设置为一个,两个,四个或八个字节。

第一个元素对应于纹理图像的左下角。后续元素从左到右通过纹理图像的最低行中的剩余纹素进行,然后在纹理图像的连续更高行中进行。 最后一个元素对应于纹理图像的右上角。

format决定data中每个元素的组成。 它可以是以下符号值之一:

GL_ALPHA

每个元素都是单个alpha分量。 GL将其转换为浮点并通过将rgb三通道赋值为0组装成RGBA元素。 然后将每个元素的值范围截断于[0,1]。

GL_RGB

每个元素都是RGB三元组。 GL将其转换为浮点,并通过为alpha赋值为1将其组装成RGBA元素。 然后将每个元素的值范围截断于[0,1]。

GL_RGBA

每个元素包含所有四个组件。 GL将其转换为浮点,然后将每个元素的值范围截断于[0,1]。

GL_LUMINANCE

每个元素是单个亮度值。 GL将其转换为浮点,然后通过将亮度值复制三次(红色,绿色和蓝色)并将为alpha赋值为1来将其组合成RGBA元素。然后将每个元素的值范围截断于[0,1]。

GL_LUMINANCE_ALPHA

每个元素是“亮度-α”对。 GL将其转换为浮点,然后通过将亮度值复制三次(红色,绿色和蓝色)将其组装成RGBA元素。 然后将每个元素的值范围截断于[0,1]。

颜色组件根据type转换为浮点。当type是GL_UNSIGNED_BYTE时,每个组件除以2 8 - 1。当type为GL_UNSIGNED_SHORT_5_6_5,GL_UNSIGNED_SHORT_4_4_4_4或GL_UNSIGNED_SHORT_5_5_5_1时,每个分量除以2 N-1,其中N是位域中的位数。

注意

internalformat必须匹配format。纹理图像处理期间不支持格式之间的转换。 type可以用作提示来指定所需的精度,但GL实现可以选择以任何内部分辨率存储纹理数组。

data可能是一个空指针。在这种情况下,会分配纹理内存以适应宽度width和高度的纹理height。然后你可以下载子文本来初始化这个纹理内存。如果用户尝试将纹理图像的未初始化部分应用于基元,则图像未定义。

glTexImage2D是用来指定 由glActiveTexture指定的 纹理单元 是二维纹理还是立体贴图纹理的。

错误

GL_INVALID_ENUM:如果target不是GL_TEXTURE_2D,GL_TEXTURE_CUBE_MAP_POSITIVE_X, GL_TEXTURE_CUBE_MAP_NEGATIVE_X,GL_TEXTURE_CUBE_MAP_POSITIVE_Y, GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, GL_TEXTURE_CUBE_MAP_POSITIVE_Z,或 GL_TEXTURE_CUBE_MAP_NEGATIVE_Z。

GL_INVALID_ENUM:如果format或type不是可接受的值。

GL_INVALID_VALUE:如果target是立方体贴图中的一个2维贴图,但是宽和高却不相等。(立方体贴图每个维度都是相等的)

GL_INVALID_VALUE:level比0小。

GL_INVALID_VALUE:如果level大于log以2为低⁡max的对数。(max是target为GL_TEXTURE_2D时GL_MAX_TEXTURE_SIZE的返回值,或者当target不是GL_TEXTURE_2D时GL_MAX_CUBE_MAP_TEXTURE_SIZE的返回值)

GL_INVALID_VALUE:当internalformat是一个不可接收的值。

GL_INVALID_VALUE:当height或width的值value或者当target为GL_TEXTURE_2D时value大于GL_MAX_TEXTURE_SIZE,或者当target不为GL_TEXTURE_2D时value大于GL_MAX_CUBE_MAP_TEXTURE_SIZE。

GL_INVALID_VALUE:当border的值不为0时。

GL_INVALID_OPERATION:format和internalformat不匹配。

GL_INVALID_OPERATION:type是GL_UNSIGNED_SHORT_5_6_5但是format不是GL_RGB。

GL_INVALID_OPERATION:type是GL_UNSIGNED_SHORT_4_4_4_4或者GL_UNSIGNED_SHORT_5_5_5_1但format不是GL_RGBA。

相关Gets

glGet GL_MAX_TEXTURE_SIZE 或GL_MAX_CUBE_MAP_TEXTURE_SIZE

另见

glActiveTexture,glCompressedTexImage2D,glCompressedTexSubImage2D,glCopyTexImage2D,glCopyTexSubImage2D,glPixelStorei,glTexSubImage2D,glTexParameter

glTexParameter - 设置纹理参数

C规范

void glTexParameterf(GLenum target,GLenum pname,GLfloat param);

void glTexParameteri(GLenum target,GLenum pname,GLint param);

void glTexParameterfv(GLenum target,GLenum pname,const GLfloat * params);

void glTexParameteriv(GLenum target,GLenum pname,const GLint * params);

参数

target

指定之前激活了的纹理要绑定到的一个目标。必须是GL_TEXTURE_2D 或GL_TEXTURE_CUBE_MAP。

pname

指定一个单值纹理参数的符号名,pname可以是下列值之一:GL_TEXTURE_MIN_FILTER GL_TEXTURE_MAG_FILTER GL_TEXTURE_WRAP_S GL_TEXTURE_WRAP_T。

param

指定pname的值。

params

指定pname存储的值的数组的指针。

描述

纹理贴图是一种将图像应用到对象表面的技术,就像图像是贴花或玻璃纸收缩包装一样。 图像在纹理空间中创建,具有(s,t)坐标系。 纹理是二维或立方体映射的图像和一组参数,用于确定如何从图像中导出样本。

glTexParameter将params中的一个或多个值分配给指定为pname的纹理参数。target定义激活的纹理单元的目标纹理,可以是GL_TEXTURE_2D 或GL_TEXTURE_CUBE_MAP。pname中接受以下符号:

GL_TEXTURE_MIN_FILTER

只要纹理贴图比要贴的区域大,就会使用这个纹理缩小功能。 有六个定义的缩小功能。 其中两个值使用最近的一个或最近的四个纹理元素来计算纹理值。 其他四个值用于mipmap。

mipmap是一组有序的数组,以逐渐降低的分辨率表示相同的图像。如果纹理具有2 ^ n * 2 ^ m的维度,则存在max(n,m)+ 1个mipmap。第一个mipmap就是是原始纹理,尺寸为2 ^ n * 2 ^ m。每个后续的mipmap具有维度2 ^(k-1)* 2 ^(l-1),其中2 ^ k * 2 ^ l是前一个mipmap的维度,直到k = 0或l = 0。此时,后续的mipmap具有尺寸1 * 2 ^(l - 1)或2 ^(k - 1)* 1,直到最终的mipmap,其尺寸为1 * 1。

通过调用glTexImage2D,glCompressedTexImage2D,glCopyTexImage2D设置level参数来定义mipmap的级别。0级是原始纹理; level max(n,m)是最终的1 * 1 mipmap。

params提供的缩小采样功能,可选参数如下:

GL_NEAREST

临近采样,返回与纹理像素的中心最接近(在曼哈顿距离内)的纹理元素的值。

GL_LINEAR

线性采样,返回最接近被纹理像素中心的四个纹理元素的加权平均值。

GL_NEAREST_MIPMAP_NEAREST

选择最接近匹配纹理像素大小的mipmap,并使用GL_NEAREST标准(最接近像素中心的纹理元素)来生成纹理值。

GL_LINEAR_MIPMAP_NEAREST

选择最接近匹配纹理像素大小的mipmap,并使用GL_LINEAR标准(最接近像素中心的四个纹理元素的加权平均值)来生成纹理值。

GL_NEAREST_MIPMAP_LINEAR

选择与纹理像素大小最匹配的两个mipmap,并使用GL_NEAREST标准(最接近像素中心的纹理元素)从每个mipmap生成纹理值。 最终纹理值是这两个值的加权平均值。

GL_LINEAR_MIPMAP_LINEAR

选择与纹理像素大小最匹配的两个mipmap,并使用GL_LINEAR标准(最接近像素中心的四个纹理元素的加权平均值)从每个mipmap生成纹理值。 最终纹理值是这两个值的加权平均值。

随着在缩小过程中对更多纹理元素进行采样,将会出现更少的锯齿伪像。 虽然GL_NEAREST和GL_LINEAR缩小函数可以比其他四个更快,但它们仅采样一个或四个纹理元素来确定正在渲染的像素的纹理值,并且会产生莫尔条纹或粗糙的过渡。 GL_TEXTURE_MIN_FILTER的初始值为GL_NEAREST_MIPMAP_LINEAR。

GL_TEXTURE_MAG_FILTER

当纹理化的像素映射到小于或等于一个纹理元素的区域时,使用纹理放大功能。 它将纹理放大功能设置为GL_NEAREST或GL_LINEAR(见下文)。 GL_NEAREST通常比GL_LINEAR快,但它会生成边缘更清晰的纹理图像,因为纹理元素之间的过渡不那么平滑。 GL_TEXTURE_MAG_FILTER的初始值为GL_LINEAR。

GL_NEAREST

临近采样,返回与纹理像素的中心最接近(在曼哈顿距离内)的纹理元素的值。

GL_LINEAR

线性采样,返回最接近被纹理像素中心的四个纹理元素的加权平均值。

GL_TEXTURE_WRAP_S

将纹理坐标s的wrap参数设置为GL_CLAMP_TO_EDGE,GL_MIRRORED_REPEAT或GL_REPEAT。GL_CLAMP_TO_EDGE会是坐标截取到[1/2N,1-1/2N]其中N是截取方向上纹理的大小。GL_REPEAT会导致坐标的整数部分被忽略,GL只使用小数部分,从而创建一个重复模式。如果s的整数部分是偶数,则GL_MIRRORED_REPEAT使s坐标设置为纹理坐标的小数部分,而如果这个整数部分是奇数的话,纹理坐标则被设置为1-frac(s),其中frac(s)代表s的小数部分。初始状态下,GL_TEXTURE_WRAP_S被设置为GL_REPEAT。

GL_TEXTURE_WRAP_T

将纹理坐标t的wrap参数设置为GL_CLAMP_TO_EDGE,GL_MIRRORED_REPEAT或GL_REPEAT。 请参阅GL_TEXTURE_WRAP_S下的讨论。初始状态下,GL_TEXTURE_WRAP_S被设置为GL_REPEAT。

注意

假设从片段着色器或顶点着色器访问纹理,并将GL_TEXTURE_MIN_FILTER设置为mipmaps的其中一个一个。如果当前定义的纹理图像的尺寸(之前已经调用了glTexImage2D,glCompressedTexImage2D或glCopyTexImage2D)不遵循mipmap的正确顺序(如上所述),或者定义的纹理图像少于所需的纹理图像,或者 纹理图像用不同的格式或类型定义,那么纹理图像单元将返回(R,G,B,A)=(0,0,0,1)。

同样,如果纹理图像的宽度或高度不是2的幂,并且 GL_TEXTURE_MIN_FILTER设置为mipmap的功能之一或者GL_TEXTURE_WRAP_S或GL_TEXTURE_WRAP_T未设置为GL_CLAMP_TO_EDGE,则纹理图像单元将返回(R ,G,B,A)=(0,0,0,1)。

glTexParameter为 通过调用glActiveTexture指定激活的纹理单元绑定纹理参数

错误

GL_INVALID_ENUM :target或param不是预定的值。

GL_INVALID_ENUM :params应该有一个定义的符号常量值(基于pname的值)但却没有。

相关Gets

glGetTexParameter

另见

glActiveTexture,glBindTexture,glCopyTexImage2D,glCopyTexSubImage2D,glPixelStorei,glTexImage2D,glTexSubImage2D

glTexSubImage2D - 指定二维纹理子图像

C规范

void glTexSubImage2D(GLenum target,

                                          GLint level,

                                          GLint xoffset,

                                          GLint yoffset,

                                          GLsizei width,

                                          GLsizei height,

                                          GLenum format,

                                          GLenum type,

                                          const GLvoid * data);

参数

target

指定活动纹理单元的目标纹理。 必须是GL_TEXTURE_2D,GL_TEXTURE_CUBE_MAP_POSITIVE_X,GL_TEXTURE_CUBE_MAP_NEGATIVE_X,GL_TEXTURE_CUBE_MAP_POSITIVE_Y,GL_TEXTURE_CUBE_MAP_NEGATIVE_Y,GL_TEXTURE_CUBE_MAP_POSITIVE_Z或GL_TEXTURE_CUBE_MAP_NEGATIVE_Z。

level

指定详细级别编号。 0级是基本图像级别。 级别n是第n个mipmap缩小图像。

xoffset

指定纹理数组中x方向的纹素偏移。

yoffset

指定纹理数组中y方向的纹素偏移。

width

指定纹理子图像的宽度。

height

指定纹理子图像的高度。

format

指定像素数据的格式。 接受以下符号值:GL_ALPHA,GL_RGB,GL_RGBA,GL_LUMINANCE和GL_LUMINANCE_ALPHA。

type

指定像素数据的数据类型。 接受以下符号值:GL_UNSIGNED_BYTE,GL_UNSIGNED_SHORT_5_6_5,GL_UNSIGNED_SHORT_4_4_4_4和GL_UNSIGNED_SHORT_5_5_5_1。

data

指定指向内存中图像数据的指针。

描述

纹理将指定纹理图像的一部分映射到纹理处于活动状态的每个图形基元上。 当前片段着色器或顶点着色器使用内置纹理查找功能时,纹理处于活动状态。

glTexSubImage2D重新定义了现有二维纹理图像的连续子区域。data引用的纹素将现有纹理数组的部分替换为x索引xoffset和xoffset + width - 1(含),y索引yoffset和yoffset + height - 1(含)。该区域可能不包括纹理数组范围之外的任何最初指定的那样的纹素。指定宽度或高度为零的子纹理不是错误的,但这样的规范是没有效果的。

注意

由glPixelStorei设置的存储参数GL_UNPACK_ALIGNMENT会影响从客户端内存中读取数据的方式。 有关说明,请参阅glPixelStorei。

glTexSubImage2D为当前纹理单元指定二维或立方体贴图子纹理,由glActiveTexture指定。

错误

GL_INVALID_ENUM :如果target不是GL_TEXTURE_2D,GL_TEXTURE_CUBE_MAP_POSITIVE_X,GL_TEXTURE_CUBE_MAP_NEGATIVE_X,GL_TEXTURE_CUBE_MAP_POSITIVE_Y,GL_TEXTURE_CUBE_MAP_NEGATIVE_Y,GL_TEXTURE_CUBE_MAP_POSITIVE_Z或GL_TEXTURE_CUBE_MAP_NEGATIVE_Z。

GL_INVALID_ENUM :如果format或type不是可接受的值。

GL_INVALID_VALUE :level<0

GL_INVALID_VALUE :level>log以2为底,max的对数,其中max为GL_MAX_TEXTURE_SIZE返回的值

GL_INVALID_VALUE :xoffset < 0 , xoffset + width > w , yoffset < 0 , or yoffset + height > h,其中w是宽度,h是要修改的纹理图像的高度。

GL_INVALID_VALUE :如果width或height小于0。

GL_INVALID_OPERATION :如果纹理数组尚未由之前的glTexImage2D或glCopyTexImage2D操作定义(其内部格式与glTexSubImage2D的格式匹配)。

GL_INVALID_OPERATION:如果type为GL_UNSIGNED_SHORT_5_6_5且格式不是GL_RGB。

GL_INVALID_OPERATION :如果type为GL_UNSIGNED_SHORT_4_4_4_4或GL_UNSIGNED_SHORT_5_5_5_1且格式不是GL_RGBA。

相关Gets

glGet 参数GL_MAX_TEXTURE_SIZE 或GL_MAX_CUBE_MAP_TEXTURE_SIZE

另见

glActiveTexture,glCompressedTexImage2D,glCompressedTexSubImage2D,glCopyTexImage2D,glCopyTexSubImage2D,glPixelStorei,glTexImage2D,glTexParameter

glUniform - 指定当前程序对象的统一变量的值

C规范

void glUniform1f( GLint location, GLfloat v0);
void glUniform2f( GLint location, GLfloat v0, GLfloat v1);
void glUniform3f( GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
void glUniform4f( GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
void glUniform1i( GLint location, GLint v0);
void glUniform2i( GLint location,GLint v0,GLint v1);
void glUniform3i( GLint location,GLint v0,GLint v1,GLint v2);
void glUniform4i( GLint location,GLint v0,GLint v1,GLint v2,GLint v3);

void glUniform1fv( GLint location,GLsizei count,const GLfloat *value);
void glUniform2fv( GLint location,GLsizei count,const GLfloat *value);
void glUniform3fv( GLint location,GLsizei count,const GLfloat *value);
void glUniform4fv( GLint location,GLsizei count,const GLfloat *value);
void glUniform1iv( GLint location,GLsizei count,const GLint *value);
void glUniform2iv( GLint location,GLsizei count,const GLint *value);
void glUniform3iv( GLint location, GLsizei count, const GLint *value);
void glUniform4iv( GLint location, GLsizei count, const GLint *value);

void glUniformMatrix2fv( GLint location,GLsizei countM,GLboolean transpose,const GLfloat *valueM);
void glUniformMatrix3fv( GLint location,GLsizei countM,GLboolean transpose,const GLfloat *valueM);
void glUniformMatrix4fv( GLint location,GLsizei countM,GLboolean transpose, const GLfloat *valueM);

参数

location

指定要修改的统一变量的位置。

v0,v1,v2,v3

指定要用于指定统一变量的新值。

count

指定要修改的元素数。 如果目标统一变量不是数组,则此值应为1;如果是数组,则应为1或更大。

value

指定指向将用于更新指定统一变量的count值数组的指针。

countM

指定要修改的矩阵数。 如果目标统一变量不是矩阵数组,则该值应为1;如果是矩阵数组,则应为1或更大。

transpose

指定在将值加载到统一变量时是否转置矩阵。 必须是GL_FALSE。

valueM

指定指向将用于更新指定统一变量的countM值数组的指针。

描述

glUniform修改统一变量或统一变量数组的值。要被修改值的location是由glGetUniformLocation返回的值。glUniform通过调用glUseProgram对程序对象进行操作,该程序对象是当前状态的一部分。

命令glUniform {1 | 2 | 3 | 4} {f | i}用于使用作为参数传递的值来更改由location指定的统一变量的值。命令中指定的数字应该与指定的统一变量的数据类型中的组件数相匹配(例如,1表示float,int,bool; 2表示vec2,ivec2,bvec2等)。后缀f表示正在传递浮点值;后缀i表示正在传递整数值,并且此类型还应与指定的统一变量的数据类型匹配。应使用此函数的i变体为定义为int,ivec2,ivec3,ivec4或这些变量的数组提供统一变量的值。f变量应该用于为float,vec2,vec3,vec4或这些类型的数组的统一变量提供值。 i或f变体可用于为bool,bvec2,bvec3,bvec4或这些的数组的均匀变量提供值。如果输入值为0或0.0f,则uniform变量将设置为false,否则将设置为true。

程序对象成功链接时,程序对象中定义的所有活动统一变量都初始化为0。它们保留通过调用glUniform分配给它们的值,直到程序对象上的下一个成功链接操作再次初始化为0时为止。

命令glUniform {1 | 2 | 3 | 4} {f | i} v可用于修改单个统一变量或统一变量数组。这些命令将个数和指针传递给要加载到统一变量或统一变量数组中的值。如果修改单个统一变量的值,则应使用1的计数,并且可以使用1或更大的计数来修改整个数组或数组的一部分。当从均匀变量数组中的任意位置m开始加载n个元素时,数组中的元素m + n-1将被替换为新值。如果m + n - 1大于统一变量数组的大小,则将忽略超出数组末尾的所有数组元素的值。命令名称中指定的数字表示每个元素的值的组件数,它应该与指定的统一变量的数据类型中的组件数相匹配(例如,1表示float,int,bool; 2表示vec2,ivec2,bvec2等)。命令名称中指定的数据类型必须与指定的统一变量的数据类型匹配,如前面对glUniform {1 | 2 | 3 | 4} {f | i}所述。

对于统一变量数组,数组的每个元素都被认为是命令名称中指示的类型(例如,glUniform3f或glUniform3fv可用于加载vec3类型的统一变量数组)。要修改的统一变量数组的元素数由count指定

命令glUniformMatrix {2 | 3 | 4} fv用于修改矩阵或矩阵数组。命令名称中的数字被解释为矩阵的维度。数字2表示2×2矩阵(即4个值),数字3表示3×3矩阵(即9个值),数字4表示4×4矩阵(即16个值)。假设每个矩阵按列主要顺序提供。 countM参数表示要传递的矩阵数。如果修改单个矩阵的值,则应使用计数1,并且可以使用大于1的计数来修改矩阵数组.

注意

glUniform1i和glUniform1iv是唯一可用于加载定义为采样器类型的统一变量的两个函数。使用任何其他函数加载采样器将导致GL_INVALID_OPERATION错误。

如果count\countM大于1且指示的统一变量不是数组,则会生成GL_INVALID_OPERATION错误,并且指定的统一变量将保持不变。

除了前面的异常之外,如果着色器中定义的统一变量的类型和大小与用于加载其值的命令名称中指定的类型和大小不匹配,则将生成GL_INVALID_OPERATION错误并生成指定的统一变量将保持不变。

如果location是一个非-1的值,并且它不表示当前程序对象中的有效统一变量位置,则将生成错误,并且不会对当前程序对象的统一变量存储进行任何更改。如果location等于-1,则将默认忽略传入的数据,并且不会更改指定的统一变量。

错误

GL_INVALID_OPERATION:没有当前程序对象

GL_INVALID_OPERATION:着色器中声明的统一变量的大小与glUniform命令指示的大小不匹配

GL_INVALID_OPERATION :如果此函数的整数变量之一用于加载float,vec2,vec3,vec4或其数组的统一变量,或者如果使用此函数的某个浮点变量来加载统一int,ivec2,ivec3或ivec4类型的变量,或者这些变量的数组。

GL_INVALID_VALUE:count<0

GL_INVALID_VALUE:transpose不是GL_FALSE

GL_INVALID_OPERATION:count大于1且指示的统一变量不是数组变量

GL_INVALID_OPERATION:使用glUniform1i和glUniform1iv之外的命令加载采样器

相关Gets

glGet 参数GL_CURRENT_PROGRAM

glGetActiveUniform 带有程序对象的句柄和活动的统一变量的索引

glGetUniform 程序对象的句柄和统一变量的位置

glGetUniformLocation 包含程序对象的句柄和统一变量的名称

另见

glLinkProgram,glUseProgram

glUseProgram- 使用程序对象作为当前渲染状态的一部分

C规范

void glUseProgram(GLuint program);

参数

program

指定程序对象的句柄,该程序对象的可执行文件将用作当前渲染状态的一部分。

描述

glUseProgram使用程序对象program作为当前渲染状态的一部分。通过使用glAttachShader成功将着色器对象附加到程序对象,使用glCompileShader成功编译着色器对象,并成功链接程序对象与glLinkProgram,之后就可以在程序对象中创建每个阶段的可执行文件。

程序对象将会包含一个可执行文件,该文件将会运行顶点(类型为GL_VERTEX_SHADER 的着色器对象)和片元(类型为GL_FRAGMENT_SHADER 的着色器对象)处理器(前提是这两个着色器都成功的编译并被链接到程序对象上了)。

在使用程序对象时,应用程序可以自由修改附着的着色器对象,编译附着的着色器对象,附着着色器对象以及分离或删除着色器对象。这些操作都不会影响属于当前状态的可执行文件。但是,如果链接操作成功,则重新链接当前正在使用的程序对象将安装程序对象作为当前渲染状态的一部分(请参阅glLinkProgram)。如果当前正在使用的程序对象重新链接失败,其链接状态将设置为GL_FALSE,但可执行文件和关联状态将保持当前状态的一部分,直到后续调用glUseProgram将其从使用中删除。从使用中删除后,在成功重新链接之前,它不能成为当前状态的一部分。

如果program为0,则当前呈现状态引用无效的程序对象,并且会使得任何glDrawArrays或glDrawElements命令的顶点和片段着色器执行的结果未定义。

注意

与纹理对象和缓冲区对象一样,只要上下文的服务器端共享相同的地址空间,程序对象的名称空间就可以在一组上下文中共享。如果名称空间跨上下文共享,则也会共享任何附着对象和与这些附着对象关联的数据。

当从不同的执行线程访问对象时,应用程序负责跨API调用提供同步。

错误

GL_INVALID_VALUE :如果program是0,或者不是OpenGL生成的值。

GL_INVALID_OPERATION :program不是程序对象

GL_INVALID_OPERATION :如果program不能成为当前状态的一部分。

相关Gets

glGet 参数GL_CURRENT_PROGRAM

glGetActiveAttrib 使用有效的程序对象和活动属性变量的索引

glGetActiveUniform 使用有效的程序对象和活动的统一变量的索引

glGetAttachedShaders 使用有效的程序对象

glGetAttribLocation 使用有效的程序对象和属性变量的名称

glGetProgramiv 使用有效的程序对象和要查询的参数

glGetProgramInfoLog 使用有效的程序对象

glGetUniform 使用有效的程序对象和统一变量的位置

glGetUniformLocation 使用有效的程序对象和统一变量的名称

glIsProgram

另见

glAttachShader,glBindAttribLocation,glBindAttribLocation,glCreateProgram,glDeleteProgram,glDeleteShader,glLinkProgram,glGetUniform ,glValidateProgram,glVertexAttrib

glValidateProgram - 验证程序对象

C规范

void glValidateProgram(GLuint program);

参数

program

指定要验证的程序对象的句柄。

描述

glValidateProgram检查程序中包含的可执行文件是否可以在当前的OpenGL状态下执行。验证过程生成的信息将存储在程序的信息日志中。验证信息可以由空字符串组成,或者它可以是包含有关当前程序对象如何与当前OpenGL状态的其余部分交互的信息的字符串。这为OpenGL实现者提供了一种方式,可以传达有关当前程序效率低下,次优,无法执行等原因的更多信息。

验证操作的状态将存储为程序对象状态的一部分。如果验证成功,则此值将设置为GL_TRUE,否则将设置为GL_FALSE。可以通过使用参数program和GL_VALIDATE_STATUS调用glGetProgramiv来查询它。如果验证成功,则保证在给定当前状态的情况下执行程序。否则,程序将保证不执行。

此功能通常仅在应用程序开发期间有用。存储在信息日志中的信息字符串完全取决于实现;因此,应用程序不应期望不同的OpenGL实现生成相同的信息字符串。

注意

如果当前程序对象中的任何两个活动采样器具有不同类型,但是引用相同的纹理图像单元,则glDrawArrays或glDrawElements将生成错误GL_INVALID_OPERATION。

应用程序在发出渲染命令时捕获这些错误可能很困难或导致性能下降(这是一个很耗时的操作,所以最好只在调试的时候调用)。因此,建议应用程序调用glValidateProgram以在应用程序开发期间检测这些问题。

错误

GL_INVALID_VALUE:program不是OpenGL生成的值

GL_INVALID_OPERATION:program不是程序对象

相关Gets

glGetProgramiv 参数GL_VALIDATE_STATUS

glGetProgramInfoLog 参数program

glIsProgram

另见

glLinkProgram,glLinkProgram

glVertexAttrib - 指定通用顶点属性的值

C规范

void glVertexAttrib1f( GLuint index,GLfloat v0);
void glVertexAttrib2f( GLuint index,GLfloat v0, GLfloat v1);
void glVertexAttrib3f( GLuint index,GLfloat v0,GLfloat v1,GLfloat v2);
void glVertexAttrib4f( GLuint index,GLfloat v0,GLfloat v1,GLfloat v2,GLfloat v3);
void glVertexAttrib1fv( GLuint index,const GLfloat *v);
void glVertexAttrib2fv( GLuint index,const GLfloat *v);
void glVertexAttrib3fv( GLuint index,const GLfloat *v);
void glVertexAttrib4fv( GLuint index,const GLfloat *v);

参数

index

指定要修改的通用顶点属性的索引。

v0,v1,v2,v3

指定要用于指定顶点属性的新值。

v

指定指向要用于通用顶点属性的值数组的指针。

描述

glVertexAttrib入口点系列允许应用程序在编号位置传递通用顶点属性。

通用属性定义为组织为数组的四组件值。此数组的第一个条目编号为0,并且数组的大小由依赖于实现的符号常量GL_MAX_VERTEX_ATTRIBS指定。可以使用glVertexAttrib调用修改此数组的各个元素,该调用指定要修改的元素的索引以及该元素的值。

这些命令可用于指定index指定的通用顶点属性的一个,两个,三个或全部四个组件。命令名称中的1表示只传递一个值,它将用于修改通用顶点属性的第一个组件。第二个和第三个组件将设置为0,第四个组件将设置为1。同样,命令名称中的2表示为前两个组件提供值,第三个组件将设置为0 ,第四个组件将设置为1.命令名称中的3表示为前三个组件提供的值,第四个组件将设置为1,而名称中的4表示提供了值对于所有四个组件。

字母f表示参数的类型为float。当v附加到名称时,命令可以获取指向浮点数组的指针。

允许OpenGL ES着色语言属性变量的类型为mat2,mat3或mat4。可以使用glVertexAttrib入口点加载这些类型的属性。矩阵必须按列主要顺序加载到连续的通用属性槽中,每个通用属性槽中有一列矩阵。

在顶点着色器中声明的用户定义的属性变量可以通过调用glBindAttribLocation绑定到通用属性索引。这允许应用程序在顶点着色器中使用描述性变量名称。对指定通用顶点属性的后续更改将立即反映为对顶点着色器中相应属性变量的更改。

顶点着色器中的通用顶点属性索引和用户定义的属性变量之间的绑定是程序对象状态的一部分,但通用顶点属性的当前值不是。每个通用顶点属性的值是当前状态的一部分,即使使用了不同的程序对象,它也会被维护。

应用程序可以自由修改未绑定到命名顶点着色器属性变量的通用顶点属性。这些值仅作为当前状态的一部分进行维护,顶点着色器不会访问这些值。如果在顶点着色器执行时未更新绑定到顶点着色器中的属性变量的通用顶点属性,则顶点着色器将重复使用当前顶点属性的当前值。

注意

应用程序可以将多个属性名称绑定到同一个通用顶点属性索引。这称为别名,只有在顶点着色器中只有一个别名属性变量处于活动状态时,或者如果没有通过顶点着色器的路径消耗多个别名到同一位置的属性时,才允许使用别名。不需要OpenGL实现来进行错误检查以检测别名,允许它们假设不会出现别名,并且允许它们采用仅在没有别名的情况下才能工作的优化。

错误

GL_INVALID_VALUE :index>=GL_MAX_VERTEX_ATTRIBS

相关Gets

glGet 参数GL_CURRENT_PROGRAM

glGetActiveAttrib 参数program和活动属性变量的索引

glGetAttribLocation 参数program和属性变量名

glGetVertexAttrib 参数GL_CURRENT_VERTEX_ATTRIB和index

另见

glBindAttribLocation,glVertexAttribPointer

glVertexAttribPointer - 定义通用顶点属性数据的数组

C规范

void glVertexAttribPointer(GLuint index,

                                       GLint size,

                                       GLenum type,

                                       GLboolean normalized,

                                       GLsizei stride,

                                       const GLvoid * pointer);

参数

index

指定要修改的通用顶点属性的索引。

size

指定每个通用顶点属性的组件数。 必须为1,2,3或4.初始值为4。

type

指定数组中每个组件的数据类型。 接受符号常量GL_BYTE,GL_UNSIGNED_BYTE,GL_SHORT,GL_UNSIGNED_SHORT,GL_FIXED或GL_FLOAT。 初始值为GL_FLOAT。

normalized

指定在访问定点数据值时是应将其标准化(GL_TRUE)还是直接转换为定点值(GL_FALSE)。

stride

指定连续通用顶点属性之间的字节偏移量。 如果stride为0,则通用顶点属性被理解为紧密打包在数组中的。 初始值为0。

pointer

指定指向数组中第一个通用顶点属性的第一个组件的指针。 初始值为0。

描述

glVertexAttribPointer指定索引index处的通用顶点属性数组的位置和数据格式,以便在渲染时使用。size指定每个属性的组件数,并且必须为1,2,3或4。type指定每个组件的数据类型,stride指定从一个属性到下一个属性的字节跨度,允许将顶点和属性打包到单个数组中或存储在单独的数组中。如果设置为GL_TRUE,则normalized表示以整数格式存储的值将被映射到范围[-1,1](对于有符号值)或[0,1](对于无符号值),当它们被访问并转换为 浮点。 否则,值将直接转换为浮点数而不进行标准化。

如果在指定通用顶点属性数组时将非零命名VBOid绑定到GL_ARRAY_BUFFER目标(请参阅glBindBuffer),则将pointer视为VBO的数据存储中的字节偏移量。 此外,VBO绑定(GL_ARRAY_BUFFER_BINDING)被保存为索引index的通用顶点属性数组客户端状态(GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING)。

指定通用顶点属性数组时,除了当前顶点数组VBO绑定外,还将size,type,normalized,stride和pointer保存为客户端状态。

要启用和禁用通用顶点属性数组,请使用index调用glEnableVertexAttribArray和glDisableVertexAttribArray。 如果启用,则在调用glDrawArrays或glDrawElements时使用通用顶点属性数组。

注意

每个通用顶点属性数组最初都被禁用,并且在调用glDrawElements或glDrawArrays时不会被访问。

glVertexAttribPointer通常在客户端实现。

错误

GL_INVALID_ENUM:type不是可接收的值;

GL_INVALID_VALUE:index大于或等于GL_MAX_VERTEX_ATTRIBS。

GL_INVALID_VALUE:size的值不是1,2,3,4

GL_INVALID_VALUE:stride是负数

相关Gets

glGet 参数GL_MAX_VERTEX_ATTRIBS

glGetVertexAttrib 参数index和GL_VERTEX_ATTRIB_ARRAY_ENABLED

glGetVertexAttrib 参数index和GL_VERTEX_ATTRIB_ARRAY_SIZE

glGetVertexAttrib 参数index和GL_VERTEX_ATTRIB_ARRAY_TYPE

glGetVertexAttrib 参数index和GL_VERTEX_ATTRIB_ARRAY_NORMALIZED

glGetVertexAttrib 参数index和GL_VERTEX_ATTRIB_ARRAY_STRIDE

glGetVertexAttrib 参数index和GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING

glGet 参数GL_ARRAY_BUFFER_BINDING

glGetVertexAttribPointerv 参数index和GL_VERTEX_ATTRIB_ARRAY_POINTER

另见

glBindAttribLocation,glBindBuffer,glEnableVertexAttribArray,glDisableVertexAttribArray,glDrawElements,glDrawArrays,glVertexAttrib

glViewport- 设置视口

C规范

void glViewport(GLint x,GLint y,GLsizei width,GLsizei height);

参数

x, y

指定视口矩形的左下角坐标,以像素为单位,初始值为(0,0)。

width, height

指定视口的宽高,当一个GLContext第一次绑定到一个窗口时,width, height就会被指定为该窗口的宽高。

描述

glViewport指定x和y从标准化设备坐标到窗口坐标的一个仿射变化。设(Xnd,Ynd)是标准化设备坐标(-1.0~1.0,0.0在设备中间),则窗口坐标(Xw,Yw)可以由以下公式推出:

视口宽高会被默认限制到一定的范围内,视具体实现而定,可以通过glGet变量GL_MAX_VIEWPORT_DIMS得到。

错误

GL_INVALID_VALUE:width或height是负数

相关Gets

glGet 变量GL_MAX_VIEWPORT_DIMS

glGet 变量GL_VIEWPORT

另见

glDepthRangef