简体   繁体   中英

Draw multiple buffers with the same vertex layout

I have multiple objects, each one of them has its own index buffer, vertex buffer, some have a different shader or texture, and all of them have the same vertex format (x, y, z, u, v, nx, ny, nz). I don't want to batch my objects together, but render them in separate draw calls. Lets say that I want to render 5 different objects (cubes, spheres, etc.), do I have to create a new vao for each one of them, or is there a way to tell OpenGL that I want to render 5 different buffers with the same layout/format?

You don't need to tell OpenGL this; you simply modify the VAO and change the buffers without changing the vertex format.

Now granted, you can't do that without providing the vertex format parameters to glVertexAttribPointer . So at the very least, you have to remember what those parameters still are.

Fortunately, separate attribute format exists (in GL 4.3+) , which allows you to change the buffer bindings (which are still stored in a VAO) separately from the functions that change the vertex format . So you should just be able to call glBindVertexBuffer and glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ...) to change the buffers.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM