hsqml-0.3.1.1: cbits/CanvasImpl.cpp
#include <QtCore/qmath.h>
#include "CanvasImpl.h"
#include "Manager.h"
HsQMLGLDelegateImpl::HsQMLGLDelegateImpl(HsQMLGLPaintCb paintCb)
: mPaintCb(paintCb)
{}
HsQMLGLDelegateImpl::~HsQMLGLDelegateImpl()
{
gManager->freeFun(reinterpret_cast<HsFunPtr>(mPaintCb));
}
HsQMLCanvasBackEnd::HsQMLCanvasBackEnd(QQuickWindow* win)
{
QObject::connect(
win, SIGNAL(beforeRendering()),
this, SLOT(doRendering()));
}
HsQMLCanvasBackEnd::~HsQMLCanvasBackEnd()
{
}
void HsQMLCanvasBackEnd::setModeSize(
HsQMLCanvas::DisplayMode mode, qreal w, qreal h)
{
mDisplayMode = mode;
mCanvasWidth = w;
mCanvasHeight = h;
if (HsQMLCanvas::Inline == mode) {
if (!mFBO || mFBO->width() != w || mFBO->height() != h) {
mFBO.reset(new QOpenGLFramebufferObject(
qCeil(w), qCeil(h), QOpenGLFramebufferObject::Depth));
}
}
else {
mFBO.reset();
}
}
void HsQMLCanvasBackEnd::doRendering()
{
bool inlineMode = HsQMLCanvas::Inline == mDisplayMode;
if (inlineMode && !mFBO) {
return;
}
if (inlineMode) {
mFBO->bind();
}
if (inlineMode) {
mFBO->release();
}
}