我的OpenGL学习进阶之旅OpenGL ES命令语法

Posted 欧阳鹏

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我的OpenGL学习进阶之旅OpenGL ES命令语法相关的知识,希望对你有一定的参考价值。

一、 OpenGL ES命令语法

1.1 OpenGL ES命令语法

所有OpenGL ES命令以gl前缀开始,对组成命令名的每个单词采用首字母大写(如glBelendEquation)。

1.2 OpenGL ES 数据类型语法

相类似,OpenGL ES 数据类型也以GL前缀开始。

1.3 OpenGL ES命令采用不同风格的参数

此外,有些OpenGL ES命令采用不同风格的参数。
风格或者类型根据采用的参数数量、参数使用的数据类型而各不相同。

  • 根据采用的参数数量(1~4个)
  • 参数使用的数据类型
    • 字节[b]
    • 无符号字节[ub]
    • 短整型[s]
    • 无符号短整型[us]
    • 整数[i]
    • 浮点[f]
    • 参数是否以向量(v)形式传递

下面是OpenGL ES中允许使用的命令风格的几个例子。

除了一条命令将统一变量值指定为浮点数,而另一条将统一变量值指定为整数之外,下面两条命令等价。

glUniform2f(location,1.0f,0.0f)
glUniform2i(location,1,0)

这几个命令的定义如下:

GL_APICALL void GL_APIENTRY glUniform2f (GLint location, GLfloat v0, GLfloat v1);
GL_APICALL void GL_APIENTRY glUniform2fv (GLint location, GLsizei count, const GLfloat *value);
GL_APICALL void GL_APIENTRY glUniform2i (GLint location, GLint v0, GLint v1);
GL_APICALL void GL_APIENTRY glUniform2iv (GLint location, GLsizei count, const GLint *value);

下面几行描述命令也等价,只是其中一条命令以向量形式传递参数,其他命令则不是这样的。

GLfloat coord[4] =  1.0f, 0.75f, 0.25f, 0.0f ;
glUniform4fv(location,coord);
glUniform4f(location,coord[0],coord[1],coord[2],coord[3]);

这几个命令的定义如下:

GL_APICALL void GL_APIENTRY glUniform4f (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
GL_APICALL void GL_APIENTRY glUniform4fv (GLint location, GLsizei count, const GLfloat *value);
GL_APICALL void GL_APIENTRY glUniform4i (GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
GL_APICALL void GL_APIENTRY glUniform4iv (GLint location, GLsizei count, const GLint *value);

下表描述了OpenGL ES中使用的命令后缀和参数数据类型


最后,OpenGL ES定义了GLvoid类型。该类型用于接受指针的OpenGL ES命令。

#ifndef GL_ES_VERSION_2_0
#define GL_ES_VERSION_2_0 1
#include <KHR/khrplatform.h>
typedef khronos_int8_t GLbyte;
typedef khronos_float_t GLclampf;
typedef khronos_int32_t GLfixed;
typedef short GLshort;
typedef unsigned short GLushort;
typedef void GLvoid;
typedef struct __GLsync *GLsync;
typedef khronos_int64_t GLint64;
typedef khronos_uint64_t GLuint64;
typedef unsigned int GLenum;
typedef unsigned int GLuint;
typedef char GLchar;
typedef khronos_float_t GLfloat;
typedef khronos_ssize_t GLsizeiptr;
typedef khronos_intptr_t GLintptr;
typedef unsigned int GLbitfield;
typedef int GLint;
typedef unsigned char GLboolean;
typedef int GLsizei;
typedef khronos_uint8_t GLubyte;

以上是关于我的OpenGL学习进阶之旅OpenGL ES命令语法的主要内容,如果未能解决你的问题,请参考以下文章