| 494 | } |
| 495 | |
| 496 | void GLSLReflection::ReflectUniforms() |
| 497 | { |
| 498 | GLint numResources = 0; |
| 499 | glGetProgramInterfaceiv(mHandle, GL_UNIFORM, GL_ACTIVE_RESOURCES, |
| 500 | &numResources); |
| 501 | |
| 502 | if (numResources > 0) |
| 503 | { |
| 504 | mUniforms.clear(); |
| 505 | |
| 506 | enum |
| 507 | { |
| 508 | IDX_NAME_LENGTH, |
| 509 | IDX_TYPE, |
| 510 | IDX_LOCATION, |
| 511 | IDX_ARRAY_SIZE, |
| 512 | IDX_OFFSET, |
| 513 | IDX_BLOCK_INDEX, |
| 514 | IDX_ARRAY_STRIDE, |
| 515 | IDX_MATRIX_STRIDE, |
| 516 | IDX_IS_ROW_MAJOR, |
| 517 | IDX_ATOMIC_COUNTER_BUFFER_INDEX, |
| 518 | IDX_REFERENCED_BY_VERTEX_SHADER, |
| 519 | IDX_REFERENCED_BY_GEOMETRY_SHADER, |
| 520 | IDX_REFERENCED_BY_FRAGMENT_SHADER, |
| 521 | IDX_REFERENCED_BY_COMPUTE_SHADER, |
| 522 | IDX_REFERENCED_BY_TESS_CONTROL_SHADER, |
| 523 | IDX_REFERENCED_BY_TESS_EVALUATION_SHADER |
| 524 | }; |
| 525 | |
| 526 | std::vector<GLenum> const properties = |
| 527 | { |
| 528 | GL_NAME_LENGTH, |
| 529 | GL_TYPE, |
| 530 | GL_LOCATION, |
| 531 | GL_ARRAY_SIZE, |
| 532 | GL_OFFSET, |
| 533 | GL_BLOCK_INDEX, |
| 534 | GL_ARRAY_STRIDE, |
| 535 | GL_MATRIX_STRIDE, |
| 536 | GL_IS_ROW_MAJOR, |
| 537 | GL_ATOMIC_COUNTER_BUFFER_INDEX, |
| 538 | GL_REFERENCED_BY_VERTEX_SHADER, |
| 539 | GL_REFERENCED_BY_GEOMETRY_SHADER, |
| 540 | GL_REFERENCED_BY_FRAGMENT_SHADER, |
| 541 | GL_REFERENCED_BY_COMPUTE_SHADER, |
| 542 | GL_REFERENCED_BY_TESS_CONTROL_SHADER, |
| 543 | GL_REFERENCED_BY_TESS_EVALUATION_SHADER |
| 544 | }; |
| 545 | |
| 546 | GLsizei const numProperties = static_cast<GLsizei>(properties.size()); |
| 547 | |
| 548 | std::vector<GLint> results(properties.size(), 0); |
| 549 | for (int32_t i = 0; i < numResources; ++i) |
| 550 | { |
| 551 | glGetProgramResourceiv(mHandle, GL_UNIFORM, i, numProperties, |
| 552 | properties.data(), numProperties, nullptr, results.data()); |
| 553 |
nothing calls this directly
no test coverage detected