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

Function QueryPrePostModPixelValues

renderdoc/driver/gl/gl_pixelhistory.cpp:1205–1382  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1203}
1204
1205void QueryPrePostModPixelValues(WrappedOpenGL *driver, GLPixelHistoryResources &resources,
1206 const rdcarray<EventUsage> &modEvents, int x, int y,
1207 rdcarray<PixelModification> &history, uint32_t numSamples,
1208 uint32_t sampleIndex)
1209{
1210 GLMarkerRegion region("QueryPrePostModPixelValues");
1211 driver->ReplayLog(0, modEvents[0].eventId, eReplay_WithoutDraw);
1212 CopyFramebuffer premodCopyFramebuffer = {};
1213 premodCopyFramebuffer.framebufferId = ~0u;
1214 CopyFramebuffer postmodCopyFramebuffer = {};
1215 postmodCopyFramebuffer.framebufferId = ~0u;
1216 int preModLastIdx = 0, postModLastIdx = 0;
1217
1218 for(size_t i = 0; i < modEvents.size(); i++)
1219 {
1220 uint32_t colIdx = getFramebufferColIndex(driver, resources.target);
1221
1222 {
1223 GLint savedReadFramebuffer, savedDrawFramebuffer;
1224 driver->glGetIntegerv(eGL_DRAW_FRAMEBUFFER_BINDING, &savedDrawFramebuffer);
1225 driver->glGetIntegerv(eGL_READ_FRAMEBUFFER_BINDING, &savedReadFramebuffer);
1226
1227 GLuint copySourceFramebuffer = savedDrawFramebuffer;
1228
1229 if(isDirectWrite(modEvents[i].usage))
1230 {
1231 copySourceFramebuffer = resources.copySourceFramebuffer;
1232
1233 // bind this as the framebuffer so the below code which expects to duplicate based on bound
1234 // framebuffer will work. We've already saved teh real one
1235 driver->glBindFramebuffer(eGL_FRAMEBUFFER, copySourceFramebuffer);
1236 }
1237
1238 if(numSamples > 1)
1239 {
1240 premodCopyFramebuffer =
1241 getCopyFramebuffer(driver, colIdx, resources.copyFramebuffers, ModType::PreMod,
1242 numSamples, int(modEvents.size()));
1243
1244 driver->glBindFramebuffer(eGL_DRAW_FRAMEBUFFER, premodCopyFramebuffer.framebufferId);
1245 driver->glBindFramebuffer(eGL_READ_FRAMEBUFFER, copySourceFramebuffer);
1246
1247 GLenum savedReadBuffer;
1248 driver->glGetIntegerv(eGL_READ_BUFFER, (GLint *)&savedReadBuffer);
1249
1250 driver->glReadBuffer(GLenum(eGL_COLOR_ATTACHMENT0 + colIdx));
1251 SafeBlitFramebuffer(x, y, x + 1, y + 1, 0, 0, 1, 1, getFramebufferCopyMask(driver),
1252 eGL_NEAREST);
1253 readPixelValuesMS(driver, resources, premodCopyFramebuffer, sampleIndex, 0, 0, history, i,
1254 ModType::PreMod, true);
1255
1256 driver->glReadBuffer(savedReadBuffer);
1257 }
1258 else
1259 {
1260 CopyFramebuffer newCopyFramebuffer =
1261 getCopyFramebuffer(driver, colIdx, resources.copyFramebuffers, ModType::PreMod,
1262 1 /*single sampled*/, int(modEvents.size()));

Callers 1

PixelHistoryMethod · 0.85

Calls 11

getFramebufferColIndexFunction · 0.85
isDirectWriteFunction · 0.85
SafeBlitFramebufferFunction · 0.85
getFramebufferCopyMaskFunction · 0.85
readPixelValuesMSFunction · 0.85
readPixelValuesFunction · 0.85
ReplayLogMethod · 0.45
sizeMethod · 0.45
glGetIntegervMethod · 0.45
glBindFramebufferMethod · 0.45
glReadBufferMethod · 0.45

Tested by

no test coverage detected