我的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命令语法的主要内容,如果未能解决你的问题,请参考以下文章

我的OpenGL学习进阶之旅OpenGL ES 着色语言 (下)

我的OpenGL学习进阶之旅OpenGL ES 着色语言 (下)

我的OpenGL学习进阶之旅学习OpenGL ES 3.0 的实战 Awsome Demo (中)

我的OpenGL学习进阶之旅学习OpenGL ES 3.0 的实战 Awsome Demo (中)

我的OpenGL学习进阶之旅学习OpenGL ES 3.0 的实战 Awsome Demo (上)

我的OpenGL学习进阶之旅学习OpenGL ES 3.0 的实战 Awsome Demo (上)