1 /*---------------------------------------------------------------------------*
2   Project:  Horizon
3   File:     demo_RenderSystem.h
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: 46365 $
14  *---------------------------------------------------------------------------*/
15 
16 #ifndef DEMO_RENDER_SYSTEM_H_
17 #define DEMO_RENDER_SYSTEM_H_
18 
19 #include <nn/gx.h>
20 
21 #include "demo/Utility/demo_Utility.h"
22 #include "demo/Utility/demo_MemoryManager.h"
23 
24 #include "demo/Render/demo_DisplayBuffers.h"
25 #include "demo/Render/demo_FrameBuffer.h"
26 #include "demo/Render/demo_CommandList.h"
27 
28 #include "demo/ShaderProgram/demo_ShaderManager.h"
29 
30 namespace demo
31 {
32     /* Please see man pages for details
33 
34 
35     */
36 
37     class RenderSystem : private nn::util::NonCopyable<RenderSystem>
38     {
39     public:
40         RenderSystem(void);
41         virtual ~RenderSystem(void);
42 
43     public:
44         virtual void Initialize(const uptr fcramAddress, const size_t memorySize,
45             const u32 commandBufferSize = 0x40000, const u32 requestNum = 128,
46             const bool serialRunMode = true,
47             const DisplayBuffersDescription& displayBuffers0Desc = DisplayBuffersDescription::GetDefaultDisplay0Description(),
48             const DisplayBuffersDescription& displayBuffers1Desc = DisplayBuffersDescription::GetDefaultDisplay1Description(),
49             const FrameBufferDescription& frameBuffer0Desc = FrameBufferDescription::GetDefaultDisplay0FrameBufferDescription(),
50             const DisplayBuffersDescription& displayBuffers0ExtDesc = DisplayBuffersDescription::GetDefaultDisplay0ExtDescription(),
51             const bool isFillBlackLCD = true );
52         virtual void Finalize(void);
53     protected:
54         virtual void InitializeLcdDisplay(void);
55 
56     public:
57         virtual void SetRenderTarget(const GLenum targetDisplay);
58         virtual void SetViewport(const GLint x, const GLint y, const GLsizei width, const GLsizei height);
59 
60         virtual void Clear(const GLbitfield mask = (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT) );
61         virtual void ClearColorDepthStencilBuffer(const GLclampf red, const GLclampf green,
62             const GLclampf blue, const GLclampf alpha,
63             const GLclampf depth = 1.0f, const GLclampf stencil = 0.0f);
64         virtual void ClearColorDepthBuffer(const GLclampf red, const GLclampf green,
65             const GLclampf blue, const GLclampf alpha,
66             const GLclampf depth = 1.0f);
67         virtual void ClearColorBuffer(const GLclampf red, const GLclampf green,
68             const GLclampf blue, const GLclampf alpha);
69         virtual void ClearDepthStencilBuffer(const GLclampf depth = 1.0f, const GLclampf stencil = 0.0f);
70 
71     public:
72         virtual void GetDisplayBufferObjectId(const GLenum targetDisplay,
73             GLuint& DisplayBufferId0, GLuint& DisplayBufferId1);
74         virtual GLuint GetFrameBufferObjectId(const GLenum targetDisplay);
75         virtual GLuint GetRenderBufferObjectId(const GLenum targetDisplay, const GLenum renderBufferType);
76 
77     public:
78         virtual void SwapBuffers(void);
79         virtual void WaitVsync(const GLenum targetDisplay);
80         virtual void SetSerialRun(const bool flag);
81         virtual void CheckRenderTarget(void);
82 
83     protected:
84         bool m_InitializeFlag;
85         bool m_InitializeLcdDisplayFlag;
86         bool m_Padding[2];
87 
88         GLenum m_TargetDisplay;
89 
90         DisplayBuffers* m_CurrentDisplayBuffersPtr;
91         FrameBuffer* m_CurrentFrameBufferPtr;
92 
93         DisplayBuffers m_DisplayBuffers0;
94         FrameBuffer m_FrameBuffer0;
95 
96         DisplayBuffers m_DisplayBuffers1;
97 
98         CommandList m_CommandList;
99     };
100 
101 }
102 
103 #endif
104