OpenGL 红皮书示例中的无效代码。我该如何解决?

Invalid Code in OpenGL Redbook example. How Can I solve?

我的问题是:

OpenGL 编程指南:学习 OpenGL 4.3 版的官方指南

第8版

示例 2.4 在命名统一块中初始化统一变量:

我尝试编译此代码示例,但遇到了编译错误(直到现在为止,那本书的每个示例都是如此)

在我找不到其他人有这个问题后(我自己找到错误源后我觉得很奇怪),我试图找出可能是什么问题。

        memcpy(buffer + offset[Scale], &scale, size[Scale] * TypeSize(type[Scale]));
        memcpy(buffer + offset[Translation], &translation, size[Translation] * TypeSize(type[Translation]));
        memcpy(buffer + offset[Rotation], &rotation, size[Rotation] * TypeSize(type[Rotation]));
        memcpy(buffer + offset[Enabled], &enabled, size[Enabled] * TypeSize(type[Enabled]));

这是导致错误的行,其中缓冲区声明为:GLvoid *

所以我的问题是: 为什么他们尝试对 void 指针进行指针运算(我猜,这就是 GLvoid * 是什么)?

我可能必须将其转换为它的正确长度 memcpyed?

因为我是 openGL 的新手,无法真正了解那个(300 行)示例的上下文,无法自行了解 GLvoid * 正在处理的内容。

任何知道这本书或至少知道示例的人都可以告诉我必须将 memcpy 的 Dst 部分转换为什么吗?或者告诉我我还做错了什么以及如何解决?

您不能添加到 void 指针,因为它的大小未定义。
将其转换为 char * 应该可以解决您的问题。