- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
根据我的另一个问题,这是一个我想避免 offsetof
的具体示例。
为了与 glVertexAttribPointer
一起使用,我必须对最后一个参数使用 offsetof
。
glVertexAttribPointer(GLKVertexAttribColor, 4, GL_FLOAT, GL_FALSE, sizeof(Vertex),
(const GLvoid *) offsetof(Vertex, _color));
顶点是一个类。有什么办法可以避免使用这个吗?我尝试使用指向成员的指针,但没有成功。
不能在下面编译
glVertexAttribPointer(GLKVertexAttribColor, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex),
(const GLvoid *)&Vertex::_color);
最佳答案
您无法获取限定为 Vertex::_color
的非静态成员的地址。您将需要 Vertex
的实例,但即便如此,返回的地址也将相对于程序的地址空间,这不是您使用 VBO 时想要的。
offsetof(...)
用于查找数据结构中元素的地址。这个地址并不指向实际内存,它实际上只是从结构开始的偏移量(这就是为什么它使用 size_t
而不是 intptr_t
或 void *
).
历史上,在 OpenGL 1.1 中引入顶点数组时,它在调用 glVertexPointer (...)
时使用数据指针来引用客户端(程序)内存。那时,您传递的地址实际上指向您程序中的内存。从顶点缓冲区对象 (GL 1.5) 开始,OpenGL 将 glVertexPointer (...)
中的指针参数重新用作指向服务器 (GPU) 内存的指针。如果在调用 glVertexPointer (...)
时绑定(bind)了一个非零 VBO,那么指针实际上是一个偏移量。
更准确地说,使用 VBO 时的指针是相对于绑定(bind) VBO 的数据存储的,并且 VBO 中的第一个数据从地址 0 开始。这就是为什么 offsetof (...)
在这种情况下有意义,并且没有理由避免使用它。
关于c++ - 我可以避免在下面使用 offsetof 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22726351/
使用 OFFSETOF 宏更新结构字段的代码 #include #define OFFSETOF(TYPE, ELEMENT) ((size_t)&(((TYPE *)0)->ELEMENT))
刚看到What does the following macro do?我要问我自己的问题:为什么这么多应用程序的 header 定义 offsetof他们自己? 有什么原因吗?不靠谱? 最佳答案
来自 C++ 标准: A standard-layout class is a class that: — has no non-static data members of type non-sta
我想知道一个简单的宏 offset_of_ 是否需要对 not 的指针取消引用。例如,一个 C++(意味着这段代码将使用 C++ 编译器编译)结构,它声明了 packed 属性 struct A {
我想要 mystruct1 中的 offsetof() 参数行。我试过了 offsetof(struct mystruct1, rec.structPtr1.u_line.line) 还有 offse
就在这个问题因重复而被驳回之前,大多数(如果不是全部)问题都已接受答案,并带有过时/未定义的行为解决方案。 问题: 有没有办法在编译时获得指向成员数据的指针的偏移量: 不依赖于未定义的行为(nullp
我编写了一个小函数来获取结构内部字段的字节偏移量,但为了实现这一点,我每次都会迭代这些字段,直到找到符号。然而,在 C 中,offsetof() 仅在编译时计算一次,因为结构内部的偏移量不再改变。我想
当我这样定义结构时: struct abc{ int member1; int arr_member1; std::vector mVector; } 并且想要创建一个 arr_member 变
我必须在已经存在的大代码中添加一段代码。我的代码中有一个指针,*Ptr。该指针的类型为 unsigned char。 无符号字符 *Ptr; 我有以下结构。 struct { uint8_t t
相关文章: [c 循环双链表:rev 遍历为同一节点提供不同的列表指针地址](c circular double linked-list: rev traverse gives different l
这个问题已经有答案了: 已关闭11 年前。 社区去年审查了是否重新开放此问题,并将其关闭: 原始关闭原因未解决 Possible Duplicate: Why does this C code wor
根据我的另一个问题,这是一个我想避免 offsetof 的具体示例。 为了与 glVertexAttribPointer 一起使用,我必须对最后一个参数使用 offsetof。 glVertexAt
我想在这里实现“GetParent()”函数- class ChildClass; class ParentClass { public: .... ChildClass childO
我看到了offsetof这两个宏: #if defined(_MSC_VER) && !defined(_CRT_USE_BUILTIN_OFFSETOF) #ifdef __cplusplus
我有以下代码,以便能够访问结构数组中的多个字段(为简单起见,我已将其减少为两个)。最终指针计算的正确咒语是什么 *(ptr + offset) = 数据;因为我总是得到: 错误:从类型“int32_t
我一直在尝试使用宏连接 (##) 和 offsetof 宏来生成标识符,但没有成功: CMain.c:55: warning: implicit declaration of function 'Co
我正在尝试以下列方式使用 offsetof 宏: typedef unsigned char u8; typedef unsigned short u16; struct MapBlock { u
我正在尝试在我自己的另一个宏中使用 offsetof 宏,如下所示: #define MY_MACRO(struct_type, member) \ my_function(param1, o
这个问题在这里已经有了答案: Why does this implementation of offsetof() work? (8 个答案) 关闭 3 年前。 offsetof 在stddef.h
我试图通过使用 offsetof() 宏来学习如何访问结构成员,我遇到了这个例子 How can I access structure fields by name at run time?这一行:
我是一名优秀的程序员,十分优秀!