`texture` support.
diff --git a/test.cc b/test.cc
index 8b3bfd1..7d6056d 100644
--- a/test.cc
+++ b/test.cc
@@ -6,8 +6,7 @@
 #include <cstdio>
 #include <iostream>
 
-std::string PrintMode(int mode)
-{
+std::string PrintMode(int mode) {
   if (mode == TINYGLTF_MODE_POINTS) {
     return "POINTS";
   } else if (mode == TINYGLTF_MODE_LINE) {
@@ -24,9 +23,7 @@
   return "**UNKNOWN**";
 }
 
-
-std::string PrintType(int ty)
-{
+std::string PrintType(int ty) {
   if (ty == TINYGLTF_TYPE_SCALAR) {
     return "SCALAR";
   } else if (ty == TINYGLTF_TYPE_VECTOR) {
@@ -49,8 +46,7 @@
   return "**UNKNOWN**";
 }
 
-std::string PrintComponentType(int ty)
-{
+std::string PrintComponentType(int ty) {
   if (ty == TINYGLTF_COMPONENT_TYPE_BYTE) {
     return "BYTE";
   } else if (ty == TINYGLTF_COMPONENT_TYPE_UNSIGNED_BYTE) {
@@ -72,8 +68,7 @@
   return "**UNKNOWN**";
 }
 
-std::string PrintFloatArray(const std::vector<double>& arr)
-{
+std::string PrintFloatArray(const std::vector<double> &arr) {
   if (arr.size() == 0) {
     return "";
   }
@@ -88,8 +83,7 @@
   return ss.str();
 }
 
-std::string PrintStringArray(const std::vector<std::string>& arr)
-{
+std::string PrintStringArray(const std::vector<std::string> &arr) {
   if (arr.size() == 0) {
     return "";
   }
@@ -104,9 +98,7 @@
   return ss.str();
 }
 
-
-std::string Indent(int indent)
-{
+std::string Indent(int indent) {
   std::string s;
   for (int i = 0; i < indent; i++) {
     s += "  ";
@@ -115,64 +107,82 @@
   return s;
 }
 
-void DumpNode(const Node& node, int indent)
-{
-  std::cout << Indent(indent) <<   "name        : " << node.name << std::endl;
-  std::cout << Indent(indent) <<   "camera      : " << node.camera << std::endl;
+void DumpNode(const Node &node, int indent) {
+  std::cout << Indent(indent) << "name        : " << node.name << std::endl;
+  std::cout << Indent(indent) << "camera      : " << node.camera << std::endl;
   if (!node.rotation.empty()) {
-    std::cout << Indent(indent) << "rotation    : " << PrintFloatArray(node.rotation) << std::endl;
+    std::cout << Indent(indent)
+              << "rotation    : " << PrintFloatArray(node.rotation)
+              << std::endl;
   }
   if (!node.scale.empty()) {
-    std::cout << Indent(indent) << "scale       : " << PrintFloatArray(node.scale) << std::endl;
+    std::cout << Indent(indent)
+              << "scale       : " << PrintFloatArray(node.scale) << std::endl;
   }
   if (!node.translation.empty()) {
-    std::cout << Indent(indent) << "translation : " << PrintFloatArray(node.translation) << std::endl;
+    std::cout << Indent(indent)
+              << "translation : " << PrintFloatArray(node.translation)
+              << std::endl;
   }
 
   if (!node.matrix.empty()) {
-    std::cout << Indent(indent) << "matrix      : " << PrintFloatArray(node.matrix) << std::endl;
+    std::cout << Indent(indent)
+              << "matrix      : " << PrintFloatArray(node.matrix) << std::endl;
   }
 
-  std::cout << Indent(indent) <<   "meshes      : " << PrintStringArray(node.meshes) << std::endl;
+  std::cout << Indent(indent)
+            << "meshes      : " << PrintStringArray(node.meshes) << std::endl;
 
-  std::cout << Indent(indent) <<   "children    : " << PrintStringArray(node.children) << std::endl;
-
+  std::cout << Indent(indent)
+            << "children    : " << PrintStringArray(node.children) << std::endl;
 }
 
-void DumpPrimitive(const Primitive& primitive, int indent)
-{
-  std::cout << Indent(indent) << "material : " << primitive.material << std::endl;
-  std::cout << Indent(indent) << "mode     : " << PrintMode(primitive.mode) << "(" << primitive.mode << ")" << std::endl;
-  std::cout << Indent(indent) << "attributes(items=" << primitive.attributes.size() << ")" << std::endl;
-  std::map<std::string, std::string>::const_iterator it(primitive.attributes.begin());
-  std::map<std::string, std::string>::const_iterator itEnd(primitive.attributes.end());
+void DumpPrimitive(const Primitive &primitive, int indent) {
+  std::cout << Indent(indent) << "material : " << primitive.material
+            << std::endl;
+  std::cout << Indent(indent) << "mode     : " << PrintMode(primitive.mode)
+            << "(" << primitive.mode << ")" << std::endl;
+  std::cout << Indent(indent)
+            << "attributes(items=" << primitive.attributes.size() << ")"
+            << std::endl;
+  std::map<std::string, std::string>::const_iterator it(
+      primitive.attributes.begin());
+  std::map<std::string, std::string>::const_iterator itEnd(
+      primitive.attributes.end());
   for (; it != itEnd; it++) {
-    std::cout << Indent(indent + 1) << it->first << ": " << it->second << std::endl;
+    std::cout << Indent(indent + 1) << it->first << ": " << it->second
+              << std::endl;
   }
-
 }
 
-void Dump(const Scene& scene)
-{
+void Dump(const Scene &scene) {
   std::cout << "=== Dump glTF ===" << std::endl;
-  std::cout << "asset.generator          : " << scene.asset.generator << std::endl;
-  std::cout << "asset.premultipliedAlpha : " << scene.asset.premultipliedAlpha << std::endl;
-  std::cout << "asset.version            : " << scene.asset.version << std::endl;
-  std::cout << "asset.profile.api        : " << scene.asset.profile_api << std::endl;
-  std::cout << "asset.profile.version    : " << scene.asset.profile_version << std::endl;
+  std::cout << "asset.generator          : " << scene.asset.generator
+            << std::endl;
+  std::cout << "asset.premultipliedAlpha : " << scene.asset.premultipliedAlpha
+            << std::endl;
+  std::cout << "asset.version            : " << scene.asset.version
+            << std::endl;
+  std::cout << "asset.profile.api        : " << scene.asset.profile_api
+            << std::endl;
+  std::cout << "asset.profile.version    : " << scene.asset.profile_version
+            << std::endl;
   std::cout << std::endl;
   std::cout << "=== Dump scene ===" << std::endl;
   std::cout << "defaultScene: " << scene.defaultScene << std::endl;
 
   {
-    std::map<std::string, std::vector<std::string> >::const_iterator it(scene.scenes.begin());
-    std::map<std::string, std::vector<std::string> >::const_iterator itEnd(scene.scenes.end());
+    std::map<std::string, std::vector<std::string> >::const_iterator it(
+        scene.scenes.begin());
+    std::map<std::string, std::vector<std::string> >::const_iterator itEnd(
+        scene.scenes.end());
     std::cout << "scenes(items=" << scene.scenes.size() << ")" << std::endl;
     for (; it != itEnd; it++) {
       std::cout << Indent(1) << "name  : " << it->first << std::endl;
       std::cout << Indent(2) << "nodes : [ ";
       for (size_t i = 0; i < it->second.size(); i++) {
-        std::cout << it->second[i] << ((i != it->second.size()) ? ", " : "");
+        std::cout << it->second[i]
+                  << ((i != (it->second.size() - 1)) ? ", " : "");
       }
       std::cout << " ] " << std::endl;
     }
@@ -184,8 +194,10 @@
     std::cout << "meshes(item=" << scene.meshes.size() << ")" << std::endl;
     for (; it != itEnd; it++) {
       std::cout << Indent(1) << "name     : " << it->second.name << std::endl;
-      std::cout << Indent(1) << "primitives(items=" << it->second.primitives.size() << "): " << std::endl;
-    
+      std::cout << Indent(1)
+                << "primitives(items=" << it->second.primitives.size()
+                << "): " << std::endl;
+
       for (size_t i = 0; i < it->second.primitives.size(); i++) {
         DumpPrimitive(it->second.primitives[i], 2);
       }
@@ -194,27 +206,38 @@
 
   {
     std::map<std::string, Accessor>::const_iterator it(scene.accessors.begin());
-    std::map<std::string, Accessor>::const_iterator itEnd(scene.accessors.end());
-    std::cout << "accessos(items=" << scene.accessors.size() << ")" << std::endl;
+    std::map<std::string, Accessor>::const_iterator itEnd(
+        scene.accessors.end());
+    std::cout << "accessos(items=" << scene.accessors.size() << ")"
+              << std::endl;
     for (; it != itEnd; it++) {
       std::cout << Indent(1) << "name         : " << it->first << std::endl;
-      std::cout << Indent(2) << "bufferView   : " << it->second.bufferView << std::endl;
-      std::cout << Indent(2) << "byteOffset   : " << it->second.byteOffset << std::endl;
-      std::cout << Indent(2) << "byteStride   : " << it->second.byteStride << std::endl;
-      std::cout << Indent(2) << "componentType: " << PrintComponentType(it->second.componentType) << "(" << it->second.componentType << ")" << std::endl;
-      std::cout << Indent(2) << "count        : " << it->second.count << std::endl;
-      std::cout << Indent(2) << "type         : " << PrintType(it->second.type) << std::endl;
+      std::cout << Indent(2) << "bufferView   : " << it->second.bufferView
+                << std::endl;
+      std::cout << Indent(2) << "byteOffset   : " << it->second.byteOffset
+                << std::endl;
+      std::cout << Indent(2) << "byteStride   : " << it->second.byteStride
+                << std::endl;
+      std::cout << Indent(2) << "componentType: "
+                << PrintComponentType(it->second.componentType) << "("
+                << it->second.componentType << ")" << std::endl;
+      std::cout << Indent(2) << "count        : " << it->second.count
+                << std::endl;
+      std::cout << Indent(2) << "type         : " << PrintType(it->second.type)
+                << std::endl;
       if (!it->second.minValues.empty()) {
         std::cout << Indent(2) << "min          : [";
         for (size_t i = 0; i < it->second.minValues.size(); i++) {
-          std::cout << it->second.minValues[i] << ((i != it->second.minValues.size()-1) ? ", " : "");
+          std::cout << it->second.minValues[i]
+                    << ((i != it->second.minValues.size() - 1) ? ", " : "");
         }
         std::cout << "]" << std::endl;
       }
       if (!it->second.maxValues.empty()) {
         std::cout << Indent(2) << "max          : [";
         for (size_t i = 0; i < it->second.maxValues.size(); i++) {
-          std::cout << it->second.maxValues[i] << ((i != it->second.maxValues.size()-1) ? ", " : "");
+          std::cout << it->second.maxValues[i]
+                    << ((i != it->second.maxValues.size() - 1) ? ", " : "");
         }
         std::cout << "]" << std::endl;
       }
@@ -222,14 +245,20 @@
   }
 
   {
-    std::map<std::string, BufferView>::const_iterator it(scene.bufferViews.begin());
-    std::map<std::string, BufferView>::const_iterator itEnd(scene.bufferViews.end());
-    std::cout << "bufferViews(items=" << scene.bufferViews.size() << ")" << std::endl;
+    std::map<std::string, BufferView>::const_iterator it(
+        scene.bufferViews.begin());
+    std::map<std::string, BufferView>::const_iterator itEnd(
+        scene.bufferViews.end());
+    std::cout << "bufferViews(items=" << scene.bufferViews.size() << ")"
+              << std::endl;
     for (; it != itEnd; it++) {
       std::cout << Indent(1) << "name         : " << it->first << std::endl;
-      std::cout << Indent(2) << "buffer       : " << it->second.buffer << std::endl;
-      std::cout << Indent(2) << "byteLength   : " << it->second.byteLength << std::endl;
-      std::cout << Indent(2) << "byteOffset   : " << it->second.byteOffset << std::endl;
+      std::cout << Indent(2) << "buffer       : " << it->second.buffer
+                << std::endl;
+      std::cout << Indent(2) << "byteLength   : " << it->second.byteLength
+                << std::endl;
+      std::cout << Indent(2) << "byteOffset   : " << it->second.byteOffset
+                << std::endl;
     }
   }
 
@@ -239,23 +268,35 @@
     std::cout << "buffers(items=" << scene.buffers.size() << ")" << std::endl;
     for (; it != itEnd; it++) {
       std::cout << Indent(1) << "name         : " << it->first << std::endl;
-      std::cout << Indent(2) << "byteLength   : " << it->second.data.size() << std::endl;
+      std::cout << Indent(2) << "byteLength   : " << it->second.data.size()
+                << std::endl;
     }
   }
 
   {
     std::map<std::string, Material>::const_iterator it(scene.materials.begin());
-    std::map<std::string, Material>::const_iterator itEnd(scene.materials.end());
-    std::cout << "materials(items=" << scene.materials.size() << ")" << std::endl;
+    std::map<std::string, Material>::const_iterator itEnd(
+        scene.materials.end());
+    std::cout << "materials(items=" << scene.materials.size() << ")"
+              << std::endl;
     for (; it != itEnd; it++) {
       std::cout << Indent(1) << "name         : " << it->first << std::endl;
-      std::cout << Indent(1) << "technique    : " << it->second.technique << std::endl;
-      std::cout << Indent(1) << "values(items=" << it->second.values.size() << std::endl;
+      std::cout << Indent(1) << "technique    : " << it->second.technique
+                << std::endl;
+      std::cout << Indent(1) << "values(items=" << it->second.values.size()
+                << std::endl;
 
-      FloatParameterMap::const_iterator p(it->second.values.begin());
-      FloatParameterMap::const_iterator pEnd(it->second.values.end());
+      ParameterMap::const_iterator p(it->second.values.begin());
+      ParameterMap::const_iterator pEnd(it->second.values.end());
       for (; p != pEnd; p++) {
-        std::cout << Indent(3) << p->first << PrintFloatArray(p->second) << std::endl;
+        if (!p->second.numberArray.empty()) {
+          std::cout << Indent(3) << p->first
+                    << PrintFloatArray(p->second.numberArray) << std::endl;
+        }
+        if (!p->second.stringValue.empty()) {
+          std::cout << Indent(3) << p->first << " : " << p->second.stringValue
+                    << std::endl;
+        }
       }
     }
   }
@@ -270,7 +311,7 @@
       DumpNode(it->second, 2);
     }
   }
-  
+
   {
     std::map<std::string, Image>::const_iterator it(scene.images.begin());
     std::map<std::string, Image>::const_iterator itEnd(scene.images.end());
@@ -279,24 +320,46 @@
       std::cout << Indent(1) << "name         : " << it->first << std::endl;
 
       std::cout << Indent(2) << "width     : " << it->second.width << std::endl;
-      std::cout << Indent(2) << "height    : " << it->second.height << std::endl;
-      std::cout << Indent(2) << "component : " << it->second.component << std::endl;
+      std::cout << Indent(2) << "height    : " << it->second.height
+                << std::endl;
+      std::cout << Indent(2) << "component : " << it->second.component
+                << std::endl;
       std::cout << Indent(2) << "name      : " << it->second.name << std::endl;
     }
   }
+
+  {
+    std::map<std::string, Texture>::const_iterator it(scene.textures.begin());
+    std::map<std::string, Texture>::const_iterator itEnd(scene.textures.end());
+    std::cout << "textures(items=" << scene.textures.size() << ")" << std::endl;
+    for (; it != itEnd; it++) {
+      std::cout << Indent(1) << "name           : " << it->first << std::endl;
+      std::cout << Indent(1) << "format         : " << it->second.format
+                << std::endl;
+      std::cout << Indent(1) << "internalFormat : " << it->second.internalFormat
+                << std::endl;
+      std::cout << Indent(1) << "sampler        : " << it->second.sampler
+                << std::endl;
+      std::cout << Indent(1) << "source         : " << it->second.source
+                << std::endl;
+      std::cout << Indent(1) << "target         : " << it->second.target
+                << std::endl;
+      std::cout << Indent(1) << "type           : " << it->second.type
+                << std::endl;
+    }
+  }
 }
 
-int main(int argc, char** argv)
-{
+int main(int argc, char **argv) {
   if (argc < 2) {
     printf("Needs input.gltf\n");
     exit(1);
   }
 
-  Scene scene; 
+  Scene scene;
   TinyGLTFLoader loader;
   std::string err;
-  
+
   bool ret = loader.LoadFromFile(scene, err, argv[1]);
 
   if (!err.empty()) {