diff --git a/libctru/include/3ds/gpu/gpu.h b/libctru/include/3ds/gpu/gpu.h index 6d97393..e2b3ac3 100644 --- a/libctru/include/3ds/gpu/gpu.h +++ b/libctru/include/3ds/gpu/gpu.h @@ -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_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_FinishDrawing(); diff --git a/libctru/include/3ds/gpu/registers.h b/libctru/include/3ds/gpu/registers.h index aebc4af..c8fd90e 100644 --- a/libctru/include/3ds/gpu/registers.h +++ b/libctru/include/3ds/gpu/registers.h @@ -554,7 +554,7 @@ #define GPUREG_INDEXBUFFER_CONFIG 0x0227 #define GPUREG_NUMVERTICES 0x0228 #define GPUREG_GEOSTAGE_CONFIG 0x0229 -#define GPUREG_022A 0x022A +#define GPUREG_DRAW_VERTEX_OFFSET 0x022A #define GPUREG_022B 0x022B #define GPUREG_022C 0x022C #define GPUREG_022D 0x022D diff --git a/libctru/source/gpu/gpu.c b/libctru/source/gpu/gpu.c index 45f4c4e..7483294 100644 --- a/libctru/source/gpu/gpu.c +++ b/libctru/source/gpu/gpu.c @@ -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); } -void GPU_DrawArray(GPU_Primitive_t primitive, u32 n) +void GPU_DrawArray(GPU_Primitive_t primitive, u32 n, u32 first) { //set primitive type 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); //pass number of vertices GPUCMD_AddWrite(GPUREG_NUMVERTICES, n); + //set first vertex + GPUCMD_AddWrite(GPUREG_DRAW_VERTEX_OFFSET, first); //all the following except 0x000F022E might be useless 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)); //pass number of vertices GPUCMD_AddWrite(GPUREG_NUMVERTICES, n); - + + GPUCMD_AddWrite(GPUREG_DRAW_VERTEX_OFFSET, 0x00000000); + GPUCMD_AddMaskedWrite(GPUREG_GEOSTAGE_CONFIG, 0x2, 0x00000100); GPUCMD_AddMaskedWrite(GPUREG_0253, 0x2, 0x00000100);