MCPcopy Create free account
hub / github.com/davideberly/GeometricTools / ReflectProgramOutputs

Method ReflectProgramOutputs

GTE/Graphics/GL46/GLSLReflection.cpp:423–494  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

421}
422
423void GLSLReflection::ReflectProgramOutputs()
424{
425 GLint numResources = 0;
426 glGetProgramInterfaceiv(mHandle, GL_PROGRAM_OUTPUT, GL_ACTIVE_RESOURCES, &numResources);
427 if (numResources > 0)
428 {
429 mOutputs.resize(numResources);
430
431 enum
432 {
433 IDX_NAME_LENGTH,
434 IDX_TYPE,
435 IDX_LOCATION,
436 IDX_ARRAY_SIZE,
437 IDX_REFERENCED_BY_VERTEX_SHADER,
438 IDX_REFERENCED_BY_GEOMETRY_SHADER,
439 IDX_REFERENCED_BY_FRAGMENT_SHADER,
440 IDX_REFERENCED_BY_COMPUTE_SHADER,
441 IDX_REFERENCED_BY_TESS_CONTROL_SHADER,
442 IDX_REFERENCED_BY_TESS_EVALUATION_SHADER,
443 IDX_IS_PER_PATCH,
444 IDX_LOCATION_COMPONENT,
445 IDX_LOCATION_INDEX
446 };
447
448 std::vector<GLenum> const properties =
449 {
450 GL_NAME_LENGTH,
451 GL_TYPE,
452 GL_LOCATION,
453 GL_ARRAY_SIZE,
454 GL_REFERENCED_BY_VERTEX_SHADER,
455 GL_REFERENCED_BY_GEOMETRY_SHADER,
456 GL_REFERENCED_BY_FRAGMENT_SHADER,
457 GL_REFERENCED_BY_COMPUTE_SHADER,
458 GL_REFERENCED_BY_TESS_CONTROL_SHADER,
459 GL_REFERENCED_BY_TESS_EVALUATION_SHADER,
460 GL_IS_PER_PATCH,
461 GL_LOCATION_COMPONENT,
462 GL_LOCATION_INDEX
463 };
464
465 GLsizei const numProperties = static_cast<GLsizei>(properties.size());
466
467 std::vector<GLint> results(properties.size(), 0);
468 for (int32_t i = 0; i < numResources; ++i)
469 {
470 glGetProgramResourceiv(mHandle, GL_PROGRAM_OUTPUT, i, numProperties,
471 properties.data(), numProperties, nullptr, results.data());
472
473 GLsizei const numBytes = static_cast<GLsizei>(results[IDX_NAME_LENGTH] + 1);
474 std::vector<GLchar> name(numBytes);
475 glGetProgramResourceName(mHandle, GL_PROGRAM_OUTPUT, i, numBytes,
476 nullptr, name.data());
477
478 Output& info = mOutputs[i];
479 info.name = std::string(name.data());
480 info.type = results[IDX_TYPE];

Callers

nothing calls this directly

Calls 3

glGetProgramInterfaceivFunction · 0.85
glGetProgramResourceivFunction · 0.85
glGetProgramResourceNameFunction · 0.85

Tested by

no test coverage detected