- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我用 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/
因为,例如,glBufferData可以报告 GL_OUT_OF_MEMORY 错误,我预计 glTexImage这样做,但事实并非如此。 大概可能会用完纹理内存,那么我该如何检测该事件? 最佳答
为什么 glTexImage1D、glTexImage2D 和 glTexImage3D 函数需要内部格式(即 GL_RGBA8、GL_R32UI 等)和像素格式? (GL_RGBA,GL_RED_I
当我使用 glTexImage2D 绑定(bind)我的图像时,它呈现得很好。 首先是片段着色器中的代码: uniform sampler2D tex; in vec2 tex_coord; // m
我是一名优秀的程序员,十分优秀!