1 /*---------------------------------------------------------------------------*
2   Project:  Horizon
3   File:     demo_DisplayBuffers.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_DISPLAY_BUFFERS_H_
17 #define DEMO_DISPLAY_BUFFERS_H_
18 
19 #include "demo/Utility/demo_Utility.h"
20 
21 namespace demo
22 {
23     const u32 DEMO_DISPLAY_BUFFER_NUM = 2;
24 
25     /*!
26         @brief Class to maintain data from multiple display buffers to create
27     */
28 
29     class DisplayBuffersDescription
30     {
31     public:
32         DisplayBuffersDescription(void);
33         virtual ~DisplayBuffersDescription(void);
34 
35     public:
36         GLenum m_TargetDisplay;
37         u32 m_DisplayBufferNum;
38         GLenum m_Format;
39         u32 m_Width;
40         u32 m_Height;
41         GLenum m_Area;
42 
43     public:
44         static DisplayBuffersDescription GetDefaultDisplay0Description(void);
45         static DisplayBuffersDescription GetDefaultDisplay1Description(void);
46         static DisplayBuffersDescription GetDefaultDisplay0ExtDescription(void);
47     };
48 
49 
50     /*!
51         @brief Multiple display buffer class
52     */
53 
54     class DisplayBuffers :  private nn::util::NonCopyable<DisplayBuffers>
55     {
56     public:
57         DisplayBuffers(void);
58         virtual ~DisplayBuffers(void);
59 
60     protected:
61         void Initialize(const DisplayBuffersDescription& displayBufferDescription);
62         void Finalize(void);
63 
64     public:
65         static void Create(const DisplayBuffersDescription& displayBuffersDesc,
66             DisplayBuffers& displayBuffers);
67         static void Destroy(DisplayBuffers& displayBuffers);
68 
69     public:
70         GLuint GetTargetDisplayBufferId(void) const;
71         GLuint GetPreviousTargetDisplayBufferId(void) const;
72         GLuint GetDisplayBufferId(const u32 index) const;
73         void Bind(void);
74         void IncreaseBufferIndex(void);
75 
76     public:
77         u32 GetWidth(void) const;
78         u32 GetHeight(void) const;
79     protected:
80         bool m_InitializeFlag;
81         bool m_Padding[3];
82 
83         GLenum m_TargetDisplay;
84         u32 m_DisplayBufferNum;
85         GLuint m_DisplayBufferIdArray[DEMO_DISPLAY_BUFFER_NUM];
86         u32 m_CurrentBufferIndex;
87 
88         u32 m_Width;
89         u32 m_Height;
90     };
91 
92 }
93 
94 #endif
95