}
if (width <= 0 || height <= 0 || depth <= 0) {
- json.writeNull();
+ return;
} else {
+ char label[512];
+
+ GLint active_texture = GL_TEXTURE0;
+ glGetIntegerv(GL_ACTIVE_TEXTURE, &active_texture);
+ snprintf(label, sizeof label, "%s, %s, level = %i", _enum_string(active_texture), _enum_string(target), level);
+
+ json.beginMember(label);
+
json.beginObject();
// Tell the GUI this is no ordinary object, but an image
print 'static inline void'
print 'writeTexture(JSONWriter &json, GLenum target, GLenum binding)'
print '{'
- print ' GLint texture = 0;'
- print ' glGetIntegerv(binding, &texture);'
- print ' if (!glIsEnabled(target) && !texture) {'
- print ' json.writeNull();'
+ print ' GLint texture_binding = 0;'
+ print ' glGetIntegerv(binding, &texture_binding);'
+ print ' if (!glIsEnabled(target) && !texture_binding) {'
print ' return;'
print ' }'
print
- print ' json.beginObject();'
- print ' json.beginMember("levels");'
- print ' json.beginArray();'
print ' GLint level = 0;'
print ' do {'
print ' GLint width = 0, height = 0;'
print ' if (!width || !height) {'
print ' break;'
print ' }'
- print ' json.beginObject();'
- print
- # FIXME: This is not the original texture name in the trace -- we need
- # to do a reverse lookup of the texture mappings to find the original one
- print ' json.beginMember("binding");'
- print ' json.writeNumber(texture);'
- print ' json.endMember();'
print
- print ' json.beginMember("image");'
print ' writeTextureImage(json, target, level);'
- print ' json.endMember();'
print
- print ' json.endObject();'
print ' ++level;'
print ' } while(true);'
- print ' json.endArray();'
- print ' json.endMember(); // levels'
- print
- print ' json.endObject();'
print '}'
print
def dump_textures(self):
print ' {'
print ' json.beginMember("textures");'
- print ' json.beginArray();'
+ print ' json.beginObject();'
print ' GLint active_texture = GL_TEXTURE0;'
print ' glGetIntegerv(GL_ACTIVE_TEXTURE, &active_texture);'
print ' GLint max_texture_coords = 0;'
print ' glGetIntegerv(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS, &max_combined_texture_image_units);'
print ' GLint max_units = std::max(max_combined_texture_image_units, max_texture_coords);'
print ' for (GLint unit = 0; unit < max_units; ++unit) {'
- print ' glActiveTexture(GL_TEXTURE0 + unit);'
- print ' json.beginObject();'
+ print ' GLenum texture = GL_TEXTURE0 + unit;'
+ print ' glActiveTexture(texture);'
for target, binding in texture_targets:
- print ' json.beginMember("%s");' % target
print ' writeTexture(json, %s, %s);' % (target, binding)
- print ' json.endMember();'
- print ' json.endObject();'
print ' }'
print ' glActiveTexture(active_texture);'
- print ' json.endArray();'
- print ' json.endMember(); // texture'
+ print ' json.endObject();'
+ print ' json.endMember(); // textures'
print ' }'
print
m_shaderSources[type] = source;
}
- QVariantList textureUnits =
- parsedJson[QLatin1String("textures")].toList();
- for (int i = 0; i < textureUnits.count(); ++i) {
- QVariantMap unit = textureUnits[i].toMap();
- for (itr = unit.constBegin(); itr != unit.constEnd(); ++itr) {
- QVariantMap target = itr.value().toMap();
- if (target.count()) {
- QVariantList levels = target[QLatin1String("levels")].toList();
- for (int j = 0; j < levels.count(); ++j) {
- QVariantMap level = levels[j].toMap();
- QVariantMap image = level[QLatin1String("image")].toMap();
- QSize size(image[QLatin1String("__width__")].toInt(),
- 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(type == QLatin1String("uint8"));
- Q_ASSERT(normalized == true);
-
- QByteArray dataArray =
- image[QLatin1String("__data__")].toByteArray();
-
- ApiTexture tex;
- tex.setSize(size);
- tex.setNumChannels(numChannels);
- tex.setLevel(j);
- tex.setUnit(i);
- tex.setTarget(itr.key());
- tex.contentsFromBase64(dataArray);
-
- m_textures.append(tex);
- }
- }
- }
+ QVariantMap textures =
+ parsedJson[QLatin1String("textures")].toMap();
+ for (itr = textures.constBegin(); itr != textures.constEnd(); ++itr) {
+ QVariantMap image = itr.value().toMap();
+ QSize size(image[QLatin1String("__width__")].toInt(),
+ 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(type == QLatin1String("uint8"));
+ Q_ASSERT(normalized == true);
+
+ QByteArray dataArray =
+ image[QLatin1String("__data__")].toByteArray();
+
+ ApiTexture tex;
+ tex.setSize(size);
+ tex.setNumChannels(numChannels);
+ tex.setLabel(itr.key());
+ tex.contentsFromBase64(dataArray);
+
+ m_textures.append(tex);
}
QVariantMap fbos =