| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 // | 4 // |
| 5 // This file is auto-generated from | 5 // This file is auto-generated from |
| 6 // ui/gl/generate_bindings.py | 6 // ui/gl/generate_bindings.py |
| 7 // It's formatted by clang-format using chromium coding style: | 7 // It's formatted by clang-format using chromium coding style: |
| 8 // clang-format -i -style=chromium filename | 8 // clang-format -i -style=chromium filename |
| 9 // DO NOT EDIT! | 9 // DO NOT EDIT! |
| 10 | 10 |
| 11 #include <string> | 11 #include <string> |
| 12 | 12 |
| 13 #include "base/trace_event/trace_event.h" | 13 #include "base/trace_event/trace_event.h" |
| 14 #include "ui/gl/gl_bindings.h" | 14 #include "ui/gl/gl_bindings.h" |
| 15 #include "ui/gl/gl_context.h" | 15 #include "ui/gl/gl_context.h" |
| 16 #include "ui/gl/gl_enums.h" | 16 #include "ui/gl/gl_enums.h" |
| 17 #include "ui/gl/gl_implementation.h" | 17 #include "ui/gl/gl_implementation.h" |
| 18 #include "ui/gl/gl_osmesa_api_implementation.h" | 18 #include "ui/gl/gl_osmesa_api_implementation.h" |
| 19 #include "ui/gl/gl_version_info.h" | 19 #include "ui/gl/gl_version_info.h" |
| 20 | 20 |
| 21 namespace gl { | 21 namespace gl { |
| 22 | 22 |
| 23 static bool g_debugBindingsInitialized; | |
| 24 DriverOSMESA g_driver_osmesa; | 23 DriverOSMESA g_driver_osmesa; |
| 25 | 24 |
| 26 void DriverOSMESA::InitializeStaticBindings() { | 25 void DriverOSMESA::InitializeStaticBindings() { |
| 27 fn.OSMesaColorClampFn = reinterpret_cast<OSMesaColorClampProc>( | 26 fn.OSMesaColorClampFn = reinterpret_cast<OSMesaColorClampProc>( |
| 28 GetGLProcAddress("OSMesaColorClamp")); | 27 GetGLProcAddress("OSMesaColorClamp")); |
| 29 fn.OSMesaCreateContextFn = reinterpret_cast<OSMesaCreateContextProc>( | 28 fn.OSMesaCreateContextFn = reinterpret_cast<OSMesaCreateContextProc>( |
| 30 GetGLProcAddress("OSMesaCreateContext")); | 29 GetGLProcAddress("OSMesaCreateContext")); |
| 31 fn.OSMesaCreateContextExtFn = reinterpret_cast<OSMesaCreateContextExtProc>( | 30 fn.OSMesaCreateContextExtFn = reinterpret_cast<OSMesaCreateContextExtProc>( |
| 32 GetGLProcAddress("OSMesaCreateContextExt")); | 31 GetGLProcAddress("OSMesaCreateContextExt")); |
| 33 fn.OSMesaDestroyContextFn = reinterpret_cast<OSMesaDestroyContextProc>( | 32 fn.OSMesaDestroyContextFn = reinterpret_cast<OSMesaDestroyContextProc>( |
| (...skipping 11 matching lines...) Expand all Loading... |
| 45 fn.OSMesaMakeCurrentFn = reinterpret_cast<OSMesaMakeCurrentProc>( | 44 fn.OSMesaMakeCurrentFn = reinterpret_cast<OSMesaMakeCurrentProc>( |
| 46 GetGLProcAddress("OSMesaMakeCurrent")); | 45 GetGLProcAddress("OSMesaMakeCurrent")); |
| 47 fn.OSMesaPixelStoreFn = reinterpret_cast<OSMesaPixelStoreProc>( | 46 fn.OSMesaPixelStoreFn = reinterpret_cast<OSMesaPixelStoreProc>( |
| 48 GetGLProcAddress("OSMesaPixelStore")); | 47 GetGLProcAddress("OSMesaPixelStore")); |
| 49 } | 48 } |
| 50 | 49 |
| 51 void DriverOSMESA::InitializeExtensionBindings() { | 50 void DriverOSMESA::InitializeExtensionBindings() { |
| 52 std::string extensions(GetPlatformExtensions()); | 51 std::string extensions(GetPlatformExtensions()); |
| 53 extensions += " "; | 52 extensions += " "; |
| 54 ALLOW_UNUSED_LOCAL(extensions); | 53 ALLOW_UNUSED_LOCAL(extensions); |
| 55 | |
| 56 if (g_debugBindingsInitialized) | |
| 57 InitializeDebugBindings(); | |
| 58 } | |
| 59 | |
| 60 extern "C" { | |
| 61 | |
| 62 static void GL_BINDING_CALL Debug_OSMesaColorClamp(GLboolean enable) { | |
| 63 GL_SERVICE_LOG("OSMesaColorClamp" | |
| 64 << "(" << GLEnums::GetStringBool(enable) << ")"); | |
| 65 DCHECK(g_driver_osmesa.debug_fn.OSMesaColorClampFn != nullptr); | |
| 66 g_driver_osmesa.debug_fn.OSMesaColorClampFn(enable); | |
| 67 } | |
| 68 | |
| 69 static OSMesaContext GL_BINDING_CALL | |
| 70 Debug_OSMesaCreateContext(GLenum format, OSMesaContext sharelist) { | |
| 71 GL_SERVICE_LOG("OSMesaCreateContext" | |
| 72 << "(" << GLEnums::GetStringEnum(format) << ", " << sharelist | |
| 73 << ")"); | |
| 74 DCHECK(g_driver_osmesa.debug_fn.OSMesaCreateContextFn != nullptr); | |
| 75 OSMesaContext result = | |
| 76 g_driver_osmesa.debug_fn.OSMesaCreateContextFn(format, sharelist); | |
| 77 GL_SERVICE_LOG("GL_RESULT: " << result); | |
| 78 return result; | |
| 79 } | |
| 80 | |
| 81 static OSMesaContext GL_BINDING_CALL | |
| 82 Debug_OSMesaCreateContextExt(GLenum format, | |
| 83 GLint depthBits, | |
| 84 GLint stencilBits, | |
| 85 GLint accumBits, | |
| 86 OSMesaContext sharelist) { | |
| 87 GL_SERVICE_LOG("OSMesaCreateContextExt" | |
| 88 << "(" << GLEnums::GetStringEnum(format) << ", " << depthBits | |
| 89 << ", " << stencilBits << ", " << accumBits << ", " | |
| 90 << sharelist << ")"); | |
| 91 DCHECK(g_driver_osmesa.debug_fn.OSMesaCreateContextExtFn != nullptr); | |
| 92 OSMesaContext result = g_driver_osmesa.debug_fn.OSMesaCreateContextExtFn( | |
| 93 format, depthBits, stencilBits, accumBits, sharelist); | |
| 94 GL_SERVICE_LOG("GL_RESULT: " << result); | |
| 95 return result; | |
| 96 } | |
| 97 | |
| 98 static void GL_BINDING_CALL Debug_OSMesaDestroyContext(OSMesaContext ctx) { | |
| 99 GL_SERVICE_LOG("OSMesaDestroyContext" | |
| 100 << "(" << ctx << ")"); | |
| 101 DCHECK(g_driver_osmesa.debug_fn.OSMesaDestroyContextFn != nullptr); | |
| 102 g_driver_osmesa.debug_fn.OSMesaDestroyContextFn(ctx); | |
| 103 } | |
| 104 | |
| 105 static GLboolean GL_BINDING_CALL Debug_OSMesaGetColorBuffer(OSMesaContext c, | |
| 106 GLint* width, | |
| 107 GLint* height, | |
| 108 GLint* format, | |
| 109 void** buffer) { | |
| 110 GL_SERVICE_LOG("OSMesaGetColorBuffer" | |
| 111 << "(" << c << ", " << static_cast<const void*>(width) << ", " | |
| 112 << static_cast<const void*>(height) << ", " | |
| 113 << static_cast<const void*>(format) << ", " << buffer << ")"); | |
| 114 DCHECK(g_driver_osmesa.debug_fn.OSMesaGetColorBufferFn != nullptr); | |
| 115 GLboolean result = g_driver_osmesa.debug_fn.OSMesaGetColorBufferFn( | |
| 116 c, width, height, format, buffer); | |
| 117 GL_SERVICE_LOG("GL_RESULT: " << result); | |
| 118 return result; | |
| 119 } | |
| 120 | |
| 121 static OSMesaContext GL_BINDING_CALL Debug_OSMesaGetCurrentContext(void) { | |
| 122 GL_SERVICE_LOG("OSMesaGetCurrentContext" | |
| 123 << "(" | |
| 124 << ")"); | |
| 125 DCHECK(g_driver_osmesa.debug_fn.OSMesaGetCurrentContextFn != nullptr); | |
| 126 OSMesaContext result = g_driver_osmesa.debug_fn.OSMesaGetCurrentContextFn(); | |
| 127 GL_SERVICE_LOG("GL_RESULT: " << result); | |
| 128 return result; | |
| 129 } | |
| 130 | |
| 131 static GLboolean GL_BINDING_CALL | |
| 132 Debug_OSMesaGetDepthBuffer(OSMesaContext c, | |
| 133 GLint* width, | |
| 134 GLint* height, | |
| 135 GLint* bytesPerValue, | |
| 136 void** buffer) { | |
| 137 GL_SERVICE_LOG("OSMesaGetDepthBuffer" | |
| 138 << "(" << c << ", " << static_cast<const void*>(width) << ", " | |
| 139 << static_cast<const void*>(height) << ", " | |
| 140 << static_cast<const void*>(bytesPerValue) << ", " << buffer | |
| 141 << ")"); | |
| 142 DCHECK(g_driver_osmesa.debug_fn.OSMesaGetDepthBufferFn != nullptr); | |
| 143 GLboolean result = g_driver_osmesa.debug_fn.OSMesaGetDepthBufferFn( | |
| 144 c, width, height, bytesPerValue, buffer); | |
| 145 GL_SERVICE_LOG("GL_RESULT: " << result); | |
| 146 return result; | |
| 147 } | |
| 148 | |
| 149 static void GL_BINDING_CALL Debug_OSMesaGetIntegerv(GLint pname, GLint* value) { | |
| 150 GL_SERVICE_LOG("OSMesaGetIntegerv" | |
| 151 << "(" << pname << ", " << static_cast<const void*>(value) | |
| 152 << ")"); | |
| 153 DCHECK(g_driver_osmesa.debug_fn.OSMesaGetIntegervFn != nullptr); | |
| 154 g_driver_osmesa.debug_fn.OSMesaGetIntegervFn(pname, value); | |
| 155 } | |
| 156 | |
| 157 static OSMESAproc GL_BINDING_CALL | |
| 158 Debug_OSMesaGetProcAddress(const char* funcName) { | |
| 159 GL_SERVICE_LOG("OSMesaGetProcAddress" | |
| 160 << "(" << funcName << ")"); | |
| 161 DCHECK(g_driver_osmesa.debug_fn.OSMesaGetProcAddressFn != nullptr); | |
| 162 OSMESAproc result = g_driver_osmesa.debug_fn.OSMesaGetProcAddressFn(funcName); | |
| 163 GL_SERVICE_LOG("GL_RESULT: " << result); | |
| 164 return result; | |
| 165 } | |
| 166 | |
| 167 static GLboolean GL_BINDING_CALL Debug_OSMesaMakeCurrent(OSMesaContext ctx, | |
| 168 void* buffer, | |
| 169 GLenum type, | |
| 170 GLsizei width, | |
| 171 GLsizei height) { | |
| 172 GL_SERVICE_LOG("OSMesaMakeCurrent" | |
| 173 << "(" << ctx << ", " << static_cast<const void*>(buffer) | |
| 174 << ", " << GLEnums::GetStringEnum(type) << ", " << width | |
| 175 << ", " << height << ")"); | |
| 176 DCHECK(g_driver_osmesa.debug_fn.OSMesaMakeCurrentFn != nullptr); | |
| 177 GLboolean result = g_driver_osmesa.debug_fn.OSMesaMakeCurrentFn( | |
| 178 ctx, buffer, type, width, height); | |
| 179 GL_SERVICE_LOG("GL_RESULT: " << result); | |
| 180 return result; | |
| 181 } | |
| 182 | |
| 183 static void GL_BINDING_CALL Debug_OSMesaPixelStore(GLint pname, GLint value) { | |
| 184 GL_SERVICE_LOG("OSMesaPixelStore" | |
| 185 << "(" << pname << ", " << value << ")"); | |
| 186 DCHECK(g_driver_osmesa.debug_fn.OSMesaPixelStoreFn != nullptr); | |
| 187 g_driver_osmesa.debug_fn.OSMesaPixelStoreFn(pname, value); | |
| 188 } | |
| 189 } // extern "C" | |
| 190 | |
| 191 void DriverOSMESA::InitializeDebugBindings() { | |
| 192 if (!debug_fn.OSMesaColorClampFn) { | |
| 193 debug_fn.OSMesaColorClampFn = fn.OSMesaColorClampFn; | |
| 194 fn.OSMesaColorClampFn = Debug_OSMesaColorClamp; | |
| 195 } | |
| 196 if (!debug_fn.OSMesaCreateContextFn) { | |
| 197 debug_fn.OSMesaCreateContextFn = fn.OSMesaCreateContextFn; | |
| 198 fn.OSMesaCreateContextFn = Debug_OSMesaCreateContext; | |
| 199 } | |
| 200 if (!debug_fn.OSMesaCreateContextExtFn) { | |
| 201 debug_fn.OSMesaCreateContextExtFn = fn.OSMesaCreateContextExtFn; | |
| 202 fn.OSMesaCreateContextExtFn = Debug_OSMesaCreateContextExt; | |
| 203 } | |
| 204 if (!debug_fn.OSMesaDestroyContextFn) { | |
| 205 debug_fn.OSMesaDestroyContextFn = fn.OSMesaDestroyContextFn; | |
| 206 fn.OSMesaDestroyContextFn = Debug_OSMesaDestroyContext; | |
| 207 } | |
| 208 if (!debug_fn.OSMesaGetColorBufferFn) { | |
| 209 debug_fn.OSMesaGetColorBufferFn = fn.OSMesaGetColorBufferFn; | |
| 210 fn.OSMesaGetColorBufferFn = Debug_OSMesaGetColorBuffer; | |
| 211 } | |
| 212 if (!debug_fn.OSMesaGetCurrentContextFn) { | |
| 213 debug_fn.OSMesaGetCurrentContextFn = fn.OSMesaGetCurrentContextFn; | |
| 214 fn.OSMesaGetCurrentContextFn = Debug_OSMesaGetCurrentContext; | |
| 215 } | |
| 216 if (!debug_fn.OSMesaGetDepthBufferFn) { | |
| 217 debug_fn.OSMesaGetDepthBufferFn = fn.OSMesaGetDepthBufferFn; | |
| 218 fn.OSMesaGetDepthBufferFn = Debug_OSMesaGetDepthBuffer; | |
| 219 } | |
| 220 if (!debug_fn.OSMesaGetIntegervFn) { | |
| 221 debug_fn.OSMesaGetIntegervFn = fn.OSMesaGetIntegervFn; | |
| 222 fn.OSMesaGetIntegervFn = Debug_OSMesaGetIntegerv; | |
| 223 } | |
| 224 if (!debug_fn.OSMesaGetProcAddressFn) { | |
| 225 debug_fn.OSMesaGetProcAddressFn = fn.OSMesaGetProcAddressFn; | |
| 226 fn.OSMesaGetProcAddressFn = Debug_OSMesaGetProcAddress; | |
| 227 } | |
| 228 if (!debug_fn.OSMesaMakeCurrentFn) { | |
| 229 debug_fn.OSMesaMakeCurrentFn = fn.OSMesaMakeCurrentFn; | |
| 230 fn.OSMesaMakeCurrentFn = Debug_OSMesaMakeCurrent; | |
| 231 } | |
| 232 if (!debug_fn.OSMesaPixelStoreFn) { | |
| 233 debug_fn.OSMesaPixelStoreFn = fn.OSMesaPixelStoreFn; | |
| 234 fn.OSMesaPixelStoreFn = Debug_OSMesaPixelStore; | |
| 235 } | |
| 236 g_debugBindingsInitialized = true; | |
| 237 } | 54 } |
| 238 | 55 |
| 239 void DriverOSMESA::ClearBindings() { | 56 void DriverOSMESA::ClearBindings() { |
| 240 memset(this, 0, sizeof(*this)); | 57 memset(this, 0, sizeof(*this)); |
| 241 } | 58 } |
| 242 | 59 |
| 243 void OSMESAApiBase::OSMesaColorClampFn(GLboolean enable) { | 60 void OSMESAApiBase::OSMesaColorClampFn(GLboolean enable) { |
| 244 driver_->fn.OSMesaColorClampFn(enable); | 61 driver_->fn.OSMesaColorClampFn(enable); |
| 245 } | 62 } |
| 246 | 63 |
| (...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 371 GLsizei height) { | 188 GLsizei height) { |
| 372 TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::OSMesaMakeCurrent") | 189 TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::OSMesaMakeCurrent") |
| 373 return osmesa_api_->OSMesaMakeCurrentFn(ctx, buffer, type, width, height); | 190 return osmesa_api_->OSMesaMakeCurrentFn(ctx, buffer, type, width, height); |
| 374 } | 191 } |
| 375 | 192 |
| 376 void TraceOSMESAApi::OSMesaPixelStoreFn(GLint pname, GLint value) { | 193 void TraceOSMESAApi::OSMesaPixelStoreFn(GLint pname, GLint value) { |
| 377 TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::OSMesaPixelStore") | 194 TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::OSMesaPixelStore") |
| 378 osmesa_api_->OSMesaPixelStoreFn(pname, value); | 195 osmesa_api_->OSMesaPixelStoreFn(pname, value); |
| 379 } | 196 } |
| 380 | 197 |
| 198 void DebugOSMESAApi::OSMesaColorClampFn(GLboolean enable) { |
| 199 GL_SERVICE_LOG("OSMesaColorClamp" |
| 200 << "(" << GLEnums::GetStringBool(enable) << ")"); |
| 201 osmesa_api_->OSMesaColorClampFn(enable); |
| 202 } |
| 203 |
| 204 OSMesaContext DebugOSMESAApi::OSMesaCreateContextFn(GLenum format, |
| 205 OSMesaContext sharelist) { |
| 206 GL_SERVICE_LOG("OSMesaCreateContext" |
| 207 << "(" << GLEnums::GetStringEnum(format) << ", " << sharelist |
| 208 << ")"); |
| 209 OSMesaContext result = osmesa_api_->OSMesaCreateContextFn(format, sharelist); |
| 210 GL_SERVICE_LOG("GL_RESULT: " << result); |
| 211 return result; |
| 212 } |
| 213 |
| 214 OSMesaContext DebugOSMESAApi::OSMesaCreateContextExtFn( |
| 215 GLenum format, |
| 216 GLint depthBits, |
| 217 GLint stencilBits, |
| 218 GLint accumBits, |
| 219 OSMesaContext sharelist) { |
| 220 GL_SERVICE_LOG("OSMesaCreateContextExt" |
| 221 << "(" << GLEnums::GetStringEnum(format) << ", " << depthBits |
| 222 << ", " << stencilBits << ", " << accumBits << ", " |
| 223 << sharelist << ")"); |
| 224 OSMesaContext result = osmesa_api_->OSMesaCreateContextExtFn( |
| 225 format, depthBits, stencilBits, accumBits, sharelist); |
| 226 GL_SERVICE_LOG("GL_RESULT: " << result); |
| 227 return result; |
| 228 } |
| 229 |
| 230 void DebugOSMESAApi::OSMesaDestroyContextFn(OSMesaContext ctx) { |
| 231 GL_SERVICE_LOG("OSMesaDestroyContext" |
| 232 << "(" << ctx << ")"); |
| 233 osmesa_api_->OSMesaDestroyContextFn(ctx); |
| 234 } |
| 235 |
| 236 GLboolean DebugOSMESAApi::OSMesaGetColorBufferFn(OSMesaContext c, |
| 237 GLint* width, |
| 238 GLint* height, |
| 239 GLint* format, |
| 240 void** buffer) { |
| 241 GL_SERVICE_LOG("OSMesaGetColorBuffer" |
| 242 << "(" << c << ", " << static_cast<const void*>(width) << ", " |
| 243 << static_cast<const void*>(height) << ", " |
| 244 << static_cast<const void*>(format) << ", " << buffer << ")"); |
| 245 GLboolean result = |
| 246 osmesa_api_->OSMesaGetColorBufferFn(c, width, height, format, buffer); |
| 247 GL_SERVICE_LOG("GL_RESULT: " << result); |
| 248 return result; |
| 249 } |
| 250 |
| 251 OSMesaContext DebugOSMESAApi::OSMesaGetCurrentContextFn(void) { |
| 252 GL_SERVICE_LOG("OSMesaGetCurrentContext" |
| 253 << "(" |
| 254 << ")"); |
| 255 OSMesaContext result = osmesa_api_->OSMesaGetCurrentContextFn(); |
| 256 GL_SERVICE_LOG("GL_RESULT: " << result); |
| 257 return result; |
| 258 } |
| 259 |
| 260 GLboolean DebugOSMESAApi::OSMesaGetDepthBufferFn(OSMesaContext c, |
| 261 GLint* width, |
| 262 GLint* height, |
| 263 GLint* bytesPerValue, |
| 264 void** buffer) { |
| 265 GL_SERVICE_LOG("OSMesaGetDepthBuffer" |
| 266 << "(" << c << ", " << static_cast<const void*>(width) << ", " |
| 267 << static_cast<const void*>(height) << ", " |
| 268 << static_cast<const void*>(bytesPerValue) << ", " << buffer |
| 269 << ")"); |
| 270 GLboolean result = osmesa_api_->OSMesaGetDepthBufferFn(c, width, height, |
| 271 bytesPerValue, buffer); |
| 272 GL_SERVICE_LOG("GL_RESULT: " << result); |
| 273 return result; |
| 274 } |
| 275 |
| 276 void DebugOSMESAApi::OSMesaGetIntegervFn(GLint pname, GLint* value) { |
| 277 GL_SERVICE_LOG("OSMesaGetIntegerv" |
| 278 << "(" << pname << ", " << static_cast<const void*>(value) |
| 279 << ")"); |
| 280 osmesa_api_->OSMesaGetIntegervFn(pname, value); |
| 281 } |
| 282 |
| 283 OSMESAproc DebugOSMESAApi::OSMesaGetProcAddressFn(const char* funcName) { |
| 284 GL_SERVICE_LOG("OSMesaGetProcAddress" |
| 285 << "(" << funcName << ")"); |
| 286 OSMESAproc result = osmesa_api_->OSMesaGetProcAddressFn(funcName); |
| 287 GL_SERVICE_LOG("GL_RESULT: " << result); |
| 288 return result; |
| 289 } |
| 290 |
| 291 GLboolean DebugOSMESAApi::OSMesaMakeCurrentFn(OSMesaContext ctx, |
| 292 void* buffer, |
| 293 GLenum type, |
| 294 GLsizei width, |
| 295 GLsizei height) { |
| 296 GL_SERVICE_LOG("OSMesaMakeCurrent" |
| 297 << "(" << ctx << ", " << static_cast<const void*>(buffer) |
| 298 << ", " << GLEnums::GetStringEnum(type) << ", " << width |
| 299 << ", " << height << ")"); |
| 300 GLboolean result = |
| 301 osmesa_api_->OSMesaMakeCurrentFn(ctx, buffer, type, width, height); |
| 302 GL_SERVICE_LOG("GL_RESULT: " << result); |
| 303 return result; |
| 304 } |
| 305 |
| 306 void DebugOSMESAApi::OSMesaPixelStoreFn(GLint pname, GLint value) { |
| 307 GL_SERVICE_LOG("OSMesaPixelStore" |
| 308 << "(" << pname << ", " << value << ")"); |
| 309 osmesa_api_->OSMesaPixelStoreFn(pname, value); |
| 310 } |
| 311 |
| 381 } // namespace gl | 312 } // namespace gl |
| OLD | NEW |