MCPcopy Create free account
hub / github.com/baldurk/renderdoc / CopyDepthArrayToTex2DMS

Method CopyDepthArrayToTex2DMS

renderdoc/driver/gl/gl_msaa_array_conv.cpp:460–593  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

458}
459
460void WrappedOpenGL::CopyDepthArrayToTex2DMS(GLuint destMS, GLuint srcArray, GLint width,
461 GLint height, GLint arraySize, GLint samples,
462 GLenum intFormat, uint32_t selectedSlice)
463{
464 GLMarkerRegion renderoverlay("CopyDepthArrayToTex2DMS");
465
466 bool singleSliceMode = (selectedSlice != ~0U);
467
468 WrappedOpenGL &drv = *this;
469
470 const ArrayMSPrograms &arrms = GetArrayMS();
471
472 GLRenderState rs;
473 rs.FetchState(this);
474
475 GLuint vao = 0;
476 drv.glGenVertexArrays(1, &vao);
477 drv.glBindVertexArray(vao);
478
479 GLuint texs[3];
480 drv.glGenTextures(3, texs);
481 drv.glTextureView(texs[0], eGL_TEXTURE_2D_MULTISAMPLE_ARRAY, destMS, intFormat, 0, 1, 0, arraySize);
482 drv.glTextureView(texs[1], eGL_TEXTURE_2D_ARRAY, srcArray, intFormat, 0, 1, 0, arraySize * samples);
483 drv.glTextureView(texs[2], eGL_TEXTURE_2D_ARRAY, srcArray, intFormat, 0, 1, 0, arraySize * samples);
484 drv.glTextureParameteriEXT(texs[0], eGL_TEXTURE_2D_MULTISAMPLE_ARRAY, eGL_TEXTURE_BASE_LEVEL, 0);
485 drv.glTextureParameteriEXT(texs[0], eGL_TEXTURE_2D_MULTISAMPLE_ARRAY, eGL_TEXTURE_MAX_LEVEL, 0);
486
487 GLuint fbo = 0;
488 drv.glGenFramebuffers(1, &fbo);
489 drv.glBindFramebuffer(eGL_FRAMEBUFFER, fbo);
490 drv.glDrawBuffers(0, NULL);
491
492 drv.glUseProgram(arrms.DepthArray2MS);
493 drv.glViewport(0, 0, width, height);
494
495 drv.glDisable(eGL_CULL_FACE);
496 drv.glDisable(eGL_BLEND);
497 drv.glDisable(eGL_SCISSOR_TEST);
498 if(!IsGLES)
499 drv.glPolygonMode(eGL_FRONT_AND_BACK, eGL_FILL);
500 drv.glEnable(eGL_DEPTH_TEST);
501 drv.glEnable(eGL_STENCIL_TEST);
502 drv.glDepthFunc(eGL_ALWAYS);
503 drv.glDepthMask(GL_TRUE);
504 drv.glEnable(eGL_SAMPLE_SHADING);
505 drv.glEnable(eGL_SAMPLE_MASK);
506 drv.glStencilOp(eGL_REPLACE, eGL_REPLACE, eGL_REPLACE);
507 drv.glStencilMask(0xff);
508
509 uint32_t numStencil = 1;
510 GLenum attach = eGL_DEPTH_ATTACHMENT;
511
512 switch(GetBaseFormat(intFormat))
513 {
514 case eGL_DEPTH_STENCIL:
515 numStencil = 256;
516 attach = eGL_DEPTH_STENCIL_ATTACHMENT;
517 break;

Callers

nothing calls this directly

Calls 15

GetBaseFormatFunction · 0.85
ToStrFunction · 0.85
FetchStateMethod · 0.80
glGenVertexArraysMethod · 0.45
glBindVertexArrayMethod · 0.45
glGenTexturesMethod · 0.45
glTextureViewMethod · 0.45
glGenFramebuffersMethod · 0.45
glBindFramebufferMethod · 0.45
glDrawBuffersMethod · 0.45
glUseProgramMethod · 0.45

Tested by

no test coverage detected