static void translate_ubyte_ushort( const void *in,
- unsigned nr,
+ unsigned start,
+ unsigned in_nr,
+ unsigned out_nr,
+ unsigned restart_index,
void *out )
{
const ubyte *in_ub = (const ubyte *)in;
ushort *out_us = (ushort *)out;
unsigned i;
- for (i = 0; i < nr; i++)
- out_us[i] = (ushort) in_ub[i];
+ for (i = 0; i < out_nr; i++)
+ out_us[i] = (ushort) in_ub[i+start];
}
static void translate_memcpy_ushort( const void *in,
- unsigned nr,
+ unsigned start,
+ unsigned in_nr,
+ unsigned out_nr,
+ unsigned restart_index,
void *out )
{
- memcpy(out, in, nr*sizeof(short));
+ memcpy(out, &((short *)in)[start], out_nr*sizeof(short));
}
static void translate_memcpy_uint( const void *in,
- unsigned nr,
+ unsigned start,
+ unsigned in_nr,
+ unsigned out_nr,
+ unsigned restart_index,
void *out )
{
- memcpy(out, in, nr*sizeof(int));
+ memcpy(out, &((int *)in)[start], out_nr*sizeof(int));
}
-static void generate_linear_ushort( unsigned nr,
+static void generate_linear_ushort( unsigned start,
+ unsigned nr,
void *out )
{
ushort *out_us = (ushort *)out;
unsigned i;
for (i = 0; i < nr; i++)
- out_us[i] = (ushort) i;
+ out_us[i] = (ushort)(i + start);
}
-static void generate_linear_uint( unsigned nr,
+static void generate_linear_uint( unsigned start,
+ unsigned nr,
void *out )
{
unsigned *out_ui = (unsigned *)out;
unsigned i;
for (i = 0; i < nr; i++)
- out_ui[i] = i;
+ out_ui[i] = i + start;
}
}
-
+/**
+ * Utility for converting unfilled polygons into points, lines, triangles.
+ * Few drivers have direct support for OpenGL's glPolygonMode.
+ * This function helps with converting triangles into points or lines
+ * when the front and back fill modes are the same. When there's
+ * different front/back fill modes, that can be handled with the
+ * 'draw' module.
+ */
int u_unfilled_generator( unsigned prim,
unsigned start,
unsigned nr,