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

Method ReflectProgramInputs

GTE/Graphics/GL46/GLSLReflection.cpp:353–421  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

351}
352
353void GLSLReflection::ReflectProgramInputs()
354{
355 GLint numResources = 0;
356 glGetProgramInterfaceiv(mHandle, GL_PROGRAM_INPUT, GL_ACTIVE_RESOURCES, &numResources);
357 if (numResources > 0)
358 {
359 mInputs.resize(numResources);
360
361 enum
362 {
363 IDX_NAME_LENGTH,
364 IDX_TYPE,
365 IDX_LOCATION,
366 IDX_ARRAY_SIZE,
367 IDX_REFERENCED_BY_VERTEX_SHADER,
368 IDX_REFERENCED_BY_GEOMETRY_SHADER,
369 IDX_REFERENCED_BY_FRAGMENT_SHADER,
370 IDX_REFERENCED_BY_COMPUTE_SHADER,
371 IDX_REFERENCED_BY_TESS_CONTROL_SHADER,
372 IDX_REFERENCED_BY_TESS_EVALUATION_SHADER,
373 IDX_IS_PER_PATCH,
374 IDX_LOCATION_COMPONENT
375 };
376
377 std::vector<GLenum> const properties =
378 {
379 GL_NAME_LENGTH,
380 GL_TYPE,
381 GL_LOCATION,
382 GL_ARRAY_SIZE,
383 GL_REFERENCED_BY_VERTEX_SHADER,
384 GL_REFERENCED_BY_GEOMETRY_SHADER,
385 GL_REFERENCED_BY_FRAGMENT_SHADER,
386 GL_REFERENCED_BY_COMPUTE_SHADER,
387 GL_REFERENCED_BY_TESS_CONTROL_SHADER,
388 GL_REFERENCED_BY_TESS_EVALUATION_SHADER,
389 GL_IS_PER_PATCH,
390 GL_LOCATION_COMPONENT
391 };
392
393 GLsizei const numProperties = static_cast<GLsizei>(properties.size());
394
395 std::vector<GLint> results(properties.size(), 0);
396 for (int32_t i = 0; i < numResources; ++i)
397 {
398 glGetProgramResourceiv(mHandle, GL_PROGRAM_INPUT, i, numProperties,
399 properties.data(), numProperties, nullptr, results.data());
400
401 GLsizei const numBytes = static_cast<GLsizei>(results[IDX_NAME_LENGTH] + 1);
402 std::vector<GLchar> name(numBytes);
403 glGetProgramResourceName(mHandle, GL_PROGRAM_INPUT, i, numBytes,
404 nullptr, name.data());
405
406 Input& info = mInputs[i];
407 info.name = std::string(name.data());
408 info.type = results[IDX_TYPE];
409 info.location = results[IDX_LOCATION];
410 info.arraySize = results[IDX_ARRAY_SIZE];

Callers

nothing calls this directly

Calls 3

glGetProgramInterfaceivFunction · 0.85
glGetProgramResourceivFunction · 0.85
glGetProgramResourceNameFunction · 0.85

Tested by

no test coverage detected