m_size = size;
}
+int ApiSurface::numChannels() const
+{
+ return m_numChannels;
+}
+
+void ApiSurface::setNumChannels(int numChannels)
+{
+ m_numChannels = numChannels;
+}
+
+static inline int
+rgba8_to_argb(quint8 r, quint8 g, quint8 b, quint8 a)
+{
+ return (a << 24 | r << 16 | g << 8 | b);
+}
+
static inline int
rgbaf2argb(float r, float g, float b, float a)
{
void ApiSurface::contentsFromBase64(const QByteArray &base64)
{
QByteArray dataArray = QByteArray::fromBase64(base64);
- const float *data = (const float*)dataArray.data();
+ const quint8 *data = (const quint8*)dataArray.data();
int width = m_size.width();
int height = m_size.height();
//XXX not sure if this will work when
// QSysInfo::ByteOrder == QSysInfo::BigEndian
- for (int y = 0; y < height; ++y) {
- for (int x = 0; x < width; ++x) {
- int pixel = rgbaf2argb(data[(y * width + x) * 4 + 0],
- data[(y * width + x) * 4 + 1],
- data[(y * width + x) * 4 + 2],
- data[(y * width + x) * 4 + 3]);
- pixelData[y * width + x] = pixel;
+ if (m_numChannels == 4) {
+ for (int y = 0; y < height; ++y) {
+ for (int x = 0; x < width; ++x) {
+ int pixel = rgba8_to_argb(data[(y * width + x) * 4 + 0],
+ data[(y * width + x) * 4 + 1],
+ data[(y * width + x) * 4 + 2],
+ data[(y * width + x) * 4 + 3]);
+ pixelData[y * width + x] = pixel;
+ }
}
+ } else if (m_numChannels == 1) {
+ for (int y = 0; y < height; ++y) {
+ for (int x = 0; x < width; ++x) {
+ int pixel = rgba8_to_argb(data[y * width + x],
+ data[y * width + x],
+ data[y * width + x],
+ 255);
+ pixelData[y * width + x] = pixel;
+ }
+ }
+ } else {
+ Q_ASSERT(0);
}
m_image = QImage((uchar*)pixelData,
{
m_level = l;
}
+
+ApiFramebuffer::ApiFramebuffer()
+ : ApiSurface()
+{
+}
+
+QString ApiFramebuffer::type() const
+{
+ return m_type;
+}
+
+void ApiFramebuffer::setType(const QString &str)
+{
+ m_type = str;
+}