From: José Fonseca Date: Sun, 10 Apr 2011 18:25:01 +0000 (+0100) Subject: Use normalized ubytes for now. X-Git-Url: https://git.cworth.org/git?a=commitdiff_plain;h=3b9fc082c5d17d4325f17dcbb0d49d0c91ffea6c;p=apitrace Use normalized ubytes for now. glretrace doesn't have the logic to choose the most appropriate data type, nor does qapitrace have the logic to cope with multiple data types or HDR data, so make it easier on everybody by choose the common denominator. --- diff --git a/glstate.py b/glstate.py index 7c17a35..6469671 100644 --- a/glstate.py +++ b/glstate.py @@ -3065,12 +3065,13 @@ writeTextureImage(JSONWriter &json, GLenum target, GLint level) // Hardcoded for now, but we could chose types more adequate to the // texture internal format - json.writeStringMember("__type__", "float"); + json.writeStringMember("__type__", "uint8"); + json.writeBoolMember("__normalized__", true); json.writeNumberMember("__channels__", 4); - float *pixels = new float[depth*width*height*4]; + GLubyte *pixels = new GLubyte[depth*width*height*4]; - glGetTexImage(target, level, GL_RGBA, GL_FLOAT, pixels); + glGetTexImage(target, level, GL_RGBA, GL_UNSIGNED_BYTE, pixels); json.writeStringMember("__encoding__", "base64"); json.beginMember("__data__"); @@ -3102,10 +3103,11 @@ writeDrawBufferImage(JSONWriter &json) // Hardcoded for now, but we could chose types more adequate to the // texture internal format - json.writeStringMember("__type__", "float"); + json.writeStringMember("__type__", "uint8"); + json.writeBoolMember("__normalized__", true); json.writeNumberMember("__channels__", 4); - float *pixels = new float[width*height*4]; + GLubyte *pixels = new GLubyte[width*height*4]; GLint drawbuffer = glretrace::double_buffer ? GL_BACK : GL_FRONT; GLint readbuffer = glretrace::double_buffer ? GL_BACK : GL_FRONT; diff --git a/gui/apisurface.cpp b/gui/apisurface.cpp index 105532e..32ebff2 100644 --- a/gui/apisurface.cpp +++ b/gui/apisurface.cpp @@ -17,6 +17,12 @@ void ApiSurface::setSize(const QSize &size) m_size = size; } +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) { @@ -31,7 +37,7 @@ 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(); @@ -45,10 +51,10 @@ void ApiSurface::contentsFromBase64(const QByteArray &base64) 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]); + 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; } } diff --git a/gui/apitracecall.cpp b/gui/apitracecall.cpp index 351b2a9..7fabc9c 100644 --- a/gui/apitracecall.cpp +++ b/gui/apitracecall.cpp @@ -457,11 +457,14 @@ ApiTraceState::ApiTraceState(const QVariantMap &parsedJson) image[QLatin1String("__height__")].toInt()); QString cls = image[QLatin1String("__class__")].toString(); QString type = image[QLatin1String("__type__")].toString(); + bool normalized = + image[QLatin1String("__normalized__")].toBool(); int numChannels = image[QLatin1String("__channels__")].toInt(); Q_ASSERT(numChannels == 4); - Q_ASSERT(type == QLatin1String("float")); + Q_ASSERT(type == QLatin1String("uint8")); + Q_ASSERT(normalized == true); QByteArray dataArray = image[QLatin1String("__data__")].toByteArray();