后者是否不赞成前者?glEnableClientState和glEnableVertexAttribArray
我正在编写代码,我想在着色器2.0硬件上工作,但我想使用更新的编程约定,如VAO。
所以我一直在使用glVertexAttribPointer
函数代替glVertexPointer
,glNormalPointer
,glColorPointer
等等。
看起来好像我们已经到了服务器 - 客户端概念不是特别相关的地步(编辑:我的意思是它适用于切换这些缓冲区指针的状态)。但我想知道旧的En/DisableClientState
实际上的功能以及它与glEnableVertexAttribArray
的实际功能有什么关系。
而且我也没有任何图形硬件从5代以前,但肯定我的软件的某些用户可能。例如,我可以如何防止我的代码无法在Radeon 9700上编译? (虽然我希望如果用户拥有最新的驱动程序可能支持新的东西)
使用指针(例如'glVertexAttribPointer'和'glDrawElements')的指针和绘图调用在绑定缓冲区时都将索引偏移量带入绑定缓冲区。这意味着这是一个服务器端操作,因为这些绑定缓冲区已经将其数据传输到图形内存。当它们没有被绑定时,我需要传递一个指向本地缓冲区的指针,这个缓冲区会产生一个客户端操作。是?否则,你会让我完全同意最后一句话。 – 2012-01-11 23:49:35
@StevenLu:的确如此。不幸的是,OpenGL API弄乱了指针的伪装。没有办法通过函数来传递OpenGL在C中的偏移量,因为它们在此刻被定义,而不会调用未定义的行为。要么给一个指向数字的指针,而不是指向int的指针,或者将函数签名强制转换为uintptr_t,这可能会严重地改变参数传递的方式。只有理智的解决方案:一个新的OpenGL函数'glVertexAttribOffset' – datenwolf 2012-01-12 10:27:16
是的,我同意这样做肯定不会造成混淆,使一个不带指针的版本。我已经看到人们使用一个将char转换为NULL的宏,然后为其添加偏移量。它看起来像指针被解释为一个字节偏移整数。 – 2012-01-12 12:09:48