public void Export(string fileName) { try { // only DDS supported DDSIO.SaveTextureData(texture, fileName); } catch { } }
public static JObject Deamon_GetDrawableJSON(GtaDrawable drawable, string drawablePath) { Console.WriteLine("Requested drawable : " + drawable.Name.Value); var txds = Deamon_LoadExternalTextures(drawablePath); var data = new JObject() { ["shaderGroup"] = new JObject() { ["shaders"] = new JArray(), ["textures"] = new JArray() }, ["models"] = new JObject() { ["high"] = new JArray(), ["medium"] = new JArray(), ["low"] = new JArray(), ["verylow"] = new JArray(), ["x"] = new JArray(), } }; var jShaders = (JArray)data["shaderGroup"]["shaders"]; var jTextures = (JArray)data["shaderGroup"]["textures"]; for (int i = 0; i < drawable.ShaderGroup.Shaders.Count; i++) { var shader = drawable.ShaderGroup.Shaders[i]; var jShader = new JObject() { ["textures"] = new JObject() }; for (int j = 0; j < shader.ParametersList.Parameters.Count; j++) { var param = shader.ParametersList.Parameters[j]; if (param.Data is TextureDX11) { var tx = param.Data as TextureDX11; var txName = tx.Name.Value.ToLowerInvariant(); switch (param.Unknown_1h) { case 0: jShader["textures"]["diffuse"] = txName; break; case 2: jShader["textures"]["specular"] = txName; break; case 3: jShader["textures"]["bump"] = txName; break; } } else if (param.Data is Texture) { var txName = (param.Data as Texture).Name.Value.ToLowerInvariant(); for (int k = 0; k < txds.Length; k++) { var txd = txds[k]; for (int l = 0; l < txd.TextureDictionary.Textures.Entries.Count; l++) { var tx = txd.TextureDictionary.Textures.Entries[l]; var txName2 = tx.Name.Value.ToLowerInvariant(); if (txName == txName2) { switch (param.Unknown_1h) { case 0: jShader["textures"]["diffuse"] = txName; break; case 2: jShader["textures"]["specular"] = txName; break; case 3: jShader["textures"]["bump"] = txName; break; } break; } } } } } jShaders.Add(jShader); } for (int i = 0; i < txds.Length; i++) { var txd = txds[i]; for (int j = 0; j < txd.TextureDictionary.Textures.Entries.Count; j++) { var tx = txd.TextureDictionary.Textures.Entries[j]; var txWrapper = new TextureWrapper_GTA5_pc(tx); var txName = tx.Name.Value.ToLowerInvariant(); var path = Path.GetTempPath() + "\\gtautil_texture_" + txName + ".dds"; for (int m = 0; m < jShaders.Count; m++) { var jShader = (JObject)jShaders[m]; if ((string)jShader["textures"]["diffuse"] == txName || (string)jShader["textures"]["specular"] == txName || (string)jShader["textures"]["bump"] == txName) { Console.WriteLine("Reusing external texture " + txName); DDSIO.SaveTextureData(txWrapper, path); Utils.Hash(txName); var jTx = new JObject(); var txNameHash = Jenkins.Hash(txName); jTx["hash"] = txNameHash; jTx["name"] = txName; jTx["path"] = path; jTx["width"] = tx.Width; jTx["height"] = tx.Height; jTextures.Add(jTx); } } } } for (int i = 0; i < drawable.ShaderGroup.TextureDictionary.Textures.Entries.Count; i++) { var tx = drawable.ShaderGroup.TextureDictionary.Textures.Entries[i]; var txWrapper = new TextureWrapper_GTA5_pc(tx); var txName = tx.Name.Value.ToLowerInvariant(); var path = Path.GetTempPath() + "\\gtautil_texture_" + txName + ".dds"; DDSIO.SaveTextureData(txWrapper, path); Utils.Hash(txName); var jTx = new JObject(); var txNameHash = drawable.ShaderGroup.TextureDictionary.TextureNameHashes.Entries[i].Value; jTx["hash"] = txNameHash; jTx["name"] = txName; jTx["path"] = path; jTx["width"] = tx.Width; jTx["height"] = tx.Height; jTextures.Add(jTx); } for (int i = 0; i < drawable.DrawableModelsHigh.Entries.Count; i++) { var jModel = Deamon_GetModelData(drawable.DrawableModelsHigh?.Entries[i]); ((JArray)data["models"]["high"]).Add(jModel); } for (int i = 0; i < drawable.DrawableModelsMedium?.Entries.Count; i++) { var jModel = Deamon_GetModelData(drawable.DrawableModelsMedium.Entries[i]); ((JArray)data["models"]["medium"]).Add(jModel); } for (int i = 0; i < drawable.DrawableModelsLow?.Entries.Count; i++) { var jModel = Deamon_GetModelData(drawable.DrawableModelsLow.Entries[i]); ((JArray)data["models"]["low"]).Add(jModel); } for (int i = 0; i < drawable.DrawableModelsVeryLow?.Entries.Count; i++) { var jModel = Deamon_GetModelData(drawable.DrawableModelsVeryLow.Entries[i]); ((JArray)data["models"]["verylow"]).Add(jModel); } for (int i = 0; i < drawable.DrawableModelsX?.Entries.Count; i++) { var jModel = Deamon_GetModelData(drawable.DrawableModelsX.Entries[i]); ((JArray)data["models"]["x"]).Add(jModel); } return(data); }