summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpsi29a <psi29a@gmail.com>2022-01-09 10:57:50 +0000
committerpsi29a <psi29a@gmail.com>2022-01-09 10:57:50 +0000
commitd48f072b971cb517528fcb2a84ca5595274586d4 (patch)
treeacdb5f1eedf5890674f1f80cf62847fb98565244
parentd767ed99cffdcd36bf23fabd8d704ea1466dd87c (diff)
parente32d3d11ce53e97c27a02047632a99f30bf1a470 (diff)
Merge branch 'readbuffer_save' into 'master'
Fix black save game screenshots under certain settings (#6543) Closes #6543 See merge request OpenMW/openmw!1546
-rw-r--r--apps/openmw/mwrender/screenshotmanager.cpp9
1 files changed, 6 insertions, 3 deletions
diff --git a/apps/openmw/mwrender/screenshotmanager.cpp b/apps/openmw/mwrender/screenshotmanager.cpp
index 1973ca4025..5c3d925c9b 100644
--- a/apps/openmw/mwrender/screenshotmanager.cpp
+++ b/apps/openmw/mwrender/screenshotmanager.cpp
@@ -91,15 +91,18 @@ namespace MWRender
int width = screenW - leftPadding*2;
int height = screenH - topPadding*2;
- // Ensure we are reading from the resolved framebuffer and not the multisampled render buffer when in use.
- // glReadPixel() cannot read from multisampled targets.
+ // Ensure we are reading from the resolved framebuffer and not the multisampled render buffer. Also ensure that the readbuffer is set correctly with rendeirng to FBO.
+ // glReadPixel() cannot read from multisampled targets
PostProcessor* postProcessor = dynamic_cast<PostProcessor*>(renderInfo.getCurrentCamera()->getUserData());
- if (postProcessor && postProcessor->getFbo() && postProcessor->getMsaaFbo())
+ if (postProcessor && postProcessor->getFbo())
{
osg::GLExtensions* ext = osg::GLExtensions::Get(renderInfo.getContextID(), false);
if (ext)
+ {
ext->glBindFramebuffer(GL_FRAMEBUFFER_EXT, postProcessor->getFbo()->getHandle(renderInfo.getContextID()));
+ renderInfo.getState()->glReadBuffer(GL_COLOR_ATTACHMENT0_EXT);
+ }
}
mImage->readPixels(leftPadding, topPadding, width, height, GL_RGB, GL_UNSIGNED_BYTE);