llgldbg.cpp
上传用户:king477883
上传日期:2021-03-01
资源大小:9553k
文件大小:8k
源码类别:

游戏引擎

开发平台:

C++ Builder

  1. /** 
  2.  * @file llgldbg.cpp
  3.  * @brief Definitions for OpenGL debugging support
  4.  *
  5.  * $LicenseInfo:firstyear=2001&license=viewergpl$
  6.  * 
  7.  * Copyright (c) 2001-2010, Linden Research, Inc.
  8.  * 
  9.  * Second Life Viewer Source Code
  10.  * The source code in this file ("Source Code") is provided by Linden Lab
  11.  * to you under the terms of the GNU General Public License, version 2.0
  12.  * ("GPL"), unless you have obtained a separate licensing agreement
  13.  * ("Other License"), formally executed by you and Linden Lab.  Terms of
  14.  * the GPL can be found in doc/GPL-license.txt in this distribution, or
  15.  * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
  16.  * 
  17.  * There are special exceptions to the terms and conditions of the GPL as
  18.  * it is applied to this Source Code. View the full text of the exception
  19.  * in the file doc/FLOSS-exception.txt in this software distribution, or
  20.  * online at
  21.  * http://secondlifegrid.net/programs/open_source/licensing/flossexception
  22.  * 
  23.  * By copying, modifying or distributing this software, you acknowledge
  24.  * that you have read and understood your obligations described above,
  25.  * and agree to abide by those obligations.
  26.  * 
  27.  * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
  28.  * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
  29.  * COMPLETENESS OR PERFORMANCE.
  30.  * $/LicenseInfo$
  31.  */
  32. // This file sets some global GL parameters, and implements some 
  33. // useful functions for GL operations.
  34. #include "linden_common.h"
  35. #include "llgldbg.h"
  36. #include "llgl.h"
  37. #include "llglheaders.h"
  38. //------------------------------------------------------------------------
  39. // cmstr()
  40. //------------------------------------------------------------------------
  41. const char *cmstr(int i)
  42. {
  43. switch( i )
  44. {
  45. case GL_EMISSION: return "GL_EMISSION";
  46. case GL_AMBIENT: return "GL_AMBIENT";
  47. case GL_DIFFUSE: return "GL_DIFFUSE";
  48. case GL_SPECULAR: return "GL_SPECULAR";
  49. case GL_AMBIENT_AND_DIFFUSE: return "GL_AMBIENT_AND_DIFFUSE";
  50. }
  51. return "UNKNOWN";
  52. }
  53. //------------------------------------------------------------------------
  54. // facestr()
  55. //------------------------------------------------------------------------
  56. const char *facestr(int i)
  57. {
  58. switch( i )
  59. {
  60. case GL_FRONT: return "GL_FRONT";
  61. case GL_BACK: return "GL_BACK";
  62. case GL_FRONT_AND_BACK: return "GL_FRONT_AND_BACK";
  63. }
  64. return "UNKNOWN";
  65. }
  66. //------------------------------------------------------------------------
  67. // boolstr()
  68. //------------------------------------------------------------------------
  69. const char *boolstr(int b)
  70. {
  71. return b ? "GL_TRUE" : "GL_FALSE";
  72. }
  73. //------------------------------------------------------------------------
  74. // fv4()
  75. //------------------------------------------------------------------------
  76. const char *fv4(F32 *f)
  77. {
  78. static char str[128];
  79. sprintf(str, "%8.3f %8.3f %8.3f %8.3f", f[0], f[1], f[2], f[3]);
  80. return str;
  81. }
  82. //------------------------------------------------------------------------
  83. // fv3()
  84. //------------------------------------------------------------------------
  85. const char *fv3(F32 *f)
  86. {
  87. static char str[128]; /* Flawfinder: ignore */
  88. snprintf(str, sizeof(str), "%8.3f, %8.3f, %8.3f", f[0], f[1], f[2]); /* Flawfinder: ignore */
  89. return str;
  90. }
  91. //------------------------------------------------------------------------
  92. // fv1()
  93. //------------------------------------------------------------------------
  94. const char *fv1(F32 *f)
  95. {
  96. static char str[128]; /* Flawfinder: ignore */
  97. snprintf(str, sizeof(str), "%8.3f", f[0]); /* Flawfinder: ignore */
  98. return str;
  99. }
  100. //------------------------------------------------------------------------
  101. // llgl_dump()
  102. //------------------------------------------------------------------------
  103. void llgl_dump()
  104. {
  105. int i;
  106. F32 fv[16];
  107. GLboolean b;
  108. llinfos << "==========================" << llendl;
  109. llinfos << "OpenGL State" << llendl;
  110. llinfos << "==========================" << llendl;
  111. llinfos << "-----------------------------------" << llendl;
  112. llinfos << "Current Values" << llendl;
  113. llinfos << "-----------------------------------" << llendl;
  114. glGetFloatv(GL_CURRENT_COLOR, fv);
  115. llinfos << "GL_CURRENT_COLOR          : " << fv4(fv) << llendl;
  116. glGetFloatv(GL_CURRENT_NORMAL, fv);
  117. llinfos << "GL_CURRENT_NORMAL          : " << fv3(fv) << llendl;
  118. llinfos << "-----------------------------------" << llendl;
  119. llinfos << "Lighting" << llendl;
  120. llinfos << "-----------------------------------" << llendl;
  121. llinfos << "GL_LIGHTING                : " << boolstr(glIsEnabled(GL_LIGHTING)) << llendl;
  122. llinfos << "GL_COLOR_MATERIAL          : " << boolstr(glIsEnabled(GL_COLOR_MATERIAL)) << llendl;
  123. glGetIntegerv(GL_COLOR_MATERIAL_PARAMETER, (GLint*)&i);
  124. llinfos << "GL_COLOR_MATERIAL_PARAMETER: " << cmstr(i) << llendl;
  125. glGetIntegerv(GL_COLOR_MATERIAL_FACE, (GLint*)&i);
  126. llinfos << "GL_COLOR_MATERIAL_FACE     : " << facestr(i) << llendl;
  127. fv[0] = fv[1] = fv[2] = fv[3] = 12345.6789f;
  128. glGetMaterialfv(GL_FRONT, GL_AMBIENT, fv);
  129. llinfos << "GL_AMBIENT material        : " << fv4(fv) << llendl;
  130. fv[0] = fv[1] = fv[2] = fv[3] = 12345.6789f;
  131. glGetMaterialfv(GL_FRONT, GL_DIFFUSE, fv);
  132. llinfos << "GL_DIFFUSE material        : " << fv4(fv) << llendl;
  133. fv[0] = fv[1] = fv[2] = fv[3] = 12345.6789f;
  134. glGetMaterialfv(GL_FRONT, GL_SPECULAR, fv);
  135. llinfos << "GL_SPECULAR material       : " << fv4(fv) << llendl;
  136. fv[0] = fv[1] = fv[2] = fv[3] = 12345.6789f;
  137. glGetMaterialfv(GL_FRONT, GL_EMISSION, fv);
  138. llinfos << "GL_EMISSION material       : " << fv4(fv) << llendl;
  139. fv[0] = fv[1] = fv[2] = fv[3] = 12345.6789f;
  140. glGetMaterialfv(GL_FRONT, GL_SHININESS, fv);
  141. llinfos << "GL_SHININESS material      : " << fv1(fv) << llendl;
  142. fv[0] = fv[1] = fv[2] = fv[3] = 12345.6789f;
  143. glGetFloatv(GL_LIGHT_MODEL_AMBIENT, fv);
  144. llinfos << "GL_LIGHT_MODEL_AMBIENT     : " << fv4(fv) << llendl;
  145. glGetBooleanv(GL_LIGHT_MODEL_LOCAL_VIEWER, &b);
  146. llinfos << "GL_LIGHT_MODEL_LOCAL_VIEWER: " << boolstr(b) << llendl;
  147. glGetBooleanv(GL_LIGHT_MODEL_TWO_SIDE, &b);
  148. llinfos << "GL_LIGHT_MODEL_TWO_SIDE    : " << boolstr(b) << llendl;
  149. for (int l=0; l<8; l++)
  150. {
  151. b = glIsEnabled(GL_LIGHT0+l);
  152. llinfos << "GL_LIGHT" << l << "                  : " << boolstr(b) << llendl;
  153. if (!b)
  154. continue;
  155. glGetLightfv(GL_LIGHT0+l, GL_AMBIENT, fv);
  156. llinfos << "  GL_AMBIENT light         : " << fv4(fv) << llendl;
  157. glGetLightfv(GL_LIGHT0+l, GL_DIFFUSE, fv);
  158. llinfos << "  GL_DIFFUSE light         : " << fv4(fv) << llendl;
  159. glGetLightfv(GL_LIGHT0+l, GL_SPECULAR, fv);
  160. llinfos << "  GL_SPECULAR light        : " << fv4(fv) << llendl;
  161. glGetLightfv(GL_LIGHT0+l, GL_POSITION, fv);
  162. llinfos << "  GL_POSITION light        : " << fv4(fv) << llendl;
  163. glGetLightfv(GL_LIGHT0+l, GL_CONSTANT_ATTENUATION, fv);
  164. llinfos << "  GL_CONSTANT_ATTENUATION  : " << fv1(fv) << llendl;
  165. glGetLightfv(GL_LIGHT0+l, GL_QUADRATIC_ATTENUATION, fv);
  166. llinfos << "  GL_QUADRATIC_ATTENUATION : " << fv1(fv) << llendl;
  167. glGetLightfv(GL_LIGHT0+l, GL_SPOT_DIRECTION, fv);
  168. llinfos << "  GL_SPOT_DIRECTION        : " << fv4(fv) << llendl;
  169. glGetLightfv(GL_LIGHT0+l, GL_SPOT_EXPONENT, fv);
  170. llinfos << "  GL_SPOT_EXPONENT         : " << fv1(fv) << llendl;
  171. glGetLightfv(GL_LIGHT0+l, GL_SPOT_CUTOFF, fv);
  172. llinfos << "  GL_SPOT_CUTOFF           : " << fv1(fv) << llendl;
  173. }
  174. llinfos << "-----------------------------------" << llendl;
  175. llinfos << "Pixel Operations" << llendl;
  176. llinfos << "-----------------------------------" << llendl;
  177. llinfos << "GL_ALPHA_TEST              : " << boolstr(glIsEnabled(GL_ALPHA_TEST)) << llendl;
  178. llinfos << "GL_DEPTH_TEST              : " << boolstr(glIsEnabled(GL_DEPTH_TEST)) << llendl;
  179. glGetBooleanv(GL_DEPTH_WRITEMASK, &b);
  180. llinfos << "GL_DEPTH_WRITEMASK         : " << boolstr(b) << llendl;
  181. llinfos << "GL_BLEND                   : " << boolstr(glIsEnabled(GL_BLEND)) << llendl;
  182. llinfos << "GL_DITHER                  : " << boolstr(glIsEnabled(GL_DITHER)) << llendl;
  183. }
  184. // End