GLuint b;
glGenBuffers(1,&b);
glBindBuffer(GL_ARRAY_BUFFER,b);
glBufferData(GL_ARRAY_BUFFER,...);
我认为这会变成
GLuint b;
glCreateBuffers(1,&b);
glBufferData(b,...);
现在没有必要像" GL_ARRAY_BUFFER"了。但是,我将如何模仿这个< 4.5?
我可以绑定"一切"在这样的幕后GL_ARRAY_BUFFER?
glBufferDataDSA(GLuint b,...){
glBindBuffer(GL_ARRAY_BUFFER,b);
glBufferData(GL_ARRAY_BUFFER,...);
glBindBuffer(GL_ARRAY_BUFFER,0);
}
我的意思是,如果我总是确保设置绑定,它不应该对我绑定的内容产生影响。
如果我试图像这样模拟DSA,我会遇到问题吗?
答案 0 :(得分:3)
这不是一个正确的电话:
GLuint b;
glCreateBuffers(1,&b);
glBufferData(b,...);
glBufferData()
没有重载以获取缓冲区名称参数。对DSA案例进行了新的glNamedBufferData()
调用:
GLuint b;
glCreateBuffers(1,&b);
glNamedBufferData(b,...);
除了您已经注意到的明显副作用外,您使用非DSA的替代品看起来很好。它当然会改变当前的GL_ARRAY_BUFFER
绑定。如果您不关心它,代码序列应该是等效的。最后可能没有必要将绑定设置为0,因为无论如何都丢失了以前的绑定,并且在使用之前总是必须绑定缓冲区。
一般情况下,我认为DSA不会真正添加新功能,因此应该可以使用非DSA调用来模拟它,而不会有太多麻烦。它只是现有功能的一组新的API入口点,根据一些声明,它应该更有效。