+// vertex buffer and index buffer creation/updating/freeing
+r_meshbuffer_t *R_Mesh_CreateMeshBuffer(const void *data, size_t size, const char *name, qboolean isindexbuffer, qboolean isdynamic, qboolean isindex16);
+void R_Mesh_UpdateMeshBuffer(r_meshbuffer_t *buffer, const void *data, size_t size);
+void R_Mesh_DestroyMeshBuffer(r_meshbuffer_t *buffer);
+void GL_Mesh_ListVBOs(qboolean printeach);
+
+void R_Mesh_PrepareVertices_Vertex3f(int numvertices, const float *vertex3f, const r_meshbuffer_t *buffer);
+
+r_vertexgeneric_t *R_Mesh_PrepareVertices_Generic_Lock(int numvertices);
+qboolean R_Mesh_PrepareVertices_Generic_Unlock(void);
+void R_Mesh_PrepareVertices_Generic_Arrays(int numvertices, const float *vertex3f, const float *color4f, const float *texcoord2f);
+void R_Mesh_PrepareVertices_Generic(int numvertices, const r_vertexgeneric_t *vertex, const r_meshbuffer_t *vertexbuffer);
+
+r_vertexmesh_t *R_Mesh_PrepareVertices_Mesh_Lock(int numvertices);
+qboolean R_Mesh_PrepareVertices_Mesh_Unlock(void); // if this returns false, you need to prepare the mesh again!
+void R_Mesh_PrepareVertices_Mesh_Arrays(int numvertices, const float *vertex3f, const float *svector3f, const float *tvector3f, const float *normal3f, const float *color4f, const float *texcoordtexture2f, const float *texcoordlightmap2f);
+void R_Mesh_PrepareVertices_Mesh(int numvertices, const r_vertexmesh_t *vertex, const r_meshbuffer_t *buffer);
+
+// sets up the requested vertex transform matrix
+void R_EntityMatrix(const matrix4x4_t *matrix);
+// sets the vertex array pointer
+void R_Mesh_VertexPointer(int components, int gltype, size_t stride, const void *pointer, const r_meshbuffer_t *vertexbuffer, size_t bufferoffset);
+// sets the color array pointer (GL_Color only works when this is NULL)
+void R_Mesh_ColorPointer(int components, int gltype, size_t stride, const void *pointer, const r_meshbuffer_t *vertexbuffer, size_t bufferoffset);
+// sets the texcoord array pointer for an array unit
+void R_Mesh_TexCoordPointer(unsigned int unitnum, int components, int gltype, size_t stride, const void *pointer, const r_meshbuffer_t *vertexbuffer, size_t bufferoffset);
+// returns current texture bound to this identifier
+int R_Mesh_TexBound(unsigned int unitnum, int id);
+// copies a section of the framebuffer to a 2D texture
+void R_Mesh_CopyToTexture(rtexture_t *tex, int tx, int ty, int sx, int sy, int width, int height);
+// bind a given texture to a given image unit
+void R_Mesh_TexBind(unsigned int unitnum, rtexture_t *tex);
+// sets the texcoord matrix for a texenv unit, can be NULL or blank (will use identity)
+void R_Mesh_TexMatrix(unsigned int unitnum, const matrix4x4_t *matrix);
+// sets the combine state for a texenv unit
+void R_Mesh_TexCombine(unsigned int unitnum, int combinergb, int combinealpha, int rgbscale, int alphascale);
+// set up a blank texture state (unbinds all textures, texcoord pointers, and resets combine settings)
+void R_Mesh_ResetTextureState(void);