1 /*---------------------------------------------------------------------------*
2 Project: Horizon
3 File: gx_Draw2d.cpp
4
5 Copyright (C)2009-2012 Nintendo Co., Ltd. All rights reserved.
6
7 These coded instructions, statements, and computer programs contain
8 proprietary information of Nintendo of America Inc. and/or Nintendo
9 Company Ltd., and are protected by Federal copyright law. They may
10 not be disclosed to third parties or copied or duplicated in any form,
11 in whole or in part, without the prior written consent of Nintendo.
12
13 $Rev: 47228 $
14 *---------------------------------------------------------------------------*/
15
16 #include <nn.h>
17 #include <nn/types.h>
18 #include <nn/dbg.h>
19
20 #include <nn/os/os_Memory.h>
21 #include <nn/os/os_MemoryTypes.h>
22 #include <nn/fnd/fnd_ExpHeap.h>
23
24 #include <nn/gx.h>
25 #include <nn/fs.h>
26 #include <nn/applet.h>
27
28 #include "demo.h"
29
30 namespace
31 {
32 demo::RenderSystemDrawing s_RenderSystem;
33
34 nn::fnd::ExpHeap s_AppHeap;
35 uptr s_HeapForGx;
36 const u32 s_GxHeapSize = 0x800000;
37 }
38
39 void Initialize(void);
40 void Finalize(void);
41
42 bool DrawFrame(void);
43 void DrawDisplay0(void);
44 void DrawDisplay1(void);
45
Initialize(void)46 void Initialize(void)
47 {
48 s_AppHeap.Initialize(nn::os::GetDeviceMemoryAddress(),
49 nn::os::GetDeviceMemorySize() );
50 s_HeapForGx = reinterpret_cast<uptr>(s_AppHeap.Allocate(s_GxHeapSize));
51
52 s_RenderSystem.Initialize(s_HeapForGx, s_GxHeapSize);
53 }
54
Finalize(void)55 void Finalize(void)
56 {
57 s_RenderSystem.Finalize();
58
59 s_AppHeap.Free(reinterpret_cast<void*>(s_HeapForGx));
60 s_AppHeap.Finalize();
61 }
62
DrawFrame(void)63 bool DrawFrame(void)
64 {
65 DrawDisplay0();
66 DrawDisplay1();
67
68 s_RenderSystem.WaitVsync(NN_GX_DISPLAY_BOTH);
69
70 return true;
71 }
72
DrawDisplay0(void)73 void DrawDisplay0(void)
74 {
75 s_RenderSystem.SetClearColor(NN_GX_DISPLAY0, 0.1f, 1.0f, 0.1f, 1.0f);
76 s_RenderSystem.SetRenderTarget(NN_GX_DISPLAY0);
77 s_RenderSystem.Clear();
78
79 s_RenderSystem.SetColor(0.1f, 0.1f, 1.0f);
80 s_RenderSystem.SetFontSize(8.0f);
81 s_RenderSystem.DrawText(0.0f, 0.0f, "LeftTop 0123456789 %d", 123);
82
83 s_RenderSystem.SetColor(1.0f, 0.1f, 0.1f);
84 s_RenderSystem.SetFontSize(8.0f);
85 s_RenderSystem.DrawText(400.0f - 8.0f * 11, 240.0f - 8.0f, "RightBottom");
86
87 s_RenderSystem.SetColor(1.0f, 0.1f, 1.0f, 1.0f);
88 s_RenderSystem.FillTriangle(220.0f, 20.0f,
89 200.0f, 50.0f, 250.0f, 50.0f);
90
91 s_RenderSystem.SetColor(0.7f, 0.1f, 0.1f, 1.0f);
92 s_RenderSystem.FillRectangle(50.0f, 50.0f,
93 100.0f, 100.0f);
94
95 s_RenderSystem.SetColor(0.0f, 1.0f, 1.0f, 1.0f);
96 s_RenderSystem.FillSquare(300.0f, 80.0f,
97 300.0f - 60.0f, 80.0f + 20.0f,
98 300.0f, 80.0f + 40.0f,
99 300.0f + 60.0f, 80.0f + 20.0f);
100
101 s_RenderSystem.SetColor(0.1f, 0.1f, 0.7f);
102 s_RenderSystem.SetLineWidth(3.0f);
103 s_RenderSystem.DrawLine(250.0f, 150.0f, 350.0f, 200.0f);
104
105 s_RenderSystem.SetColor(1.0f, 1.0f, 0.0f);
106 for (u32 i = 0; i < 5; i++)
107 {
108 f32 value = static_cast<f32>(i);
109 s_RenderSystem.SetPointSize( 2.0f * ( value + 1.0f ) );
110 s_RenderSystem.DrawPoint(200.0f + 10.0f * value, 150.0f + 10.0f * value);
111 }
112
113 s_RenderSystem.SwapBuffers();
114 }
115
DrawDisplay1(void)116 void DrawDisplay1(void)
117 {
118 s_RenderSystem.SetClearColor(NN_GX_DISPLAY1, 0.1f, 0.1f, 1.0f, 1.0f);
119 s_RenderSystem.SetRenderTarget(NN_GX_DISPLAY1);
120 s_RenderSystem.Clear();
121
122 s_RenderSystem.SetColor(1.0f, 0.1f, 0.1f);
123 s_RenderSystem.SetFontSize(8.0f);
124 s_RenderSystem.DrawText(0.0f, 0.0f, "LeftTop 0123456789 %f", 123.0f);
125
126 s_RenderSystem.SetColor(1.0f, 1.0f, 1.0f);
127 s_RenderSystem.SetFontSize(8.0f);
128 s_RenderSystem.DrawText(320.0f - 8.0f * 11, 240.0f - 8.0f, "RightBottom");
129
130 s_RenderSystem.SwapBuffers();
131 }
132
nnMain(void)133 void nnMain( void )
134 {
135 // Call only nn::applet::Enable to also allow execution from the HOME Menu
136 // HOME Menu transitions, POWER Button presses, and sleep are all unsupported
137 nn::applet::Enable();
138
139 Initialize();
140
141 bool flag = true;
142 while ( flag )
143 {
144 flag = DrawFrame();
145 }
146
147 Finalize();
148 }
149