我用 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/