2
* Copyright 2010 Inalogic Inc.
4
* This program is free software: you can redistribute it and/or modify it
5
* under the terms of the GNU Lesser General Public License version 3, as
6
* published by the Free Software Foundation.
8
* This program is distributed in the hope that it will be useful, but
9
* WITHOUT ANY WARRANTY; without even the implied warranties of
10
* MERCHANTABILITY, SATISFACTORY QUALITY or FITNESS FOR A PARTICULAR
11
* PURPOSE. See the applicable version of the GNU Lesser General Public
12
* License for more details.
14
* You should have received a copy of both the GNU Lesser General Public
15
* License version 3 along with this program. If not, see
16
* <http://www.gnu.org/licenses/>
18
* Authored by: Jay Taoko <jay.taoko_AT_gmail_DOT_com>
23
#include "GLResource.h"
24
#include "IOpenGLResource.h"
25
#include "IOpenGLBaseTexture.h"
26
#include "IOpenGLIndexBuffer.h"
27
#include "IOpenGLVertexBuffer.h"
28
#include "RunTimeStats.h"
33
INL_IMPLEMENT_GLOBAL_OBJECT(RenderingStats);
35
t_u32 RenderingStats::m_NumTex2D = 0;
36
t_u32 RenderingStats::m_GPUSizeTex2D = 0;
37
t_u32 RenderingStats::m_NumTexRectangle = 0;
38
t_u32 RenderingStats::m_GPUSizeTexRectangle = 0;
39
t_u32 RenderingStats::m_NumTexCube = 0;
40
t_u32 RenderingStats::m_GPUSizeTexCube = 0;
41
t_u32 RenderingStats::m_NumTexVolume = 0;
42
t_u32 RenderingStats::m_GPUSizeTexVolume = 0;
44
t_u32 RenderingStats::m_NumTexAnimated = 0;
45
t_u32 RenderingStats::m_GPUSizeTexAnimated = 0;
47
t_u32 RenderingStats::m_NumPBO = 0; // Counted as Vertex Buffer
48
t_u32 RenderingStats::m_GPUSizePBO = 0; // Counted as Vertex Buffer
49
t_u32 RenderingStats::m_NumQueryObject = 0;
50
t_u32 RenderingStats::m_NumFrameBufferObject = 0;
51
t_u32 RenderingStats::m_NumVertexBuffer = 0;
52
t_u32 RenderingStats::m_GPUSizeVertexBuffer = 0;
53
t_u32 RenderingStats::m_NumIndexBuffer = 0;
54
t_u32 RenderingStats::m_GPUSizeIndexBuffer = 0;
55
t_u32 RenderingStats::m_NumVertexShader = 0;
56
t_u32 RenderingStats::m_NumPixelShader = 0;
57
t_u32 RenderingStats::m_NumShaderProgram = 0;
59
t_u32 RenderingStats::m_TotalGPUSize = 0;
61
void RenderingStats::Constructor()
66
void RenderingStats::Destructor()
68
if(m_NumIndexBuffer != 0)
70
nuxDebugMsg(TEXT("[RenderingStats::Destructor] Some index buffers have not been released."));
75
nuxDebugMsg(TEXT("[RenderingStats::Destructor] Some 2D textures have not been released."));
76
std::vector<int>::iterator it;
77
for(it = v.begin(); it != v.end(); it++)
79
nuxDebugMsg(TEXT("[RenderingStats::Destructor] Remaining 2D textures: %d."), *it);
83
if(m_NumTexRectangle != 0)
85
nuxDebugMsg(TEXT("[RenderingStats::Destructor] Some rectangle textures buffers have not been released."));
89
void RenderingStats::Register(IOpenGLResource* GraphicsObject)
91
switch (GraphicsObject->GetResourceType())
96
m_GPUSizeIndexBuffer += INL_REINTERPRET_CAST(IOpenGLIndexBuffer*, GraphicsObject)->GetSize();
97
m_TotalGPUSize += m_GPUSizeIndexBuffer;
103
m_GPUSizeVertexBuffer += INL_REINTERPRET_CAST(IOpenGLVertexBuffer*, GraphicsObject)->GetSize();
104
m_TotalGPUSize += m_GPUSizeVertexBuffer;
109
v.push_back(INL_STATIC_CAST(IOpenGLBaseTexture*, GraphicsObject)->GetOpenGLID());
111
m_GPUSizeTex2D += GetTextureSize(INL_REINTERPRET_CAST(IOpenGLBaseTexture*, GraphicsObject));
112
m_TotalGPUSize += m_GPUSizeTex2D;
115
case RTTEXTURERECTANGLE:
118
m_GPUSizeTexRectangle += GetTextureSize(INL_REINTERPRET_CAST(IOpenGLBaseTexture*, GraphicsObject));
119
m_TotalGPUSize += m_GPUSizeTexRectangle;
125
m_GPUSizeTexCube += GetTextureSize(INL_STATIC_CAST(IOpenGLBaseTexture*, GraphicsObject));
126
m_TotalGPUSize += m_GPUSizeTexCube;
129
case RTVOLUMETEXTURE:
132
m_GPUSizeTexVolume += GetTextureSize(INL_STATIC_CAST(IOpenGLBaseTexture*, GraphicsObject));
133
m_TotalGPUSize += m_GPUSizeTexVolume;
136
case RTANIMATEDTEXTURE:
138
// Animated texture size is compted as rectangle textures;
147
case RTFRAMEBUFFEROBJECT:
149
m_NumFrameBufferObject++;
154
void RenderingStats::UnRegister(IOpenGLResource* GraphicsObject)
156
switch (GraphicsObject->GetResourceType())
161
m_GPUSizeIndexBuffer -= INL_REINTERPRET_CAST(IOpenGLIndexBuffer*, GraphicsObject)->GetSize();
162
m_TotalGPUSize -= m_GPUSizeIndexBuffer;
168
m_GPUSizeVertexBuffer -= INL_REINTERPRET_CAST(IOpenGLVertexBuffer*, GraphicsObject)->GetSize();
169
m_TotalGPUSize -= m_GPUSizeVertexBuffer;
174
std::vector<int>::iterator it;
175
it = std::find(v.begin(), v.end(), INL_STATIC_CAST(IOpenGLBaseTexture*, GraphicsObject)->GetOpenGLID());
179
m_GPUSizeTex2D -= GetTextureSize(INL_REINTERPRET_CAST(IOpenGLBaseTexture*, GraphicsObject));
180
m_TotalGPUSize -= m_GPUSizeTex2D;
183
case RTTEXTURERECTANGLE:
186
m_GPUSizeTexRectangle -= GetTextureSize(INL_REINTERPRET_CAST(IOpenGLBaseTexture*, GraphicsObject));
187
m_TotalGPUSize -= m_GPUSizeTexRectangle;
193
m_GPUSizeTexCube -= GetTextureSize(INL_STATIC_CAST(IOpenGLBaseTexture*, GraphicsObject));
194
m_TotalGPUSize -= m_GPUSizeTexCube;
197
case RTVOLUMETEXTURE:
200
m_GPUSizeTexVolume -= GetTextureSize(INL_STATIC_CAST(IOpenGLBaseTexture*, GraphicsObject));
201
m_TotalGPUSize -= m_GPUSizeTexVolume;
204
case RTANIMATEDTEXTURE:
206
// Animated texture size is compted as rectangle textures;
215
case RTFRAMEBUFFEROBJECT:
217
m_NumFrameBufferObject--;