我需要将int
(指定字节偏移量)强制转换为const void*
。真正适用于我的唯一解决方案是c风格的演员表:
int offset = 6*sizeof(GLfloat);
glVertexAttribPointer(1,3,GL_FLOAT,GL_FALSE,0,(void*)offset);
我想摆脱c风格的演员阵容,但我找不到合适的解决方案。我试过了
static_cast<void*>(&offset)
并且它编译,但这不是正确的解决方案(整个输出与此方法不同)。什么是正确的解决方案?
链接到glVertexAttribPointer
:Link
答案 0 :(得分:3)
考虑到这是一个绝望的案例(参见derhass提供的链接),可能最好的方法是将可疑代码集中在一个地方,对其进行适当的嘲讽评论,并至少保持其余代码清洁:
/**
* Overload/wrapper around OpenGL's glVertexAttribIPointer, which avoids
* code smell due to shady pointer arithmetic at the place of call.
*
* See also:
* https://www.opengl.org/registry/specs/ARB/vertex_buffer_object.txt
* https://www.opengl.org/sdk/docs/man/html/glVertexAttribPointer.xhtml
*/
void glVertexAttribPointer(GLuint index, GLint size, GLenum type, GLsizei stride, size_t offset)
{
GLvoid const* pointer = static_cast<char const*>(0) + offset;
return glVertexAttribPointer(index, size, type, stride, offset);
}
答案 1 :(得分:2)
使用此代替void指针:
intptr_t
在头文件文件cstdint
中声明并使用
从指针进行交互转换reinterpret_cast
如有任何问题,请阅读此内容: http://msdn.microsoft.com/en-us/library/e0w9f63b.aspx