Showing the changes to libraries/render-utils/src/Model.cpp (1 of 3 files). Show all
Unified · Split
| @@ -36,13 +36,13 @@ · 35 unmodified lines | |||
| 36 | #include "Model.h" | 36 | #include "Model.h" |
| 37 | 37 | ||
| 38 | #include "model_vert.h" | 38 | #include "model_vert.h" |
| 39 | #include "model_shadow_vert.h" | 39 | #include "model_shadow_vert.h" |
| 40 | #include "model_normal_map_vert.h" | 40 | #include "model_normal_map_vert.h" |
| 41 | #include "model_lightmap_vert.h" | 41 | #include "model_lightmap_vert.h" |
| 42 | #include "model_lightmap_normal_map_vert.h" | 42 | #include "model_lightmap_normal_map_vert.h" |
| 43 | #include "skin_model_vert.h" | 43 | #include "skin_model_vert.h" |
| 44 | #include "skin_model_shadow_vert.h" | 44 | #include "skin_model_shadow_vert.h" |
| 45 | #include "skin_model_normal_map_vert.h" | 45 | #include "skin_model_normal_map_vert.h" |
| 46 | 46 | ||
| 47 | #include "model_frag.h" | 47 | #include "model_frag.h" |
| 48 | #include "model_shadow_frag.h" | 48 | #include "model_shadow_frag.h" |
| @@ -218,7 +218,7 @@ void Model::initProgram(gpu::ShaderPointer& program, Model::Locations& locations · 169 unmodified lines | |||
| 218 | #if (GPU_FEATURE_PROFILE == GPU_CORE) | 218 | #if (GPU_FEATURE_PROFILE == GPU_CORE) |
| 219 | locations.materialBufferUnit = program->getBuffers().findLocation("materialBuffer"); | 219 | locations.materialBufferUnit = program->getBuffers().findLocation("materialBuffer"); |
| 220 | #else | 220 | #else |
| 221 | locations.materialBuffer = program->getUniforms().findLocation("materialBuffer"); | 221 | locations.materialBufferUnit = program->getUniforms().findLocation("materialBuffer"); |
| 222 | #endif | 222 | #endif |
| 223 | 223 | ||
| 224 | } | 224 | } |
| @@ -397,11 +397,11 @@ void Model::init() { · 172 unmodified lines | |||
| 397 | 397 | ||
| 398 | // Programs | 398 | // Programs |
| 399 | _program = gpu::ShaderPointer(gpu::Shader::createProgram(modelVertex, modelPixel)); | 399 | _program = gpu::ShaderPointer(gpu::Shader::createProgram(modelVertex, modelPixel)); |
| 400 | makeResult = gpu::Shader::makeProgram(*_program, slotBindings); | 400 | makeResult = gpu::Shader::makeProgram(*_program, slotBindings); |
| 401 | initProgram(_program, _locations); | 401 | initProgram(_program, _locations); |
| 402 | 402 | ||
| 403 | _normalMapProgram = gpu::ShaderPointer(gpu::Shader::createProgram(modelNormalMapVertex, modelNormalMapPixel)); | 403 | _normalMapProgram = gpu::ShaderPointer(gpu::Shader::createProgram(modelNormalMapVertex, modelNormalMapPixel)); |
| 404 | makeResult = gpu::Shader::makeProgram(*_normalMapProgram, slotBindings); | 404 | makeResult = gpu::Shader::makeProgram(*_normalMapProgram, slotBindings); |
| 405 | initProgram(_normalMapProgram, _normalMapLocations); | 405 | initProgram(_normalMapProgram, _normalMapLocations); |
| 406 | 406 | ||
| 407 | _specularMapProgram = gpu::ShaderPointer(gpu::Shader::createProgram(modelVertex, modelSpecularMapPixel)); | 407 | _specularMapProgram = gpu::ShaderPointer(gpu::Shader::createProgram(modelVertex, modelSpecularMapPixel)); |
| @@ -413,122 +413,122 @@ void Model::init() { · 5 unmodified lines | |||
| 413 | initProgram(_normalSpecularMapProgram, _normalSpecularMapLocations); | 413 | initProgram(_normalSpecularMapProgram, _normalSpecularMapLocations); |
| 414 | 414 | ||
| 415 | _translucentProgram = gpu::ShaderPointer(gpu::Shader::createProgram(modelVertex, modelTranslucentPixel)); | 415 | _translucentProgram = gpu::ShaderPointer(gpu::Shader::createProgram(modelVertex, modelTranslucentPixel)); |
| 416 | makeResult = gpu::Shader::makeProgram(*_translucentProgram, slotBindings); | 416 | makeResult = gpu::Shader::makeProgram(*_translucentProgram, slotBindings); |
| 417 | initProgram(_translucentProgram, _translucentLocations); | 417 | initProgram(_translucentProgram, _translucentLocations); |
| 418 | 418 | ||
| 419 | _shadowProgram = gpu::ShaderPointer(gpu::Shader::createProgram(modelShadowVertex, modelShadowPixel)); | 419 | _shadowProgram = gpu::ShaderPointer(gpu::Shader::createProgram(modelShadowVertex, modelShadowPixel)); |
| 420 | makeResult = gpu::Shader::makeProgram(*_shadowProgram, slotBindings); | 420 | makeResult = gpu::Shader::makeProgram(*_shadowProgram, slotBindings); |
| 421 | Model::Locations tempShadowLoc; | 421 | Model::Locations tempShadowLoc; |
| 422 | initProgram(_shadowProgram, tempShadowLoc); | 422 | initProgram(_shadowProgram, tempShadowLoc); |
| 423 | 423 | ||
| 424 | _lightmapProgram = gpu::ShaderPointer(gpu::Shader::createProgram(modelLightmapVertex, modelLightmapPixel)); | 424 | _lightmapProgram = gpu::ShaderPointer(gpu::Shader::createProgram(modelLightmapVertex, modelLightmapPixel)); |
| 425 | makeResult = gpu::Shader::makeProgram(*_lightmapProgram, slotBindings); | 425 | makeResult = gpu::Shader::makeProgram(*_lightmapProgram, slotBindings); |
| 426 | initProgram(_lightmapProgram, _lightmapLocations); | 426 | initProgram(_lightmapProgram, _lightmapLocations); |
| 427 | 427 | ||
| 428 | _lightmapNormalMapProgram = gpu::ShaderPointer(gpu::Shader::createProgram(modelLightmapNormalMapVertex, modelLightmapNormalMapPixel)); | 428 | _lightmapNormalMapProgram = gpu::ShaderPointer(gpu::Shader::createProgram(modelLightmapNormalMapVertex, modelLightmapNormalMapPixel)); |
| 429 | makeResult = gpu::Shader::makeProgram(*_lightmapNormalMapProgram, slotBindings); | 429 | makeResult = gpu::Shader::makeProgram(*_lightmapNormalMapProgram, slotBindings); |
| 430 | initProgram(_lightmapNormalMapProgram, _lightmapNormalMapLocations); | 430 | initProgram(_lightmapNormalMapProgram, _lightmapNormalMapLocations); |
| 431 | 431 | ||
| 432 | _lightmapSpecularMapProgram = gpu::ShaderPointer(gpu::Shader::createProgram(modelLightmapVertex, modelLightmapSpecularMapPixel)); | 432 | _lightmapSpecularMapProgram = gpu::ShaderPointer(gpu::Shader::createProgram(modelLightmapVertex, modelLightmapSpecularMapPixel)); |
| 433 | makeResult = gpu::Shader::makeProgram(*_lightmapSpecularMapProgram, slotBindings); | 433 | makeResult = gpu::Shader::makeProgram(*_lightmapSpecularMapProgram, slotBindings); |
| 434 | initProgram(_lightmapSpecularMapProgram, _lightmapSpecularMapLocations); | 434 | initProgram(_lightmapSpecularMapProgram, _lightmapSpecularMapLocations); |
| 435 | 435 | ||
| 436 | _lightmapNormalSpecularMapProgram = gpu::ShaderPointer(gpu::Shader::createProgram(modelLightmapNormalMapVertex, modelLightmapNormalSpecularMapPixel)); | 436 | _lightmapNormalSpecularMapProgram = gpu::ShaderPointer(gpu::Shader::createProgram(modelLightmapNormalMapVertex, modelLightmapNormalSpecularMapPixel)); |
| 437 | makeResult = gpu::Shader::makeProgram(*_lightmapNormalSpecularMapProgram, slotBindings); | 437 | makeResult = gpu::Shader::makeProgram(*_lightmapNormalSpecularMapProgram, slotBindings); |
| 438 | initProgram(_lightmapNormalSpecularMapProgram, _lightmapNormalSpecularMapLocations); | 438 | initProgram(_lightmapNormalSpecularMapProgram, _lightmapNormalSpecularMapLocations); |
| 439 | 439 | ||
| 440 | _skinProgram = gpu::ShaderPointer(gpu::Shader::createProgram(skinModelVertex, modelPixel)); | 440 | _skinProgram = gpu::ShaderPointer(gpu::Shader::createProgram(skinModelVertex, modelPixel)); |
| 441 | makeResult = gpu::Shader::makeProgram(*_skinProgram, slotBindings); | 441 | makeResult = gpu::Shader::makeProgram(*_skinProgram, slotBindings); |
| 442 | initSkinProgram(_skinProgram, _skinLocations); | 442 | initSkinProgram(_skinProgram, _skinLocations); |
| 443 | 443 | ||
| 444 | _skinNormalMapProgram = gpu::ShaderPointer(gpu::Shader::createProgram(skinModelNormalMapVertex, modelNormalMapPixel)); | 444 | _skinNormalMapProgram = gpu::ShaderPointer(gpu::Shader::createProgram(skinModelNormalMapVertex, modelNormalMapPixel)); |
| 445 | makeResult = gpu::Shader::makeProgram(*_skinNormalMapProgram, slotBindings); | 445 | makeResult = gpu::Shader::makeProgram(*_skinNormalMapProgram, slotBindings); |
| 446 | initSkinProgram(_skinNormalMapProgram, _skinNormalMapLocations); | 446 | initSkinProgram(_skinNormalMapProgram, _skinNormalMapLocations); |
| 447 | 447 | ||
| 448 | _skinSpecularMapProgram = gpu::ShaderPointer(gpu::Shader::createProgram(skinModelVertex, modelSpecularMapPixel)); | 448 | _skinSpecularMapProgram = gpu::ShaderPointer(gpu::Shader::createProgram(skinModelVertex, modelSpecularMapPixel)); |
| 449 | makeResult = gpu::Shader::makeProgram(*_skinSpecularMapProgram, slotBindings); | 449 | makeResult = gpu::Shader::makeProgram(*_skinSpecularMapProgram, slotBindings); |
| 450 | initSkinProgram(_skinSpecularMapProgram, _skinSpecularMapLocations); | 450 | initSkinProgram(_skinSpecularMapProgram, _skinSpecularMapLocations); |
| 451 | 451 | ||
| 452 | _skinNormalSpecularMapProgram = gpu::ShaderPointer(gpu::Shader::createProgram(skinModelNormalMapVertex, modelNormalSpecularMapPixel)); | 452 | _skinNormalSpecularMapProgram = gpu::ShaderPointer(gpu::Shader::createProgram(skinModelNormalMapVertex, modelNormalSpecularMapPixel)); |
| 453 | makeResult = gpu::Shader::makeProgram(*_skinNormalSpecularMapProgram, slotBindings); | 453 | makeResult = gpu::Shader::makeProgram(*_skinNormalSpecularMapProgram, slotBindings); |
| 454 | initSkinProgram(_skinNormalSpecularMapProgram, _skinNormalSpecularMapLocations); | 454 | initSkinProgram(_skinNormalSpecularMapProgram, _skinNormalSpecularMapLocations); |
| 455 | 455 | ||
| 456 | _skinShadowProgram = gpu::ShaderPointer(gpu::Shader::createProgram(skinModelShadowVertex, modelShadowPixel)); | 456 | _skinShadowProgram = gpu::ShaderPointer(gpu::Shader::createProgram(skinModelShadowVertex, modelShadowPixel)); |
| 457 | makeResult = gpu::Shader::makeProgram(*_skinShadowProgram, slotBindings); | 457 | makeResult = gpu::Shader::makeProgram(*_skinShadowProgram, slotBindings); |
| 458 | initSkinProgram(_skinShadowProgram, _skinShadowLocations); | 458 | initSkinProgram(_skinShadowProgram, _skinShadowLocations); |
| 459 | 459 | ||
| 460 | _skinTranslucentProgram = gpu::ShaderPointer(gpu::Shader::createProgram(skinModelVertex, modelTranslucentPixel)); | 460 | _skinTranslucentProgram = gpu::ShaderPointer(gpu::Shader::createProgram(skinModelVertex, modelTranslucentPixel)); |
| 461 | makeResult = gpu::Shader::makeProgram(*_skinTranslucentProgram, slotBindings); | 461 | makeResult = gpu::Shader::makeProgram(*_skinTranslucentProgram, slotBindings); |
| 462 | initSkinProgram(_skinTranslucentProgram, _skinTranslucentLocations); | 462 | initSkinProgram(_skinTranslucentProgram, _skinTranslucentLocations); |
| 463 | 463 | ||
| 464 | /* | 464 | /* |
| 465 | _POprogram.addShaderFromSourceCode(QGLShader::Vertex, model_vert); | 465 | _POprogram.addShaderFromSourceCode(QGLShader::Vertex, model_vert); |
| 466 | _POprogram.addShaderFromSourceCode(QGLShader::Fragment, model_frag); | 466 | _POprogram.addShaderFromSourceCode(QGLShader::Fragment, model_frag); |
| 467 | initProgram(_POprogram, _POlocations); | 467 | initProgram(_POprogram, _POlocations); |
| 468 | 468 | ||
| 469 | _POnormalMapProgram.addShaderFromSourceCode(QGLShader::Vertex, model_normal_map_vert); | 469 | _POnormalMapProgram.addShaderFromSourceCode(QGLShader::Vertex, model_normal_map_vert); |
| 470 | _POnormalMapProgram.addShaderFromSourceCode(QGLShader::Fragment, model_normal_map_frag); | 470 | _POnormalMapProgram.addShaderFromSourceCode(QGLShader::Fragment, model_normal_map_frag); |
| 471 | initProgram(_POnormalMapProgram, _POnormalMapLocations); | 471 | initProgram(_POnormalMapProgram, _POnormalMapLocations); |
| 472 | 472 | ||
| 473 | _POspecularMapProgram.addShaderFromSourceCode(QGLShader::Vertex, model_vert); | 473 | _POspecularMapProgram.addShaderFromSourceCode(QGLShader::Vertex, model_vert); |
| 474 | _POspecularMapProgram.addShaderFromSourceCode(QGLShader::Fragment, model_specular_map_frag); | 474 | _POspecularMapProgram.addShaderFromSourceCode(QGLShader::Fragment, model_specular_map_frag); |
| 475 | initProgram(_POspecularMapProgram, _POspecularMapLocations); | 475 | initProgram(_POspecularMapProgram, _POspecularMapLocations); |
| 476 | 476 | ||
| 477 | _POnormalSpecularMapProgram.addShaderFromSourceCode(QGLShader::Vertex, model_normal_map_vert); | 477 | _POnormalSpecularMapProgram.addShaderFromSourceCode(QGLShader::Vertex, model_normal_map_vert); |
| 478 | _POnormalSpecularMapProgram.addShaderFromSourceCode(QGLShader::Fragment, model_normal_specular_map_frag); | 478 | _POnormalSpecularMapProgram.addShaderFromSourceCode(QGLShader::Fragment, model_normal_specular_map_frag); |
| 479 | initProgram(_POnormalSpecularMapProgram, _POnormalSpecularMapLocations); | 479 | initProgram(_POnormalSpecularMapProgram, _POnormalSpecularMapLocations); |
| 480 | 480 | ||
| 481 | _POtranslucentProgram.addShaderFromSourceCode(QGLShader::Vertex, model_vert); | 481 | _POtranslucentProgram.addShaderFromSourceCode(QGLShader::Vertex, model_vert); |
| 482 | _POtranslucentProgram.addShaderFromSourceCode(QGLShader::Fragment, model_translucent_frag); | 482 | _POtranslucentProgram.addShaderFromSourceCode(QGLShader::Fragment, model_translucent_frag); |
| 483 | initProgram(_POtranslucentProgram, _POtranslucentLocations); | 483 | initProgram(_POtranslucentProgram, _POtranslucentLocations); |
| 484 | 484 | ||
| 485 | // Lightmap | 485 | // Lightmap |
| 486 | _POlightmapProgram.addShaderFromSourceCode(QGLShader::Vertex, model_lightmap_vert); | 486 | _POlightmapProgram.addShaderFromSourceCode(QGLShader::Vertex, model_lightmap_vert); |
| 487 | _POlightmapProgram.addShaderFromSourceCode(QGLShader::Fragment, model_lightmap_frag); | 487 | _POlightmapProgram.addShaderFromSourceCode(QGLShader::Fragment, model_lightmap_frag); |
| 488 | initProgram(_POlightmapProgram, _POlightmapLocations); | 488 | initProgram(_POlightmapProgram, _POlightmapLocations); |
| 489 | 489 | ||
| 490 | _POlightmapNormalMapProgram.addShaderFromSourceCode(QGLShader::Vertex, model_lightmap_normal_map_vert); | 490 | _POlightmapNormalMapProgram.addShaderFromSourceCode(QGLShader::Vertex, model_lightmap_normal_map_vert); |
| 491 | _POlightmapNormalMapProgram.addShaderFromSourceCode(QGLShader::Fragment, model_lightmap_normal_map_frag); | 491 | _POlightmapNormalMapProgram.addShaderFromSourceCode(QGLShader::Fragment, model_lightmap_normal_map_frag); |
| 492 | initProgram(_POlightmapNormalMapProgramddd, _POlightmapNormalMapLocations); | 492 | initProgram(_POlightmapNormalMapProgramddd, _POlightmapNormalMapLocations); |
| 493 | 493 | ||
| 494 | _POlightmapSpecularMapProgram.addShaderFromSourceCode(QGLShader::Vertex, model_lightmap_vert); | 494 | _POlightmapSpecularMapProgram.addShaderFromSourceCode(QGLShader::Vertex, model_lightmap_vert); |
| 495 | _POlightmapSpecularMapProgram.addShaderFromSourceCode(QGLShader::Fragment, model_lightmap_specular_map_frag); | 495 | _POlightmapSpecularMapProgram.addShaderFromSourceCode(QGLShader::Fragment, model_lightmap_specular_map_frag); |
| 496 | initProgram(_POlightmapSpecularMapProgram, _POlightmapSpecularMapLocations); | 496 | initProgram(_POlightmapSpecularMapProgram, _POlightmapSpecularMapLocations); |
| 497 | 497 | ||
| 498 | _POlightmapNormalSpecularMapProgram.addShaderFromSourceCode(QGLShader::Vertex, model_lightmap_normal_map_vert); | 498 | _POlightmapNormalSpecularMapProgram.addShaderFromSourceCode(QGLShader::Vertex, model_lightmap_normal_map_vert); |
| 499 | _POlightmapNormalSpecularMapProgram.addShaderFromSourceCode(QGLShader::Fragment, model_lightmap_normal_specular_map_frag); | 499 | _POlightmapNormalSpecularMapProgram.addShaderFromSourceCode(QGLShader::Fragment, model_lightmap_normal_specular_map_frag); |
| 500 | initProgram(_POlightmapNormalSpecularMapProgram, _POlightmapNormalSpecularMapLocations); | 500 | initProgram(_POlightmapNormalSpecularMapProgram, _POlightmapNormalSpecularMapLocations); |
| 501 | // end lightmap | 501 | // end lightmap |
| 502 | 502 | ||
| 503 | 503 | ||
| 504 | _POshadowProgram.addShaderFromSourceCode(QGLShader::Vertex, model_shadow_vert); | 504 | _POshadowProgram.addShaderFromSourceCode(QGLShader::Vertex, model_shadow_vert); |
| 505 | _POshadowProgram.addShaderFromSourceCode(QGLShader::Fragment, model_shadow_frag); | 505 | _POshadowProgram.addShaderFromSourceCode(QGLShader::Fragment, model_shadow_frag); |
| 506 | // Shadow program uses the same locations as standard rendering path but we still need to set the bindings | 506 | // Shadow program uses the same locations as standard rendering path but we still need to set the bindings |
| 507 | Model::Locations tempLoc; | 507 | Model::Locations tempLoc; |
| 508 | initProgram(_POshadowProgram, tempLoc); | 508 | initProgram(_POshadowProgram, tempLoc); |
| 509 | 509 | ||
| 510 | _POskinProgram.addShaderFromSourceCode(QGLShader::Vertex, skin_model_vert); | 510 | _POskinProgram.addShaderFromSourceCode(QGLShader::Vertex, skin_model_vert); |
| 511 | _POskinProgram.addShaderFromSourceCode(QGLShader::Fragment, model_frag); | 511 | _POskinProgram.addShaderFromSourceCode(QGLShader::Fragment, model_frag); |
| 512 | initSkinProgram(_POskinProgram, _POskinLocations); | 512 | initSkinProgram(_POskinProgram, _POskinLocations); |
| 513 | 513 | ||
| 514 | _POskinNormalMapProgram.addShaderFromSourceCode(QGLShader::Vertex, skin_model_normal_map_vert); | 514 | _POskinNormalMapProgram.addShaderFromSourceCode(QGLShader::Vertex, skin_model_normal_map_vert); |
| 515 | _POskinNormalMapProgram.addShaderFromSourceCode(QGLShader::Fragment, model_normal_map_frag); | 515 | _POskinNormalMapProgram.addShaderFromSourceCode(QGLShader::Fragment, model_normal_map_frag); |
| 516 | initSkinProgram(_POskinNormalMapProgram, _PaOskinNormalMapLocations); | 516 | initSkinProgram(_POskinNormalMapProgram, _PaOskinNormalMapLocations); |
| 517 | 517 | ||
| 518 | _POskinSpecularMapProgram.addShaderFromSourceCode(QGLShader::Vertex, model_vert); | 518 | _POskinSpecularMapProgram.addShaderFromSourceCode(QGLShader::Vertex, model_vert); |
| 519 | _POskinSpecularMapProgram.addShaderFromSourceCode(QGLShader::Fragment, model_specular_map_frag); | 519 | _POskinSpecularMapProgram.addShaderFromSourceCode(QGLShader::Fragment, model_specular_map_frag); |
| 520 | initSkinProgram(_POskinSpecularMapProgram, _POskinSpecularMapLocations); | 520 | initSkinProgram(_POskinSpecularMapProgram, _POskinSpecularMapLocations); |
| 521 | 521 | ||
| 522 | _POskinNormalSpecularMapProgram.addShaderFromSourceCode(QGLShader::Vertex, skin_model_normal_map_vert); | 522 | _POskinNormalSpecularMapProgram.addShaderFromSourceCode(QGLShader::Vertex, skin_model_normal_map_vert); |
| 523 | _POskinNormalSpecularMapProgram.addShaderFromSourceCode(QGLShader::Fragment, model_normal_specular_map_frag); | 523 | _POskinNormalSpecularMapProgram.addShaderFromSourceCode(QGLShader::Fragment, model_normal_specular_map_frag); |
| 524 | initSkinProgram(_POskinNormalSpecularMapProgram, _POskinNormalSpecularMapLocations); | 524 | initSkinProgram(_POskinNormalSpecularMapProgram, _POskinNormalSpecularMapLocations); |
| 525 | 525 | ||
| 526 | _POskinShadowProgram.addShaderFromSourceCode(QGLShader::Vertex, skin_model_shadow_vert); | 526 | _POskinShadowProgram.addShaderFromSourceCode(QGLShader::Vertex, skin_model_shadow_vert); |
| 527 | _POskinShadowProgram.addShaderFromSourceCode(QGLShader::Fragment, model_shadow_frag); | 527 | _POskinShadowProgram.addShaderFromSourceCode(QGLShader::Fragment, model_shadow_frag); |
| 528 | initSkinProgram(_POskinShadowProgram, _POskinShadowLocations); | 528 | initSkinProgram(_POskinShadowProgram, _POskinShadowLocations); |
| 529 | 529 | ||
| 530 | 530 | ||
| 531 | _POskinTranslucentProgram.addShaderFromSourceCode(QGLShader::Vertex, skin_model_vert); | 531 | _POskinTranslucentProgram.addShaderFromSourceCode(QGLShader::Vertex, skin_model_vert); |
| 532 | _POskinTranslucentProgram.addShaderFromSourceCode(QGLShader::Fragment, model_translucent_frag); | 532 | _POskinTranslucentProgram.addShaderFromSourceCode(QGLShader::Fragment, model_translucent_frag); |
| 533 | initSkinProgram(_POskinTranslucentProgram, _POskinTranslucentLocations); | 533 | initSkinProgram(_POskinTranslucentProgram, _POskinTranslucentLocations); |
| 534 | */ | 534 | */ |