| Index: src/gpu/gl/GrGLCaps.cpp
|
| diff --git a/src/gpu/gl/GrGLCaps.cpp b/src/gpu/gl/GrGLCaps.cpp
|
| index ae6e6132b1b8e80b2c4834104131c1199561c0be..5c6d59fbb6407aa7eee109680379ef320758bde8 100644
|
| --- a/src/gpu/gl/GrGLCaps.cpp
|
| +++ b/src/gpu/gl/GrGLCaps.cpp
|
| @@ -10,6 +10,7 @@
|
|
|
| #include "GrContextOptions.h"
|
| #include "GrGLContext.h"
|
| +#include "GrGLRenderTarget.h"
|
| #include "glsl/GrGLSLCaps.h"
|
| #include "SkTSearch.h"
|
| #include "SkTSort.h"
|
| @@ -17,6 +18,8 @@
|
| GrGLCaps::GrGLCaps(const GrContextOptions& contextOptions,
|
| const GrGLContextInfo& ctxInfo,
|
| const GrGLInterface* glInterface) : INHERITED(contextOptions) {
|
| + fStandard = ctxInfo.standard();
|
| +
|
| fStencilFormats.reset();
|
| fMSFBOType = kNone_MSFBOType;
|
| fInvalidateFBType = kNone_InvalidateFBType;
|
| @@ -648,47 +651,52 @@ bool GrGLCaps::hasPathRenderingSupport(const GrGLContextInfo& ctxInfo, const GrG
|
| }
|
| return true;
|
| }
|
| -bool GrGLCaps::readPixelsSupported(const GrGLInterface* intf,
|
| +
|
| +bool GrGLCaps::readPixelsSupported(GrPixelConfig rtConfig,
|
| GrPixelConfig readConfig,
|
| - GrPixelConfig currFBOConfig) const {
|
| - SkASSERT(this->isConfigRenderable(currFBOConfig, false));
|
| + std::function<void (GrGLenum, GrGLint*)> getIntegerv,
|
| + std::function<bool ()> bindRenderTarget) const {
|
| + SkASSERT(this->isConfigRenderable(rtConfig, false));
|
|
|
| GrGLenum readFormat;
|
| GrGLenum readType;
|
| - if (!this->getReadPixelsFormat(currFBOConfig, readConfig, &readFormat, &readType)) {
|
| + if (!this->getReadPixelsFormat(rtConfig, readConfig, &readFormat, &readType)) {
|
| return false;
|
| }
|
|
|
| - if (kGL_GrGLStandard == intf->fStandard) {
|
| + if (kGL_GrGLStandard == fStandard) {
|
| // All of our renderable configs can be converted to each other by glReadPixels in OpenGL.
|
| return true;
|
| }
|
|
|
| // See Section 16.1.2 in the ES 3.2 specification.
|
|
|
| - if (kNormalizedFixedPoint_FormatType == fConfigTable[currFBOConfig].fFormatType) {
|
| + if (kNormalizedFixedPoint_FormatType == fConfigTable[rtConfig].fFormatType) {
|
| if (GR_GL_RGBA == readFormat && GR_GL_UNSIGNED_BYTE == readType) {
|
| return true;
|
| }
|
| } else {
|
| - SkASSERT(kFloat_FormatType == fConfigTable[currFBOConfig].fFormatType);
|
| + SkASSERT(kFloat_FormatType == fConfigTable[rtConfig].fFormatType);
|
| if (GR_GL_RGBA == readFormat && GR_GL_FLOAT == readType) {
|
| return true;
|
| }
|
| }
|
|
|
| - if (0 == fConfigTable[currFBOConfig].fSecondReadPixelsFormat.fFormat) {
|
| + if (0 == fConfigTable[rtConfig].fSecondReadPixelsFormat.fFormat) {
|
| ReadPixelsFormat* rpFormat =
|
| - const_cast<ReadPixelsFormat*>(&fConfigTable[currFBOConfig].fSecondReadPixelsFormat);
|
| + const_cast<ReadPixelsFormat*>(&fConfigTable[rtConfig].fSecondReadPixelsFormat);
|
| GrGLint format = 0, type = 0;
|
| - GR_GL_GetIntegerv(intf, GR_GL_IMPLEMENTATION_COLOR_READ_FORMAT, &format);
|
| - GR_GL_GetIntegerv(intf, GR_GL_IMPLEMENTATION_COLOR_READ_TYPE, &type);
|
| + if (!bindRenderTarget()) {
|
| + return false;
|
| + }
|
| + getIntegerv(GR_GL_IMPLEMENTATION_COLOR_READ_FORMAT, &format);
|
| + getIntegerv(GR_GL_IMPLEMENTATION_COLOR_READ_TYPE, &type);
|
| rpFormat->fFormat = format;
|
| rpFormat->fType = type;
|
| }
|
|
|
| - return fConfigTable[currFBOConfig].fSecondReadPixelsFormat.fFormat == readFormat &&
|
| - fConfigTable[currFBOConfig].fSecondReadPixelsFormat.fType == readType;
|
| + return fConfigTable[rtConfig].fSecondReadPixelsFormat.fFormat == readFormat &&
|
| + fConfigTable[rtConfig].fSecondReadPixelsFormat.fType == readType;
|
| }
|
|
|
| void GrGLCaps::initFSAASupport(const GrGLContextInfo& ctxInfo, const GrGLInterface* gli) {
|
|
|