在OpenGL中,为什么glVertexAttribPointer要求使用"pointer"指针.要作为void *传递的参数? [英] In OpenGL, why does glVertexAttribPointer require the "pointer" argument to be passed in as void*?

查看:92
本文介绍了在OpenGL中,为什么glVertexAttribPointer要求使用"pointer"指针.要作为void *传递的参数?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

glVertexAttribPointer的规范如下:

void glVertexAttribPointer( GLuint index,
    GLint size,
    GLenum type,
    GLboolean normalized,
    GLsizei stride,
    const GLvoid * pointer);

鉴于最后一个参数只是一个4字节的整数偏移量,为什么OpenGL期望它作为空指针传递?

Given that the last parameter is just a 4-byte integer offset, why does OpenGL expect it to be passed in as a void pointer?

推荐答案

旧版.

在VBO之前,该参数具有不同的含义:将顶点数据保留在客户端内存中,并传递数组的地址(请参见glEnableClientState等).

That argument had a different meaning before VBOs: you'd keep the vertex data in client memory and pass the address of the array (see glEnableClientState and such).

现在最后一个参数可以具有2个含义(缓冲区对象的偏移量,客户端状态数组的地址). Khronos没有为缓冲区对象的gl*Pointer函数提供单独的版本,因此您需要进行这种尴尬的转换.

Now the last parameter can have 2 meanings (offset for buffer objects, address for client state arrays). Khronos did not provide a separate version for gl*Pointer functions for buffer objects, so you need to do this awkward cast.

这篇关于在OpenGL中,为什么glVertexAttribPointer要求使用"pointer"指针.要作为void *传递的参数?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆