diff --git a/modules/asset_loader/include/vkcv/asset/asset_loader.hpp b/modules/asset_loader/include/vkcv/asset/asset_loader.hpp
index 8d255143c67451c2fbf7ce6a463cd1ea171fac1f..1ab280c03ffb0a675d72f97270c869e258af2ca7 100644
--- a/modules/asset_loader/include/vkcv/asset/asset_loader.hpp
+++ b/modules/asset_loader/include/vkcv/asset/asset_loader.hpp
@@ -95,6 +95,11 @@ typedef struct {
 	std::string name;
 	std::vector<VertexGroup> vertexGroups;
 	std::vector<Material> materials;
+	// FIXME Dirty hack to get one(!) texture for our cube demo
+	struct {
+		int w, h, ch;	// width, height and channels of image
+		void *img;	// raw data, free after use (deal with it)
+	} texture_hack;
 } Mesh;
 
 
diff --git a/modules/asset_loader/src/vkcv/asset/asset_loader.cpp b/modules/asset_loader/src/vkcv/asset/asset_loader.cpp
index 9262112bc693f4d27378b460843ff84cc5bde4b7..c0ce049646389994bdee68c84c5c6e686755a1e2 100644
--- a/modules/asset_loader/src/vkcv/asset/asset_loader.cpp
+++ b/modules/asset_loader/src/vkcv/asset/asset_loader.cpp
@@ -170,6 +170,23 @@ int loadMesh(const std::string &path, Mesh &mesh) {
 	
 	std::vector<Material> materials;
 
+	// FIXME HACK HACK HACK HACK HACK HACK HACK HACK HACK HACK HACK HACK
+	// fail quietly if there is no texture
+	if (object.textures.size()) {
+		const std::string mime_type("image/jpeg");
+		const fx::gltf::Texture &tex = object.textures[0];
+		const fx::gltf::Image &img = object.images[tex.source];
+		printf("texture name=%s sampler=%u source=%u\n",
+				tex.name.c_str(), tex.sampler, tex.source);
+		printf("image   name=%s uri=%s mime=%s\n",
+				img.name.c_str(), img.uri.c_str(),
+				img.mimeType.c_str());
+		// URI is in img.uri
+
+		// TODO decode using stbimage lib and store in mesh.texture
+	}
+	// FIXME HACK HACK HACK HACK HACK HACK HACK HACK HACK HACK HACK HACK
+
 	mesh = { object.meshes[0].name, vertexGroups, materials };
 	return 1;
 }