Problem with game design implementing VBO and VAO

Started by
2 comments, last by BLM768 10 years, 9 months ago

Hello and thank you for reading and potentially helping with my problem.

I have been a hobbyist programmer for a long time, with spurts of activity. I have started up again recently and decided to get back to my main driving interest, which was game engine design. I am wanting to make a extremely small(just a 100x100 block) cave with a voxel engine, that will be used for a tower defense game vs simple AI.

Have spent last 2 weeks rereading about voxels and peoples implementations and experiences. Now that I have decided on how I want to approach it I have hit a snag, This is more with the engine design than anything else, and how rusty I have gotten with my programming.

I'm embarrassingly stuck on how, and where, to create the vertex buffer object. I was going with the approach in including it with the sector class(chunks) so that each sector had it's own vbo and vao. Yet the vao would require the shaders when setting it, so would each sector have an array of the shaders that it could use?

I am also unsure where to implement the textures for the blocks. I obviously am representing the texture for each block as a byte with an enum for the type. Yet, should I have the sector(chunk) class have its own render function so each sector can render itself when called or do all the rendering from the main program and just retrieving the vbo and vao from the sector class?

In relation to this, how and where do I set the texture when rendering? Would you create a LIST containing each block in the Sector that holds its texture, shaders, vbo and vao when the sector is loaded?

Again thanks for any help in this regards.

<=- Talon -=>
Advertisement

Yikes, this is too much for my brain to tackle all at once.

For now I'll stick with the VAO and shaders issue.

First, a bit of intro.... I don't use VAO's because I discovered that some common machines have limited support which will cause them to fail. Also, recently, It's been mentioned here that some drivers will accidentally assign VAO state info to the next VAO. This also, could be disastrous.

Anyways, my point is as follows, although my experience with VAO's is limited, so far as I know, shaders and VAO's have nothing to do with one another.

The initializations, for both, are completely separate and they are both activated in the render loop separately as they are used.... so far as I know.

Consider it pure joy, my brothers and sisters, whenever you face trials of many kinds, 3 because you know that the testing of your faith produces perseverance. 4 Let perseverance finish its work so that you may be mature and complete, not lacking anything.

Ah ok, that helps then. I can just set the shaders during the render then instead of having to worry about them when creating and filling the vbo and vao. Though I still wonder if the best way would be creating a list of a struct type for each sector containing the cubes and attached shaders and textures. I would assume this would allow for a lot of customization as I would be able to switch shaders per cube, instead of a batch. Just not sure if this is the common approach, or if it will degrade my performance as opposed to a more optimized method.

Interesting on the VAO's, I will check up on that, though even if I do go with a different approach I would probably get this working first to at least have a base design structure in place.

<=- Talon -=>

The problem is that when you draw the contents of the VAO, the currently active shader will be used for everything that the VAO contains. In general, when I'm drawing a mesh, I use one VBO for each of the vertex attributes (position, normal, etc.), but I split the face index data into several VBOs, with one VBO per material. I iterate over the face-index VBOs, setting the correct material/shader for each before drawing it.

This topic is closed to new replies.

Advertisement