]> Chaos Git - corbenik/ctrulib.git/commitdiff
Use register 0x22A (GPUREG_DRAW_VERTEX_OFFSET) when using GPU_DrawArrays.
authorSubv <subv2112@gmail.com>
Sun, 23 Aug 2015 03:15:27 +0000 (22:15 -0500)
committerSubv <subv2112@gmail.com>
Sun, 23 Aug 2015 03:18:33 +0000 (22:18 -0500)
It will set the index of the first vertex to draw, akin to the "first" parameter of glDrawArrays.

libctru/include/3ds/gpu/gpu.h
libctru/include/3ds/gpu/registers.h
libctru/source/gpu/gpu.c

index 6d97393e8c5649bd2a77698f2b2227b1fcba361d..e2b3ac3c6ecfdb810eb5b4d24f50b6e85d9700e4 100644 (file)
@@ -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();
 
index aebc4af2fe53e7519f090635e93650251158073c..c8fd90e599ba86f09c21e831056a35ca423ff9e2 100644 (file)
 #define GPUREG_INDEXBUFFER_CONFIG 0x0227\r
 #define GPUREG_NUMVERTICES 0x0228\r
 #define GPUREG_GEOSTAGE_CONFIG 0x0229\r
-#define GPUREG_022A 0x022A\r
+#define GPUREG_DRAW_VERTEX_OFFSET 0x022A\r
 #define GPUREG_022B 0x022B\r
 #define GPUREG_022C 0x022C\r
 #define GPUREG_022D 0x022D\r
index 45f4c4e656cc0df9d3f84eee0236e79f23b65fb1..7483294c118210f76a17f4285ead312d0bf2bab2 100644 (file)
@@ -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);