Use register 0x22A (GPUREG_DRAW_VERTEX_OFFSET) when using GPU_DrawArrays.
It will set the index of the first vertex to draw, akin to the "first" parameter of glDrawArrays.
This commit is contained in:
parent
24fd71c4ad
commit
ad3dd538dc
@ -294,7 +294,7 @@ void GPU_SetTexture(GPU_TEXUNIT unit, u32* data, u16 width, u16 height, u32 para
|
|||||||
void GPU_SetTextureBorderColor(GPU_TEXUNIT unit,u32 borderColor);
|
void GPU_SetTextureBorderColor(GPU_TEXUNIT unit,u32 borderColor);
|
||||||
void GPU_SetTexEnv(u8 id, u16 rgbSources, u16 alphaSources, u16 rgbOperands, u16 alphaOperands, GPU_COMBINEFUNC rgbCombine, GPU_COMBINEFUNC alphaCombine, u32 constantColor);
|
void GPU_SetTexEnv(u8 id, u16 rgbSources, u16 alphaSources, u16 rgbOperands, u16 alphaOperands, GPU_COMBINEFUNC rgbCombine, GPU_COMBINEFUNC alphaCombine, u32 constantColor);
|
||||||
|
|
||||||
void GPU_DrawArray(GPU_Primitive_t primitive, u32 n);
|
void GPU_DrawArray(GPU_Primitive_t primitive, u32 n, u32 first);
|
||||||
void GPU_DrawElements(GPU_Primitive_t primitive, u32* indexArray, u32 n);
|
void GPU_DrawElements(GPU_Primitive_t primitive, u32* indexArray, u32 n);
|
||||||
void GPU_FinishDrawing();
|
void GPU_FinishDrawing();
|
||||||
|
|
||||||
|
@ -554,7 +554,7 @@
|
|||||||
#define GPUREG_INDEXBUFFER_CONFIG 0x0227
|
#define GPUREG_INDEXBUFFER_CONFIG 0x0227
|
||||||
#define GPUREG_NUMVERTICES 0x0228
|
#define GPUREG_NUMVERTICES 0x0228
|
||||||
#define GPUREG_GEOSTAGE_CONFIG 0x0229
|
#define GPUREG_GEOSTAGE_CONFIG 0x0229
|
||||||
#define GPUREG_022A 0x022A
|
#define GPUREG_DRAW_VERTEX_OFFSET 0x022A
|
||||||
#define GPUREG_022B 0x022B
|
#define GPUREG_022B 0x022B
|
||||||
#define GPUREG_022C 0x022C
|
#define GPUREG_022C 0x022C
|
||||||
#define GPUREG_022D 0x022D
|
#define GPUREG_022D 0x022D
|
||||||
|
@ -485,7 +485,7 @@ void GPU_SetTexEnv(u8 id, u16 rgbSources, u16 alphaSources, u16 rgbOperands, u16
|
|||||||
GPUCMD_AddIncrementalWrites(GPUREG_0000|GPU_TEVID[id], param, 0x00000005);
|
GPUCMD_AddIncrementalWrites(GPUREG_0000|GPU_TEVID[id], param, 0x00000005);
|
||||||
}
|
}
|
||||||
|
|
||||||
void GPU_DrawArray(GPU_Primitive_t primitive, u32 n)
|
void GPU_DrawArray(GPU_Primitive_t primitive, u32 n, u32 first)
|
||||||
{
|
{
|
||||||
//set primitive type
|
//set primitive type
|
||||||
GPUCMD_AddMaskedWrite(GPUREG_PRIMITIVE_CONFIG, 0x2, primitive);
|
GPUCMD_AddMaskedWrite(GPUREG_PRIMITIVE_CONFIG, 0x2, primitive);
|
||||||
@ -494,6 +494,8 @@ void GPU_DrawArray(GPU_Primitive_t primitive, u32 n)
|
|||||||
GPUCMD_AddWrite(GPUREG_INDEXBUFFER_CONFIG, 0x80000000);
|
GPUCMD_AddWrite(GPUREG_INDEXBUFFER_CONFIG, 0x80000000);
|
||||||
//pass number of vertices
|
//pass number of vertices
|
||||||
GPUCMD_AddWrite(GPUREG_NUMVERTICES, n);
|
GPUCMD_AddWrite(GPUREG_NUMVERTICES, n);
|
||||||
|
//set first vertex
|
||||||
|
GPUCMD_AddWrite(GPUREG_DRAW_VERTEX_OFFSET, first);
|
||||||
|
|
||||||
//all the following except 0x000F022E might be useless
|
//all the following except 0x000F022E might be useless
|
||||||
GPUCMD_AddMaskedWrite(GPUREG_0253, 0x1, 0x00000001);
|
GPUCMD_AddMaskedWrite(GPUREG_0253, 0x1, 0x00000001);
|
||||||
@ -513,7 +515,9 @@ void GPU_DrawElements(GPU_Primitive_t primitive, u32* indexArray, u32 n)
|
|||||||
GPUCMD_AddWrite(GPUREG_INDEXBUFFER_CONFIG, 0x80000000|((u32)indexArray));
|
GPUCMD_AddWrite(GPUREG_INDEXBUFFER_CONFIG, 0x80000000|((u32)indexArray));
|
||||||
//pass number of vertices
|
//pass number of vertices
|
||||||
GPUCMD_AddWrite(GPUREG_NUMVERTICES, n);
|
GPUCMD_AddWrite(GPUREG_NUMVERTICES, n);
|
||||||
|
|
||||||
|
GPUCMD_AddWrite(GPUREG_DRAW_VERTEX_OFFSET, 0x00000000);
|
||||||
|
|
||||||
GPUCMD_AddMaskedWrite(GPUREG_GEOSTAGE_CONFIG, 0x2, 0x00000100);
|
GPUCMD_AddMaskedWrite(GPUREG_GEOSTAGE_CONFIG, 0x2, 0x00000100);
|
||||||
GPUCMD_AddMaskedWrite(GPUREG_0253, 0x2, 0x00000100);
|
GPUCMD_AddMaskedWrite(GPUREG_0253, 0x2, 0x00000100);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user