MCPcopy Create free account
hub / github.com/ddiakopoulos/polymer / pbr_renderer

Method pbr_renderer

libraries/lib-engine/src/renderer-pbr.cpp:479–551  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

477}
478
479pbr_renderer::pbr_renderer(const renderer_settings settings) : settings(settings)
480{
481 assert(settings.renderSize.x > 0 && settings.renderSize.y > 0);
482 assert(settings.cameraCount >= 1);
483
484 post_quad = make_fullscreen_quad();
485 cubemap_box = make_cube_mesh();
486
487 eyeFramebuffers.resize(settings.cameraCount);
488 eyeTextures.resize(settings.cameraCount);
489 eyeDepthTextures.resize(settings.cameraCount);
490
491 // Generate multisample render buffers for color and depth, attach to multi-sampled framebuffer target
492 glNamedRenderbufferStorageMultisample(multisampleRenderbuffers[0], settings.msaaSamples, GL_RGBA16F, settings.renderSize.x, settings.renderSize.y);
493 glNamedFramebufferRenderbuffer(multisampleFramebuffer, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, multisampleRenderbuffers[0]);
494 glNamedRenderbufferStorageMultisample(multisampleRenderbuffers[1], settings.msaaSamples, GL_DEPTH24_STENCIL8, settings.renderSize.x, settings.renderSize.y);
495 glNamedFramebufferRenderbuffer(multisampleFramebuffer, GL_DEPTH_STENCIL_ATTACHMENT, GL_RENDERBUFFER, multisampleRenderbuffers[1]);
496
497 multisampleFramebuffer.check_complete();
498
499 // Generate textures and framebuffers for |settings.cameraCount|
500 for (uint32_t camIdx = 0; camIdx < settings.cameraCount; ++camIdx)
501 {
502 // Depth
503 eyeDepthTextures[camIdx].setup(settings.renderSize.x, settings.renderSize.y, GL_DEPTH_COMPONENT32, GL_DEPTH_COMPONENT, GL_FLOAT, nullptr);
504
505 // Color (16-bit float for HDR precision, eliminates banding on smooth gradients)
506 eyeTextures[camIdx].setup(settings.renderSize.x, settings.renderSize.y, GL_RGBA16F, GL_RGBA, GL_FLOAT, nullptr, false);
507 glTextureParameteri(eyeTextures[camIdx], GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
508 glTextureParameteri(eyeTextures[camIdx], GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
509 glTextureParameteri(eyeTextures[camIdx], GL_TEXTURE_MAX_LEVEL, 0);
510
511 // Attachments
512 glNamedFramebufferTexture(eyeFramebuffers[camIdx], GL_COLOR_ATTACHMENT0, eyeTextures[camIdx], 0);
513 glNamedFramebufferTexture(eyeFramebuffers[camIdx], GL_DEPTH_ATTACHMENT, eyeDepthTextures[camIdx], 0);
514
515 eyeFramebuffers[camIdx].check_complete();
516 }
517
518 if (settings.tonemapEnabled)
519 {
520 postFramebuffers.resize(settings.cameraCount);
521 postTextures.resize(settings.cameraCount);
522
523 for (uint32_t camIdx = 0; camIdx < settings.cameraCount; ++camIdx)
524 {
525 postTextures[camIdx].setup(settings.renderSize.x, settings.renderSize.y, GL_RGBA, GL_RGBA, GL_FLOAT, nullptr, false);
526 glTextureParameteri(postTextures[camIdx], GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
527 glTextureParameteri(postTextures[camIdx], GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
528 glTextureParameteri(postTextures[camIdx], GL_TEXTURE_MAX_LEVEL, 0);
529 glNamedFramebufferTexture(postFramebuffers[camIdx], GL_COLOR_ATTACHMENT0, postTextures[camIdx], 0);
530 postFramebuffers[camIdx].check_complete();
531 }
532 }
533
534 gl_check_error(__FILE__, __LINE__);
535
536 // Only create shadow resources if the user has requested them.

Callers

nothing calls this directly

Calls 10

make_fullscreen_quadFunction · 0.85
make_cube_meshFunction · 0.85
gl_check_errorFunction · 0.85
generate_dfg_lutFunction · 0.85
check_completeMethod · 0.80
set_enabledMethod · 0.80
resizeMethod · 0.45
setupMethod · 0.45
resetMethod · 0.45
startMethod · 0.45

Tested by

no test coverage detected