c++ - 使用 C++ 的 OpenGL : vtable troubles when passing class array to glTexImage2d

标签 c++ opengl vtable glteximage2d

我用 float r、float g、float b、float alpha 创建了一个类 Color。它有一个带有虚拟析构函数的基类

我正在尝试将 Color 数组传递给 opengl 函数 glTexImage2D,其中 GL_RGBA 组织类型为 float(这将是一个数组 {float r, float g, float b, float alpha}).这要求 Color 仅包含 4 个 float (16 字节大小)。

但是,sizeof(Color) 显示我的类有一个 20 字节的大小,因为 Color 的基类有一个 < strong>vtable,感谢析构函数。

如何保留我的 vtable 并将我的 Color 数组传递给 glTexImage2D

最佳答案

简短回答:不,你不能那样做。

您可以在 glPixelStore() documentation 中看到 glTexImage2D() 的所有额外参数.如您所见,没有用于在像素之间添加“步幅”或“填充”的参数。可以选择在行首或行尾添加空间,或者在图像 (3D) 之间添加空间,但不能在像素之间添加空间。

建议:一组相同的 4D vector ,每个 vector 都有一个 vtable 是一种设计味道。这是一个糟糕的设计。为了与 C 兼容,您的颜色类型应该是 standard layout type .请特别注意,这意味着您不能使用虚函数。

如果您确实需要具有虚拟析构函数的基类型,请创建一个包装类型。

关于c++ - 使用 C++ 的 OpenGL : vtable troubles when passing class array to glTexImage2d,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34685284/

相关文章:

c++ - C/C++ 用 ascii 艺术声明 2D/3D 数组

c++ - OpenGL:如何使光与旋转无关?

C++:如何找出 v 表的布局/地址?

c++ - 如果在 C++ 中的基类中添加虚函数或非虚函数,是否必须重新编译整个类层次结构?

c++ - 如果没有类重新实现 'virtual' 关键字是否可以优化掉?

C++ : Aliases in function argument

python - 通过双向管道传递文件内容

c++ - 如何在 Windows 上静态构建和包含 wolfssl?

c++ - 在 OpenGL 中检测碰撞

c++ - opengl绘制窗口行高