Opengl es 什么';glClient***和gl***的区别是什么?
我在学英语。有许多成对函数,如Opengl es 什么';glClient***和gl***的区别是什么?,opengl-es,Opengl Es,我在学英语。有许多成对函数,如glClientActiveTexture/glActiveTexture。 他们之间有什么区别?(尤其是openGL中的glClientActivityTexture): glActiveTexture glActiveTexture选择后续纹理状态调用将影响的纹理单元 glClientActiveTexture选择要由glTexCoordPointer修改的顶点数组客户端状态参数 一方面,glClientActiveTexture用于控制后续的glTexCo
glClientActiveTexture
/glActiveTexture
。
他们之间有什么区别?(尤其是openGL中的glClientActivityTexture
):
- glActiveTexture glActiveTexture选择后续纹理状态调用将影响的纹理单元
- glClientActiveTexture选择要由glTexCoordPointer修改的顶点数组客户端状态参数
一方面,glClientActiveTexture用于控制后续的glTexCoordPointer调用(使用顶点数组)。另一方面,glActiveTexture影响对glTexCoord调用的后续调用(由显示列表或即时模式使用(在OpenGL ES(AFAIK)中不存在))。除了Kenji的答案之外,还有更详细的内容(请记住,在ES中并非OpenGL中的所有内容都可用) 术语 但首先,我们需要一些快速的术语来避免所有纹理的东西之间的混淆(出于同样的原因过于简化)
- 纹理单元:一组纹理目标(例如
),通过GL\u Texture\u 2D
glActiveTexture
- 纹理目标:纹理的绑定点。它指定一种纹理类型(例如2D)。它通过
设置glBindTexture
- 纹理:一种包含纹理图像的texel(图像数据,例如像素)和参数(例如包裹和过滤模式)的东西。它由一个键/name/ID标识,一个新的键/name/ID可以通过
获得,它实际上是通过(首次调用)glGenTextures
及其名称实例化的glBindTexture
glActiveTexture
用于指定后续调用glBindTexture
将应用于哪个纹理单元,以及glBind纹理
用于指定哪个纹理绑定到活动纹理单元上的哪个目标
由于您有多个纹理,您可能也有多个texcoord。因此,您需要某种方式与OpenGL/GLSL通信,一组texcoord用于一个纹理/单元,另一组texcoord用于另一个纹理/单元。通常,您可以通过在顶点和相应着色器中具有多个texcoord属性来实现此目的。如果如果您使用的是依赖于着色器中预定义顶点属性的旧渲染技术,那么您必须做一些不同的事情,这就是glClientActiveTexture
的原因。之所以会产生混淆,是因为它需要一个纹理单位参数,但它与的glActiveTexture
没有相同的含义激活状态机中的纹理单元,但它指定哪个预定义的gl\u MultiTexCoord
属性(在着色器中)将生成后续调用glTexCoordPointer
中描述的texcoords
简而言之,glActiveTexture
用于纹理更改,glClientActiveTexture
用于texcoord更改。使用哪种API调用取决于使用哪种渲染技术:
设置哪些纹理单元将受到后续上下文状态调用的影响,例如glActiveTexture
。它不会影响glBindTexture
、glMultiTexCoord
或glTexCoord
,因为这些与texcoords有关,而不是纹理glTexCoordPointer
设置纹理单元后续顶点数组状态调用应用于哪个纹理单元,例如glclientactivatetexture
。它不会影响glTexCoordPointer
,因为这与纹理有关,而与texcoords无关。glBindTexture
- 它也不影响使用DSA通过其目标参数选择纹理单元的
,也不影响以纹理单元0为目标的glMultiTexCoord
(glTexCoord
)。这几乎只剩下GL_TEXTURE0
作为它影响的对象,而glTexCoordPointer
被弃用,取而代之的是glTexCoordPointer
,它不需要glvertexattributepointer
。正如您所看到的,glClientActiveTexture
不是最有用的,因此也被弃用相关的glWhateverPointer调用glClientActiveTexture
- 它也不影响使用DSA通过其目标参数选择纹理单元的
- 您将使用
+glActiveTexture
和all技术将每个纹理绑定到特定的纹理单元上。当您使用不带glBindTexture
的DrawArray/DrawElements时,您还将使用glvertexattributepointer
+glClientActiveTexture
glTexCoordPointer
glBegin
/glEnd
对),并使用glMultiTexCoord
调用指定texcoordsglBindVertexArray
和glBindBuffer
+glDrawArrays
/glDrawElements
指定顶点数据,并调用GLVertexPointInter
,glNormalPointer
,glTexCoordPointer
等,在绘制例程期间指定顶点属性glBindVertexArray
+glDrawArrays
/glDrawElements
指定顶点数据,并调用GLVertexAttributePointer
指定顶点