last bit of modif

This commit is contained in:
Lectem 2015-03-24 00:11:52 +01:00
parent 56556baaa7
commit 134f27f520
2 changed files with 25 additions and 14 deletions

View File

@ -26,7 +26,7 @@
dp4 outpos.z, projection[2], r0 dp4 outpos.z, projection[2], r0
dp4 outpos.w, projection[3], r0 dp4 outpos.w, projection[3], r0
; Set vertex color to white ; Set vertex color to white rgba => (1.0,1.0,1.0,1.0)
mov outclr, ones mov outclr, ones
end end
.end .end

View File

@ -1,3 +1,14 @@
/**
* Hello Triangle example, made by Lectem
*
* Draws a white triangle using the 3DS GPU.
* This example should give you enough hints and links on how to use the GPU for basic non-textured rendering.
* Another version of this example will be made with colors.
*
* Thanks to smea, fincs, neobrain, xerpi and all those who helped me understand how the 3DS GPU works
*/
#include <3ds.h> #include <3ds.h>
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
@ -133,7 +144,7 @@ void gpuUIEndFrame()
GPUCMD_FlushAndRun(NULL); GPUCMD_FlushAndRun(NULL);
gspWaitForP3D();//Wait for the gpu 3d processing to be done gspWaitForP3D();//Wait for the gpu 3d processing to be done
//Copy the GPU output buffer to the screen framebuffer //Copy the GPU output buffer to the screen framebuffer
//See http://3dbrew.org/wiki/GPU#Transfer_Engine for more details about the transfer engine //See http://3dbrew.org/wiki/GPU#Transfer_Engine for more details about the transfer engine
GX_SetDisplayTransfer(NULL, gpuFBuffer, 0x019001E0, (u32*)gfxGetFramebuffer(GFX_TOP, GFX_LEFT, NULL, NULL), 0x019001E0, 0x01001000); GX_SetDisplayTransfer(NULL, gpuFBuffer, 0x019001E0, (u32*)gfxGetFramebuffer(GFX_TOP, GFX_LEFT, NULL, NULL), 0x019001E0, 0x01001000);
gspWaitForPPF(); gspWaitForPPF();
@ -153,9 +164,9 @@ void gpuUIEndFrame()
GPU_SetViewport((u32 *)osConvertVirtToPhys((u32)gpuDBuffer), GPU_SetViewport((u32 *)osConvertVirtToPhys((u32)gpuDBuffer),
(u32 *)osConvertVirtToPhys((u32)gpuFBuffer), (u32 *)osConvertVirtToPhys((u32)gpuFBuffer),
0, 0, 0, 0,
//Our screen is 400*240, but the GPU actually renders to 400*480 and then downscales it SetDisplayTransfer bit 24 is set //Our screen is 400*240, but the GPU actually renders to 400*480 and then downscales it SetDisplayTransfer bit 24 is set
//This is the case here (See http://3dbrew.org/wiki/GPU#0x1EF00C10 for more details) //This is the case here (See http://3dbrew.org/wiki/GPU#0x1EF00C10 for more details)
240*2, 400); 240*2, 400);
GPU_DepthMap(-1.0f, 0.0f); //Be careful, standard OpenGL clipping is [-1;1], but it is [-1;0] on the pica200 GPU_DepthMap(-1.0f, 0.0f); //Be careful, standard OpenGL clipping is [-1;1], but it is [-1;0] on the pica200
@ -183,11 +194,11 @@ void gpuUIEndFrame()
//Our data //Our data
static const vector_3f triangle_mesh[] = static const vector_3f triangle_mesh[] =
{ {
{240.0f+60.0f, 120.0f, 0.5f}, {240.0f+60.0f, 120.0f, 0.5f},
{240.0f-60.0f, 120.0f+60.0f, 0.5f}, {240.0f-60.0f, 120.0f+60.0f, 0.5f},
{240.0f-60.0f, 120.0f-60.0f, 0.5f} {240.0f-60.0f, 120.0f-60.0f, 0.5f}
}; };
static void* triangle_data = NULL; static void* triangle_data = NULL;
@ -222,7 +233,7 @@ int main(int argc, char** argv)
(u32[]) {0x0}, // buffer offsets (placeholders) (u32[]) {0x0}, // buffer offsets (placeholders)
(u64[]) {0x0}, // attribute permutations for each buffer (identity again) (u64[]) {0x0}, // attribute permutations for each buffer (identity again)
(u8[]) {1} // number of attributes for each buffer (u8[]) {1} // number of attributes for each buffer
); );
//Display the buffers data //Display the buffers data
GPU_DrawArray(GPU_TRIANGLES, sizeof(triangle_mesh) / sizeof(triangle_mesh[0])); GPU_DrawArray(GPU_TRIANGLES, sizeof(triangle_mesh) / sizeof(triangle_mesh[0]));
@ -237,7 +248,7 @@ int main(int argc, char** argv)
aptExit(); aptExit();
srvExit(); srvExit();
return 0; return 0;
} }