f43d0001e4
This reverts commit6df4d6be0d
. Reason for revert: Google3 fix landed Original change's description: > Revert "Revert "Revert "Remove GrBackendRenderTargetDesc in favor of GrBackendRenderTarget.""" > > This reverts commit71554bc256
. > > Reason for revert: Google3 > > Original change's description: > > Revert "Revert "Remove GrBackendRenderTargetDesc in favor of GrBackendRenderTarget."" > > > > This reverts commit807371c15b
. > > > > Docs-Preview: https://skia.org/?cl=40260 > > Change-Id: I28e0434c455155ff39a5aaa4141abdf442474e87 > > Reviewed-on: https://skia-review.googlesource.com/40260 > > Reviewed-by: Greg Daniel <egdaniel@google.com> > > Commit-Queue: Brian Salomon <bsalomon@google.com> > > TBR=egdaniel@google.com,bsalomon@google.com > > Change-Id: Ifdfa896a70db69935473276d12dce54de5c6b6f7 > No-Presubmit: true > No-Tree-Checks: true > No-Try: true > Reviewed-on: https://skia-review.googlesource.com/41500 > Reviewed-by: Brian Salomon <bsalomon@google.com> > Commit-Queue: Brian Salomon <bsalomon@google.com> TBR=egdaniel@google.com,bsalomon@google.com Change-Id: I827419bb19972c3644929a8c984bb9534baab0ba No-Presubmit: true No-Tree-Checks: true No-Try: true Reviewed-on: https://skia-review.googlesource.com/41700 Reviewed-by: Brian Salomon <bsalomon@google.com> Commit-Queue: Brian Salomon <bsalomon@google.com>
96 lines
2.8 KiB
C++
96 lines
2.8 KiB
C++
|
|
/*
|
|
* Copyright 2012 Google Inc.
|
|
*
|
|
* Use of this source code is governed by a BSD-style license that can be
|
|
* found in the LICENSE file.
|
|
*/
|
|
|
|
|
|
#include "SkGLWidget.h"
|
|
|
|
#if SK_SUPPORT_GPU
|
|
|
|
SkGLWidget::SkGLWidget(SkDebugger* debugger) : QGLWidget() {
|
|
fDebugger = debugger;
|
|
}
|
|
|
|
SkGLWidget::~SkGLWidget() {
|
|
}
|
|
|
|
void SkGLWidget::setSampleCount(int sampleCount) {
|
|
QGLFormat currentFormat = format();
|
|
currentFormat.setSampleBuffers(sampleCount > 0);
|
|
currentFormat.setSamples(sampleCount);
|
|
setFormat(currentFormat);
|
|
}
|
|
|
|
void SkGLWidget::initializeGL() {
|
|
if (!fCurIntf) {
|
|
fCurIntf.reset(GrGLCreateNativeInterface());
|
|
}
|
|
if (!fCurIntf) {
|
|
return;
|
|
}
|
|
// The call may come multiple times, for example after setSampleCount(). The QGLContext will be
|
|
// different, but we do not have a mechanism to catch the destroying of QGLContext, so that
|
|
// proper resource cleanup could be made.
|
|
if (fCurContext) {
|
|
fCurContext->abandonContext();
|
|
}
|
|
|
|
fGpuSurface = nullptr;
|
|
fCanvas = nullptr;
|
|
|
|
fCurContext = GrContext::MakeGL(fCurIntf.get());
|
|
}
|
|
|
|
void SkGLWidget::createRenderTarget() {
|
|
if (!fCurContext) {
|
|
return;
|
|
}
|
|
|
|
glDisable(GL_SCISSOR_TEST);
|
|
glStencilMask(0xffffffff);
|
|
glClearStencil(0);
|
|
glClear(GL_STENCIL_BUFFER_BIT);
|
|
fCurContext->resetContext();
|
|
GrBackendRenderTarget backendRenderTarget = this->getBackendRenderTarget();
|
|
fGpuSurface = SkSurface::MakeFromBackendRenderTarget(fCurContext.get(), backendRenderTarget,
|
|
kBottomLeft_GrSurfaceOrigin,
|
|
nullptr, nullptr);
|
|
fCanvas = fGpuSurface->getCanvas();
|
|
}
|
|
|
|
void SkGLWidget::resizeGL(int w, int h) {
|
|
SkASSERT(w == this->width() && h == this->height());
|
|
this->createRenderTarget();
|
|
}
|
|
|
|
void SkGLWidget::paintGL() {
|
|
if (!this->isHidden() && fCanvas) {
|
|
fCurContext->resetContext();
|
|
fDebugger->draw(fCanvas);
|
|
// TODO(chudy): Implement an optional flush button in Gui.
|
|
fCanvas->flush();
|
|
Q_EMIT drawComplete();
|
|
}
|
|
}
|
|
|
|
GrBackendRenderTarget SkGLWidget::getBackendRenderTarget() {
|
|
GrGLFramebufferInfo info;
|
|
int stencilBits;
|
|
int sampleCnt;
|
|
GR_GL_GetIntegerv(fCurIntf.get(), GR_GL_FRAMEBUFFER_BINDING, &info.fFBOID);
|
|
GR_GL_GetIntegerv(fCurIntf.get(), GR_GL_SAMPLES, &sampleCnt);
|
|
GR_GL_GetIntegerv(fCurIntf.get(), GR_GL_STENCIL_BITS, &stencilBits);
|
|
return GrBackendRenderTarget(SkScalarRoundToInt(this->width()),
|
|
SkScalarRoundToInt(this->height()),
|
|
sampleCnt,
|
|
stencilBits,
|
|
kSkia8888_GrPixelConfig,
|
|
info);
|
|
}
|
|
|
|
#endif
|