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