OpenGL是什么

OpenGL实际上只是一种接口规范。它并不提供实现,具体的实现是显卡厂商提供的。这很好理解,因为显卡是和图形交互的底层逻辑。直接由显卡商提供图形操作函数少了中间商。个人觉得这些函数类似于CPU上面的机器码(汇编码)ADD, SUB, MOV什么的,其实这些码的具体实现也是CPU厂商提供的,而这些码的规范其实也是约定俗称的。(这种约定应该是叫做指令集,比如说ARM, x86, MIPS)

为什么要使用GLEW?


在 OpenGL 中,函数加载是一个必要的过程,因为 OpenGL API 的实现是由显卡的驱动程序提供的,而不是由操作系统直接提供。这意味着,当你的程序运行时,它需要从显卡驱动程序中查询并获取每个 OpenGL 函数的地址,以便能够调用这些函数。这个过程称为“运行时函数加载”。

#include <windows.h>
#include <GL/gl.h>

// 定义函数指针类型
typedef void (APIENTRY *PFNGLTEXIMAGE3DPROC) (GLenum target, GLint level, GLint internalFormat,
                                               GLsizei width, GLsizei height, GLsizei depth,
                                               GLint border, GLenum format, GLenum type,
                                               const void *pixels);

// 声明一个函数指针变量
PFNGLTEXIMAGE3DPROC glTexImage3D = NULL;
glTexImage3D = (PFNGLTEXIMAGE3DPROC)wglGetProcAddress("glTexImage3D");

// 检查函数是否加载成功
if (glTexImage3D == NULL) {
    // 处理错误,函数加载失败
}
// 使用 glTexImage3D 函数
glTexImage3D(GL_TEXTURE_3D, 0, GL_RGB, width, height, depth, 0, GL_RGB, GL_UNSIGNED_BYTE, data);

如果不使用GLEW或者类似功能的库,那么每次使用一个函数都要经过如上繁琐的步骤

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

大纲

Share the Post:
滚动至顶部