gpt4 book ai didi

c++ - 在 glVertexAttribPointer 调用中是否强制转换为 void* 合法 C++?

转载 作者:行者123 更新时间:2023-12-01 13:12:58 27 4
gpt4 key购买 nike

这确实是一个关于 C++ 的问题,而不是 OpenGL。我正在关注 this OpenGL 教程(我刚开始),作者使用 C++(不是 C)。我的问题是 glVertexAttribPointer takes偏移参数为 const void* .因为这个参数只是告诉 OpenGL 给定的顶点属性在用 glBufferData() 复制的顶点数组中第一次出现的位置。 ,我希望它应该是 std::ptrdiff_t类型。 This SO 上的帖子解释了原因 void*用作参数类型,但我想知道为什么这样的用法在 C++ 中是合法的。例如,提到的 tutorial简单地转换为 void*以字节为单位的偏移量值,如下面的调用所示:

glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(float), (void*)(3* sizeof(float)));

在我看来,这种方法不合法,因为 cpprefence reinterpret_cast 的文档说

A value of any integral or enumeration type can be converted to a pointer type. A pointer converted to an integer of sufficient size and back to the same pointer type is guaranteed to have its original value, otherwise the resulting pointer cannot be dereferenced safely (the round-trip conversion in the opposite direction is not guaranteed the same pointer may have multiple integer representations)



所以,如果我理解正确的话, std::ptrdiff_t偏移量的值(这似乎是这里需要的值)在转换为 void* 后可能会丢失。 .我想念什么?

最佳答案

“不保证”不代表“保证失败”;它的意思是“不保证”。这意味着实现可能会或可能不会保留转换。
glVertexAttribPointer API 需要 C 或 C++ 的实现,以保留整数->指针->整数转换。就像它需要一个提供 IEEE-754 浮点类型以及 8/16/32 位整数的 C 或 C++ 实现一样。

关于c++ - 在 glVertexAttribPointer 调用中是否强制转换为 void* 合法 C++?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58932938/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com