-void GL_ConvertColorsFloatToByte(int first, int count)
-{
- int i, k;
- union {float f[4];int i[4];} *color4fi;
- struct {GLubyte c[4];} *color4b;
-
- // shift float to have 8bit fraction at base of number
- color4fi = (void *)(varray_buf_color4f + first * 4);
- for (i = 0;i < count;i++, color4fi++)
- {
- color4fi->f[0] += 32768.0f;
- color4fi->f[1] += 32768.0f;
- color4fi->f[2] += 32768.0f;
- color4fi->f[3] += 32768.0f;
- }
-
- // then read as integer and kill float bits...
- color4fi = (void *)(varray_buf_color4f + first * 4);
- color4b = (void *)(varray_buf_color4b + first * 4);
- for (i = 0;i < count;i++, color4fi++, color4b++)
- {
- k = color4fi->i[0] & 0x7FFFFF;color4b->c[0] = (GLubyte) min(k, 255);
- k = color4fi->i[1] & 0x7FFFFF;color4b->c[1] = (GLubyte) min(k, 255);
- k = color4fi->i[2] & 0x7FFFFF;color4b->c[2] = (GLubyte) min(k, 255);
- k = color4fi->i[3] & 0x7FFFFF;color4b->c[3] = (GLubyte) min(k, 255);
- }
-}
-
-/*
-// enlarges geometry buffers if they are too small
-void _R_Mesh_ResizeCheck(int numverts)
-{
- if (numverts > mesh_maxverts)
- {
- BACKENDACTIVECHECK
- GL_Backend_ResizeArrays(numverts + 100);
- GL_Backend_ResetState();
- }
-}
-*/
-
-void R_Mesh_EndBatch(void)
-{
-#ifdef MESH_BATCH
- if (gl_batchelementcount)
- {
- if (gl_state.pointervertexcount)
- Host_Error("R_Mesh_EndBatch: called with pointers enabled\n");
-
- if (gl_state.colorarray && !gl_mesh_floatcolors.integer && gl_state.pointer_color == NULL)
- GL_ConvertColorsFloatToByte(gl_batchvertexfirst, gl_batchvertexcount);
- if (r_render.integer)
- {
- //int i;for (i = 0;i < gl_batchelementcount;i++) if (varray_buf_elements3i[i] < gl_batchvertexfirst || varray_buf_elements3i[i] >= (gl_batchvertexfirst + gl_batchvertexcount)) Host_Error("R_Mesh_EndBatch: invalid element #%i (value %i) outside range %i-%i\n", i, varray_buf_elements3i[i], gl_batchvertexfirst, gl_batchvertexfirst + gl_batchvertexcount);
- CHECKGLERROR
- GL_LockArrays(gl_batchvertexfirst, gl_batchvertexcount);
- if (gl_mesh_drawrangeelements.integer && qglDrawRangeElements != NULL)
- {
- qglDrawRangeElements(GL_TRIANGLES, gl_batchvertexfirst, gl_batchvertexfirst + gl_batchvertexcount, gl_batchelementcount, GL_UNSIGNED_INT, (const GLuint *) varray_buf_elements3i);CHECKGLERROR
- }
- else
- {
- qglDrawElements(GL_TRIANGLES, gl_batchelementcount, GL_UNSIGNED_INT, (const GLuint *) varray_buf_elements3i);CHECKGLERROR
- }
- GL_LockArrays(0, 0);
- }
- gl_batchelementcount = 0;
- gl_batchvertexcount = 0;
- }
-#endif
-}
-