1 /*---------------------------------------------------------------------------* 2 Project: Horizon 3 File: demo_DisplayBuffers.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: 46365 $ 14 *---------------------------------------------------------------------------*/ 15 16 #include "demo/Render/demo_DisplayBuffers.h" 17 18 namespace demo 19 { 20 21 /* ------------------------------------------------------------------------ 22 DisplayBuffersDescription class member function 23 ------------------------------------------------------------------------ */ 24 DisplayBuffersDescription(void)25 DisplayBuffersDescription::DisplayBuffersDescription(void) : 26 m_TargetDisplay(NN_GX_DISPLAY0), 27 m_DisplayBufferNum(DEMO_DISPLAY_BUFFER_NUM), 28 m_Format(GL_RGB8_OES), 29 m_Width(nn::gx::DISPLAY0_WIDTH), m_Height(nn::gx::DISPLAY0_HEIGHT), 30 m_Area(NN_GX_MEM_FCRAM) 31 { 32 } 33 ~DisplayBuffersDescription(void)34 DisplayBuffersDescription::~DisplayBuffersDescription(void) 35 { 36 } 37 GetDefaultDisplay0Description(void)38 DisplayBuffersDescription DisplayBuffersDescription::GetDefaultDisplay0Description(void) 39 { 40 DisplayBuffersDescription displayBuffersDesc; 41 displayBuffersDesc.m_TargetDisplay = NN_GX_DISPLAY0; 42 displayBuffersDesc.m_DisplayBufferNum = DEMO_DISPLAY_BUFFER_NUM; 43 displayBuffersDesc.m_Format = GL_RGB8_OES; 44 displayBuffersDesc.m_Width = nn::gx::DISPLAY0_WIDTH; 45 displayBuffersDesc.m_Height = nn::gx::DISPLAY0_HEIGHT; 46 displayBuffersDesc.m_Area = NN_GX_MEM_FCRAM; 47 48 return displayBuffersDesc; 49 } 50 GetDefaultDisplay1Description(void)51 DisplayBuffersDescription DisplayBuffersDescription::GetDefaultDisplay1Description(void) 52 { 53 DisplayBuffersDescription displayBuffersDesc; 54 displayBuffersDesc.m_TargetDisplay = NN_GX_DISPLAY1; 55 displayBuffersDesc.m_DisplayBufferNum = DEMO_DISPLAY_BUFFER_NUM; 56 displayBuffersDesc.m_Format = GL_RGB8_OES; 57 displayBuffersDesc.m_Width = nn::gx::DISPLAY1_WIDTH; 58 displayBuffersDesc.m_Height = nn::gx::DISPLAY1_HEIGHT; 59 displayBuffersDesc.m_Area = NN_GX_MEM_FCRAM; 60 61 return displayBuffersDesc; 62 } 63 GetDefaultDisplay0ExtDescription(void)64 DisplayBuffersDescription DisplayBuffersDescription::GetDefaultDisplay0ExtDescription(void) 65 { 66 DisplayBuffersDescription displayBuffersDesc; 67 displayBuffersDesc.m_TargetDisplay = NN_GX_DISPLAY0_EXT; 68 displayBuffersDesc.m_Format = GL_RGB8_OES; 69 displayBuffersDesc.m_Width = nn::gx::DISPLAY0_WIDTH; 70 displayBuffersDesc.m_Height = nn::gx::DISPLAY0_HEIGHT; 71 displayBuffersDesc.m_Area = NN_GX_MEM_FCRAM; 72 displayBuffersDesc.m_DisplayBufferNum = 2; 73 74 return displayBuffersDesc; 75 } 76 77 /* ------------------------------------------------------------------------ 78 DisplayBuffers class member function 79 ------------------------------------------------------------------------ */ 80 DisplayBuffers(void)81 DisplayBuffers::DisplayBuffers(void) : 82 m_InitializeFlag(false), 83 m_TargetDisplay(NN_GX_DISPLAY0), 84 m_DisplayBufferNum(DEMO_DISPLAY_BUFFER_NUM), 85 m_CurrentBufferIndex(0), 86 m_Width(nn::gx::DISPLAY0_WIDTH), m_Height(nn::gx::DISPLAY0_HEIGHT) 87 { 88 } 89 ~DisplayBuffers(void)90 DisplayBuffers::~DisplayBuffers(void) 91 { 92 Finalize(); 93 } 94 Initialize(const DisplayBuffersDescription & displayBufferDesc)95 void DisplayBuffers::Initialize(const DisplayBuffersDescription& displayBufferDesc) 96 { 97 if ( ! m_InitializeFlag ) 98 { 99 m_TargetDisplay = displayBufferDesc.m_TargetDisplay; 100 101 m_DisplayBufferNum = displayBufferDesc.m_DisplayBufferNum; 102 103 m_Width = displayBufferDesc.m_Width; 104 m_Height = displayBufferDesc.m_Height; 105 106 nngxActiveDisplay(displayBufferDesc.m_TargetDisplay); 107 nngxGenDisplaybuffers(m_DisplayBufferNum, m_DisplayBufferIdArray); 108 109 for (u32 bufferIndex = 0; bufferIndex < m_DisplayBufferNum; bufferIndex++) 110 { 111 nngxBindDisplaybuffer(m_DisplayBufferIdArray[bufferIndex]); 112 nngxDisplaybufferStorage(displayBufferDesc.m_Format, 113 displayBufferDesc.m_Width, displayBufferDesc.m_Height, 114 displayBufferDesc.m_Area); 115 DEMO_ASSERT_GL_ERROR(); 116 } 117 118 nngxDisplayEnv(0, 0); 119 m_InitializeFlag = true; 120 121 DEMO_ASSERT_GL_ERROR(); 122 } 123 } 124 Finalize(void)125 void DisplayBuffers::Finalize(void) 126 { 127 if ( m_InitializeFlag ) 128 { 129 nngxBindDisplaybuffer(0); 130 DEMO_ASSERT_GL_ERROR(); 131 132 nngxDeleteDisplaybuffers(m_DisplayBufferNum, m_DisplayBufferIdArray); 133 DEMO_ASSERT_GL_ERROR(); 134 135 for (u32 bufferIndex = 0; bufferIndex < m_DisplayBufferNum; bufferIndex++) 136 { 137 m_DisplayBufferIdArray[bufferIndex] = 0; 138 } 139 140 m_InitializeFlag = false; 141 } 142 } 143 Create(const DisplayBuffersDescription & displayBuffersDesc,DisplayBuffers & displayBuffers)144 void DisplayBuffers::Create(const DisplayBuffersDescription& displayBuffersDesc, 145 DisplayBuffers& displayBuffers) 146 { 147 displayBuffers.Initialize(displayBuffersDesc); 148 } 149 Destroy(DisplayBuffers & displayBuffers)150 void DisplayBuffers::Destroy(DisplayBuffers& displayBuffers) 151 { 152 displayBuffers.Finalize(); 153 } 154 GetTargetDisplayBufferId(void) const155 GLuint DisplayBuffers::GetTargetDisplayBufferId(void) const 156 { 157 return m_DisplayBufferIdArray[m_CurrentBufferIndex]; 158 } 159 GetPreviousTargetDisplayBufferId(void) const160 GLuint DisplayBuffers::GetPreviousTargetDisplayBufferId(void) const 161 { 162 if ( m_CurrentBufferIndex == 0 ) 163 { 164 return m_DisplayBufferIdArray[m_DisplayBufferNum - 1]; 165 } 166 else 167 { 168 return m_DisplayBufferIdArray[m_CurrentBufferIndex - 1]; 169 } 170 } 171 GetDisplayBufferId(const u32 index) const172 GLuint DisplayBuffers::GetDisplayBufferId(const u32 index) const 173 { 174 if ( index < m_DisplayBufferNum ) 175 { 176 return m_DisplayBufferIdArray[m_CurrentBufferIndex]; 177 } 178 else 179 { 180 return 0; 181 } 182 } 183 Bind(void)184 void DisplayBuffers::Bind(void) 185 { 186 nngxActiveDisplay(m_TargetDisplay); 187 nngxBindDisplaybuffer(m_DisplayBufferIdArray[m_CurrentBufferIndex]); 188 } 189 IncreaseBufferIndex(void)190 void DisplayBuffers::IncreaseBufferIndex(void) 191 { 192 m_CurrentBufferIndex++; 193 if ( m_CurrentBufferIndex >= m_DisplayBufferNum ) 194 { 195 m_CurrentBufferIndex = 0; 196 } 197 } 198 GetWidth(void) const199 u32 DisplayBuffers::GetWidth(void) const 200 { 201 return m_Width; 202 } 203 GetHeight(void) const204 u32 DisplayBuffers::GetHeight(void) const 205 { 206 return m_Height; 207 } 208 209 } 210