1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
|
/*
* Copyright (C) 2005-2013 Team XBMC
* http://xbmc.org
*
* This Program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This Program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with XBMC; see the file COPYING. If not, see
* <http://www.gnu.org/licenses/>.
*
*/
#include "system.h"
#include "GLUtils.h"
#include "log.h"
#include "settings/AdvancedSettings.h"
#include "windowing/WindowingFactory.h"
void _VerifyGLState(const char* szfile, const char* szfunction, int lineno){
#if defined(HAS_GL) && defined(_DEBUG)
#define printMatrix(matrix) \
{ \
for (int ixx = 0 ; ixx<4 ; ixx++) \
{ \
CLog::Log(LOGDEBUG, "% 3.3f % 3.3f % 3.3f % 3.3f ", \
matrix[ixx*4], matrix[ixx*4+1], matrix[ixx*4+2], \
matrix[ixx*4+3]); \
} \
}
if (g_advancedSettings.m_logLevel < LOG_LEVEL_DEBUG_FREEMEM)
return;
GLenum err = glGetError();
if (err==GL_NO_ERROR)
return;
CLog::Log(LOGERROR, "GL ERROR: %s\n", gluErrorString(err));
if (szfile && szfunction)
CLog::Log(LOGERROR, "In file:%s function:%s line:%d", szfile, szfunction, lineno);
GLboolean bools[16];
GLfloat matrix[16];
glGetFloatv(GL_SCISSOR_BOX, matrix);
CLog::Log(LOGDEBUG, "Scissor box: %f, %f, %f, %f", matrix[0], matrix[1], matrix[2], matrix[3]);
glGetBooleanv(GL_SCISSOR_TEST, bools);
CLog::Log(LOGDEBUG, "Scissor test enabled: %d", (int)bools[0]);
glGetFloatv(GL_VIEWPORT, matrix);
CLog::Log(LOGDEBUG, "Viewport: %f, %f, %f, %f", matrix[0], matrix[1], matrix[2], matrix[3]);
glGetFloatv(GL_PROJECTION_MATRIX, matrix);
CLog::Log(LOGDEBUG, "Projection Matrix:");
printMatrix(matrix);
glGetFloatv(GL_MODELVIEW_MATRIX, matrix);
CLog::Log(LOGDEBUG, "Modelview Matrix:");
printMatrix(matrix);
// abort();
#endif
}
void LogGraphicsInfo()
{
#if defined(HAS_GL) || defined(HAS_GLES)
const GLubyte *s;
s = glGetString(GL_VENDOR);
if (s)
CLog::Log(LOGNOTICE, "GL_VENDOR = %s", s);
else
CLog::Log(LOGNOTICE, "GL_VENDOR = NULL");
s = glGetString(GL_RENDERER);
if (s)
CLog::Log(LOGNOTICE, "GL_RENDERER = %s", s);
else
CLog::Log(LOGNOTICE, "GL_RENDERER = NULL");
s = glGetString(GL_VERSION);
if (s)
CLog::Log(LOGNOTICE, "GL_VERSION = %s", s);
else
CLog::Log(LOGNOTICE, "GL_VERSION = NULL");
s = glGetString(GL_SHADING_LANGUAGE_VERSION);
if (s)
CLog::Log(LOGNOTICE, "GL_SHADING_LANGUAGE_VERSION = %s", s);
else
CLog::Log(LOGNOTICE, "GL_SHADING_LANGUAGE_VERSION = NULL");
//GL_NVX_gpu_memory_info extension
#define GL_GPU_MEMORY_INFO_DEDICATED_VIDMEM_NVX 0x9047
#define GL_GPU_MEMORY_INFO_TOTAL_AVAILABLE_MEMORY_NVX 0x9048
#define GL_GPU_MEMORY_INFO_CURRENT_AVAILABLE_VIDMEM_NVX 0x9049
#define GL_GPU_MEMORY_INFO_EVICTION_COUNT_NVX 0x904A
#define GL_GPU_MEMORY_INFO_EVICTED_MEMORY_NVX 0x904B
if (g_Windowing.IsExtSupported("GL_NVX_gpu_memory_info"))
{
GLint mem = 0;
glGetIntegerv(GL_GPU_MEMORY_INFO_TOTAL_AVAILABLE_MEMORY_NVX, &mem);
CLog::Log(LOGNOTICE, "GL_GPU_MEMORY_INFO_TOTAL_AVAILABLE_MEMORY_NVX = %i", mem);
//this seems to be the amount of ram on the videocard
glGetIntegerv(GL_GPU_MEMORY_INFO_DEDICATED_VIDMEM_NVX, &mem);
CLog::Log(LOGNOTICE, "GL_GPU_MEMORY_INFO_DEDICATED_VIDMEM_NVX = %i", mem);
}
s = glGetString(GL_EXTENSIONS);
if (s)
CLog::Log(LOGNOTICE, "GL_EXTENSIONS = %s", s);
else
CLog::Log(LOGNOTICE, "GL_EXTENSIONS = NULL");
#else /* !HAS_GL */
CLog::Log(LOGNOTICE,
"Please define LogGraphicsInfo for your chosen graphics libary");
#endif /* !HAS_GL */
}
int glFormatElementByteCount(GLenum format)
{
switch (format)
{
#ifndef HAS_GLES
case GL_BGRA:
#endif
case GL_RGBA:
return 4;
#ifndef HAS_GLES
case GL_BGR:
#endif
case GL_RGB:
return 3;
case GL_LUMINANCE_ALPHA:
return 2;
case GL_LUMINANCE:
case GL_ALPHA:
return 1;
default:
CLog::Log(LOGERROR, "glFormatElementByteCount - Unknown format %u", format);
return 1;
}
}
|