1 #include "apisurface.h"
6 ApiSurface::ApiSurface()
10 QSize ApiSurface::size() const
15 void ApiSurface::setSize(const QSize &size)
20 int ApiSurface::numChannels() const
25 void ApiSurface::setNumChannels(int numChannels)
27 m_numChannels = numChannels;
31 rgba8_to_argb(quint8 r, quint8 g, quint8 b, quint8 a)
33 return (a << 24 | r << 16 | g << 8 | b);
37 rgbaf2argb(float r, float g, float b, float a)
44 return (ab << 24 | rb << 16 | gb << 8 | bb);
47 void ApiSurface::contentsFromBase64(const QByteArray &base64)
49 QByteArray dataArray = QByteArray::fromBase64(base64);
50 const quint8 *data = (const quint8*)dataArray.data();
51 int width = m_size.width();
52 int height = m_size.height();
54 if (width <= 0 || height <= 0)
57 int *pixelData = (int*)malloc(sizeof(int) * width * height);
59 //XXX not sure if this will work when
60 // QSysInfo::ByteOrder == QSysInfo::BigEndian
62 if (m_numChannels == 4) {
63 for (int y = 0; y < height; ++y) {
64 for (int x = 0; x < width; ++x) {
65 int pixel = rgba8_to_argb(data[(y * width + x) * 4 + 0],
66 data[(y * width + x) * 4 + 1],
67 data[(y * width + x) * 4 + 2],
68 data[(y * width + x) * 4 + 3]);
69 pixelData[y * width + x] = pixel;
72 } else if (m_numChannels == 1) {
73 for (int y = 0; y < height; ++y) {
74 for (int x = 0; x < width; ++x) {
75 int pixel = rgba8_to_argb(data[y * width + x],
79 pixelData[y * width + x] = pixel;
86 m_image = QImage((uchar*)pixelData,
88 QImage::Format_ARGB32).mirrored();
89 m_thumb = m_image.scaled(64, 64, Qt::KeepAspectRatio);
90 //m_image.save("testoutput.png");
95 QImage ApiSurface::image() const
100 QImage ApiSurface::thumb() const
105 ApiTexture::ApiTexture()
112 int ApiTexture::unit() const
117 void ApiTexture::setUnit(int un)
122 QString ApiTexture::target() const
127 void ApiTexture::setTarget(const QString &str)
132 int ApiTexture::level() const
137 void ApiTexture::setLevel(int l)
142 ApiFramebuffer::ApiFramebuffer()
147 QString ApiFramebuffer::type() const
152 void ApiFramebuffer::setType(const QString &str)