added software renderer. split common functions prev.
in gleswidget to renderstack (a QStackWidget), which in turn calls an actual renderer. added ability to target GLES directly, but this is maybe uneeded.
This commit is contained in:
44
src/qt/qt_hardwarerenderer.cpp
Normal file
44
src/qt/qt_hardwarerenderer.cpp
Normal file
@@ -0,0 +1,44 @@
|
||||
#include "qt_hardwarerenderer.hpp"
|
||||
|
||||
void HardwareRenderer::resizeGL(int w, int h)
|
||||
{
|
||||
glViewport(0, 0, w, h);
|
||||
}
|
||||
|
||||
void HardwareRenderer::initializeGL()
|
||||
{
|
||||
initializeOpenGLFunctions();
|
||||
}
|
||||
|
||||
void HardwareRenderer::paintGL()
|
||||
{
|
||||
QPainter painter(this);
|
||||
painter.drawImage(QRect(0, 0, width(), height()), image, QRect(sx, sy, sw, sh));
|
||||
// "release" image, reducing it's refcount, so renderstack::blit()
|
||||
// won't have to reallocate
|
||||
image = QImage();
|
||||
}
|
||||
|
||||
void HardwareRenderer::setRenderType(RenderType type) {
|
||||
QSurfaceFormat format;
|
||||
switch (type) {
|
||||
case RenderType::OpenGL:
|
||||
setTextureFormat(GL_RGB);
|
||||
format.setRenderableType(QSurfaceFormat::OpenGL);
|
||||
break;
|
||||
case RenderType::OpenGLES:
|
||||
setTextureFormat(GL_RGBA);
|
||||
format.setRenderableType(QSurfaceFormat::OpenGLES);
|
||||
break;
|
||||
}
|
||||
setFormat(format);
|
||||
}
|
||||
|
||||
void HardwareRenderer::onBlit(const QImage& img, int x, int y, int w, int h) {
|
||||
image = img;
|
||||
sx = x;
|
||||
sy = y;
|
||||
sw = w;
|
||||
sh = h;
|
||||
update();
|
||||
}
|
||||
Reference in New Issue
Block a user