| Index: src/gpu/gl/GrGLGpu.cpp
|
| diff --git a/src/gpu/gl/GrGLGpu.cpp b/src/gpu/gl/GrGLGpu.cpp
|
| index d48f2080119c583d70ecfd374151567de5416253..07aaaae26b5c1b4288bb6f0c1a985f8268f436ce 100644
|
| --- a/src/gpu/gl/GrGLGpu.cpp
|
| +++ b/src/gpu/gl/GrGLGpu.cpp
|
| @@ -157,18 +157,35 @@ bool GrGLGpu::BlendCoeffReferencesConstant(GrBlendCoeff coeff) {
|
|
|
| ///////////////////////////////////////////////////////////////////////////////
|
|
|
| +GrGpu* GrGLGpu::Create(GrBackendContext backendContext, GrContext* context) {
|
| + SkAutoTUnref<const GrGLInterface> glInterface(
|
| + reinterpret_cast<const GrGLInterface*>(backendContext));
|
| + if (!glInterface) {
|
| + glInterface.reset(GrGLDefaultInterface());
|
| + } else {
|
| + glInterface->ref();
|
| + }
|
| + if (!glInterface) {
|
| + return NULL;
|
| + }
|
| + GrGLContext* glContext = GrGLContext::Create(glInterface);
|
| + if (glContext) {
|
| + return SkNEW_ARGS(GrGLGpu, (glContext, context));
|
| + }
|
| + return NULL;
|
| +}
|
| +
|
| static bool gPrintStartupSpew;
|
|
|
| -GrGLGpu::GrGLGpu(const GrGLContext& ctx, GrContext* context)
|
| +GrGLGpu::GrGLGpu(GrGLContext* ctx, GrContext* context)
|
| : GrGpu(context)
|
| , fGLContext(ctx) {
|
| -
|
| - SkASSERT(ctx.isInitialized());
|
| - fCaps.reset(SkRef(ctx.caps()));
|
| + SkASSERT(ctx);
|
| + fCaps.reset(SkRef(ctx->caps()));
|
|
|
| fHWBoundTextureUniqueIDs.reset(this->glCaps().maxFragmentTextureUnits());
|
|
|
| - GrGLClearErr(fGLContext.interface());
|
| + GrGLClearErr(this->glInterface());
|
| if (gPrintStartupSpew) {
|
| const GrGLubyte* vendor;
|
| const GrGLubyte* renderer;
|
| @@ -182,7 +199,7 @@ GrGLGpu::GrGLGpu(const GrGLContext& ctx, GrContext* context)
|
| SkDebugf("------ RENDERER %s\n", renderer);
|
| SkDebugf("------ VERSION %s\n", version);
|
| SkDebugf("------ EXTENSIONS\n");
|
| - ctx.extensions().print();
|
| + this->glContext().extensions().print();
|
| SkDebugf("\n");
|
| SkDebugf("%s", this->glCaps().dump().c_str());
|
| }
|
| @@ -331,7 +348,7 @@ void GrGLGpu::onResetContext(uint32_t resetBits) {
|
| }
|
|
|
| if (kGLES_GrGLStandard == this->glStandard() &&
|
| - fGLContext.hasExtension("GL_ARM_shader_framebuffer_fetch")) {
|
| + this->hasExtension("GL_ARM_shader_framebuffer_fetch")) {
|
| // The arm extension requires specifically enabling MSAA fetching per sample.
|
| // On some devices this may have a perf hit. Also multiple render targets are disabled
|
| GL_CALL(Enable(GR_GL_FETCH_PER_SAMPLE_ARM));
|
| @@ -812,7 +829,7 @@ bool GrGLGpu::uploadCompressedTexData(const GrSurfaceDesc& desc,
|
| return true;
|
| }
|
|
|
| -static bool renderbuffer_storage_msaa(GrGLContext& ctx,
|
| +static bool renderbuffer_storage_msaa(const GrGLContext& ctx,
|
| int sampleCount,
|
| GrGLenum format,
|
| int width, int height) {
|
| @@ -899,7 +916,7 @@ bool GrGLGpu::createRenderTargetObjects(const GrSurfaceDesc& desc,
|
| if (idDesc->fRTFBOID != idDesc->fTexFBOID) {
|
| SkASSERT(desc.fSampleCnt > 0);
|
| GL_CALL(BindRenderbuffer(GR_GL_RENDERBUFFER, idDesc->fMSColorRenderbufferID));
|
| - if (!renderbuffer_storage_msaa(fGLContext,
|
| + if (!renderbuffer_storage_msaa(*fGLContext,
|
| desc.fSampleCnt,
|
| msColorFormat,
|
| desc.fWidth, desc.fHeight)) {
|
| @@ -917,7 +934,7 @@ bool GrGLGpu::createRenderTargetObjects(const GrSurfaceDesc& desc,
|
| if (status != GR_GL_FRAMEBUFFER_COMPLETE) {
|
| goto FAILED;
|
| }
|
| - fGLContext.caps()->markConfigAsValidColorAttachment(desc.fConfig);
|
| + fGLContext->caps()->markConfigAsValidColorAttachment(desc.fConfig);
|
| }
|
| }
|
| fStats.incRenderTargetBinds();
|
| @@ -940,7 +957,7 @@ bool GrGLGpu::createRenderTargetObjects(const GrSurfaceDesc& desc,
|
| if (status != GR_GL_FRAMEBUFFER_COMPLETE) {
|
| goto FAILED;
|
| }
|
| - fGLContext.caps()->markConfigAsValidColorAttachment(desc.fConfig);
|
| + fGLContext->caps()->markConfigAsValidColorAttachment(desc.fConfig);
|
| }
|
|
|
| return true;
|
| @@ -1162,7 +1179,7 @@ bool GrGLGpu::createStencilAttachmentForRenderTarget(GrRenderTarget* rt, int wid
|
| // version on a GL that doesn't have an MSAA extension.
|
| bool created;
|
| if (samples > 0) {
|
| - created = renderbuffer_storage_msaa(fGLContext,
|
| + created = renderbuffer_storage_msaa(*fGLContext,
|
| samples,
|
| sFmt.fInternalFormat,
|
| width, height);
|
| @@ -1303,7 +1320,7 @@ bool GrGLGpu::attachStencilAttachmentToRenderTarget(GrStencilAttachment* sb, GrR
|
| }
|
| return false;
|
| } else {
|
| - fGLContext.caps()->markColorConfigAndStencilFormatAsVerified(
|
| + fGLContext->caps()->markColorConfigAndStencilFormatAsVerified(
|
| rt->config(),
|
| glsb->format());
|
| }
|
|
|