A "batch" is a "renderable." Geometry, associated textures, flags (et cetera). A sprite batcher produces n renderables.
A "renderable" has buffers (VBOs, TBOs), properties (uniforms) and shaders..
I see this differently, maybe I have thinking of this concept wrong, to me a renderable is a object such as a Quad.
Just the data that would be in a VBO (The XYZ positions, Texture Coords, assigned texture, etc), the VBO is just the medium to get it to the GPU
Maybe this is cause my focus is 2D
It's not going to be possible to give you further advice without more specifics about what you find so different between these two things.
I hope this will explain things better
For an instance of SpriteBatcher they have:
Renders Quads. Single vertex Data is:
XYZ position
UV tex cords
Single VAO:
Contains a VBO and IBO
Single Shader Program:
Contains a Vertex Shader and Fragment Shader
The VBO is filled using Draw methods that map directly into the buffer. Vertices are pre transformed
Drawing [When a batch's end has been signaled using the End() method or forced (ran out of space) through the VBO space check)]:
Bind the shader program
Bind the batch's texture
upload uniforms (MVP matrix / texture)
Bind the VAO
True draw call that uses the IBO to render all the data that was placed in the VBO
For an instance of Particle Emitter they have:
Renders quads transformed from point data. TBO Data:
XY position
XY acceleration
XY Velocity...
all use vec2 in shaders. 8 vec2s total
Two VAOs
VAO 1: contains only a TBO
VAO 2: contains only a IBO
Two Shader Programs.
Shader Program 1 (used for updating particles):
Contains a Vertex Shader and Geometry Shader
Shader Program 2 (used for rendering particles):
Contains a Vertex Shader and Fragment Shader
Pertains to Updating [thought I would include just in case]:
TBOs are initial given one "generator" particle. This particle created more particles based on uniforms that are used to describe the properties a particle can have (velocity, acceleration, etc). Particles are generated over time in the Geo shader, where they are also discarded if they are "dead". The vertex shader is the one that actually updates the positions etc
Pertains to Rendering [Explicitly done through a DrawParticles call]:
Bind Shader Program 2 (render program)
upload uniforms (MVP matrix / texture for particles / bind texture for TBO use)
Bind VAO 2 (one with IBO only)
True draw call that uses the IBO. Magic happens in the Vertex Shader where the TBO is iterated over to take each Point Data (single vertex and its data that makes up the particle) and expand it into a quad. Number of particles is based on the actual number of point data in the TBO
If you have any questions let me know