为什么着色器和程序在OpenGL中存储为整数?

Jef*_*rey 3 c++ opengl shader integer opengl-es

我正在阅读"OpenGL Superbible"一书,我不禁注意到,当我们创建一个着色器并创建我们将着色器附加到的程序时,我们将它们存储为无符号整数的GLuint.

为什么他们存储为数字?这个数字的价值是什么意思?

例:

GLuint vertex_shader;
GLuint fragment_shader;
GLuint program;

// Create and compile vertex shader
vertex_shader = glCreateShader(GL_VERTEX_SHADER);
glShaderSource(vertex_shader, 1, vertex_shader_source, NULL);
glCompileShader(vertex_shader);

// Create program, attach shaders to it, and link it
program = glCreateProgram();
glAttachShader(program, vertex_shader);
glLinkProgram(program);
Run Code Online (Sandbox Code Playgroud)

use*_*016 7

这些整数是句柄.这是许多API使用的常用习惯用法,用于通过不透明的间接级别隐藏资源访问.OpenGL有效地阻止您在不使用API​​调用的情况下访问句柄后面的内容.

来自维基百科:

在计算机编程中,句柄是对资源的抽象引用.[...]资源句柄可以是不透明的标识符,在这种情况下,它们通常是整数,或者它们可以是允许访问更多信息的指针.