Browse Source

Remove some ETC compression from textures

Panagiotis Christopoulos Charitos 8 years ago
parent
commit
45377710d7
70 changed files with 30 additions and 26 deletions
  1. BIN
      samples/sponza/assets/Background_Albedo.ankitex
  2. BIN
      samples/sponza/assets/Background_Normal.ankitex
  3. BIN
      samples/sponza/assets/Background_Roughness.ankitex
  4. BIN
      samples/sponza/assets/ChainTexture_Albedo.ankitex
  5. BIN
      samples/sponza/assets/ChainTexture_Metallic.ankitex
  6. BIN
      samples/sponza/assets/ChainTexture_Normal.ankitex
  7. BIN
      samples/sponza/assets/ChainTexture_Roughness.ankitex
  8. BIN
      samples/sponza/assets/Lion_Albedo.ankitex
  9. BIN
      samples/sponza/assets/Lion_Normal.ankitex
  10. BIN
      samples/sponza/assets/Lion_Roughness.ankitex
  11. BIN
      samples/sponza/assets/Sponza_Arch_diffuse.ankitex
  12. BIN
      samples/sponza/assets/Sponza_Arch_normal.ankitex
  13. BIN
      samples/sponza/assets/Sponza_Arch_roughness.ankitex
  14. BIN
      samples/sponza/assets/Sponza_Bricks_a_Albedo.ankitex
  15. BIN
      samples/sponza/assets/Sponza_Bricks_a_Normal.ankitex
  16. BIN
      samples/sponza/assets/Sponza_Bricks_a_Roughness.ankitex
  17. BIN
      samples/sponza/assets/Sponza_Ceiling_diffuse.ankitex
  18. BIN
      samples/sponza/assets/Sponza_Ceiling_normal.ankitex
  19. BIN
      samples/sponza/assets/Sponza_Ceiling_roughness.ankitex
  20. BIN
      samples/sponza/assets/Sponza_Column_a_diffuse.ankitex
  21. BIN
      samples/sponza/assets/Sponza_Column_a_normal.ankitex
  22. BIN
      samples/sponza/assets/Sponza_Column_a_roughness.ankitex
  23. BIN
      samples/sponza/assets/Sponza_Column_b_diffuse.ankitex
  24. BIN
      samples/sponza/assets/Sponza_Column_b_normal.ankitex
  25. BIN
      samples/sponza/assets/Sponza_Column_b_roughness.ankitex
  26. BIN
      samples/sponza/assets/Sponza_Column_c_diffuse.ankitex
  27. BIN
      samples/sponza/assets/Sponza_Column_c_normal.ankitex
  28. BIN
      samples/sponza/assets/Sponza_Column_c_roughness.ankitex
  29. BIN
      samples/sponza/assets/Sponza_Curtain_Blue_diffuse.ankitex
  30. BIN
      samples/sponza/assets/Sponza_Curtain_Green_diffuse.ankitex
  31. BIN
      samples/sponza/assets/Sponza_Curtain_Red_diffuse.ankitex
  32. BIN
      samples/sponza/assets/Sponza_Curtain_Red_normal.ankitex
  33. BIN
      samples/sponza/assets/Sponza_Curtain_metallic.ankitex
  34. BIN
      samples/sponza/assets/Sponza_Curtain_roughness.ankitex
  35. BIN
      samples/sponza/assets/Sponza_Details_diffuse.ankitex
  36. BIN
      samples/sponza/assets/Sponza_Details_metallic.ankitex
  37. BIN
      samples/sponza/assets/Sponza_Details_normal.ankitex
  38. BIN
      samples/sponza/assets/Sponza_Details_roughness.ankitex
  39. BIN
      samples/sponza/assets/Sponza_Fabric_Blue_diffuse.ankitex
  40. BIN
      samples/sponza/assets/Sponza_Fabric_Green_diffuse.ankitex
  41. BIN
      samples/sponza/assets/Sponza_Fabric_Red_diffuse.ankitex
  42. BIN
      samples/sponza/assets/Sponza_Fabric_Red_normal.ankitex
  43. BIN
      samples/sponza/assets/Sponza_Fabric_metallic.ankitex
  44. BIN
      samples/sponza/assets/Sponza_Fabric_roughness.ankitex
  45. BIN
      samples/sponza/assets/Sponza_FlagPole_diffuse.ankitex
  46. BIN
      samples/sponza/assets/Sponza_FlagPole_normal.ankitex
  47. BIN
      samples/sponza/assets/Sponza_FlagPole_roughness.ankitex
  48. BIN
      samples/sponza/assets/Sponza_Floor_diffuse.ankitex
  49. BIN
      samples/sponza/assets/Sponza_Floor_normal.ankitex
  50. BIN
      samples/sponza/assets/Sponza_Floor_roughness.ankitex
  51. BIN
      samples/sponza/assets/Sponza_Roof_diffuse.ankitex
  52. BIN
      samples/sponza/assets/Sponza_Roof_normal.ankitex
  53. BIN
      samples/sponza/assets/Sponza_Roof_roughness.ankitex
  54. BIN
      samples/sponza/assets/Sponza_Thorn_diffuse.ankitex
  55. BIN
      samples/sponza/assets/Sponza_Thorn_normal.ankitex
  56. BIN
      samples/sponza/assets/Sponza_Thorn_roughness.ankitex
  57. BIN
      samples/sponza/assets/VaseHanging_diffuse.ankitex
  58. BIN
      samples/sponza/assets/VaseHanging_normal.ankitex
  59. BIN
      samples/sponza/assets/VaseHanging_roughness.ankitex
  60. BIN
      samples/sponza/assets/VasePlant_diffuse.ankitex
  61. BIN
      samples/sponza/assets/VasePlant_normal.ankitex
  62. BIN
      samples/sponza/assets/VasePlant_roughness.ankitex
  63. BIN
      samples/sponza/assets/VaseRound_diffuse.ankitex
  64. BIN
      samples/sponza/assets/VaseRound_normal.ankitex
  65. BIN
      samples/sponza/assets/VaseRound_roughness.ankitex
  66. BIN
      samples/sponza/assets/Vase_diffuse.ankitex
  67. BIN
      samples/sponza/assets/Vase_normal.ankitex
  68. BIN
      samples/sponza/assets/Vase_roughness.ankitex
  69. 8 6
      src/anki/resource/Material.cpp
  70. 22 20
      tools/texture/convert_image.py

BIN
samples/sponza/assets/Background_Albedo.ankitex


BIN
samples/sponza/assets/Background_Normal.ankitex


BIN
samples/sponza/assets/Background_Roughness.ankitex


BIN
samples/sponza/assets/ChainTexture_Albedo.ankitex


BIN
samples/sponza/assets/ChainTexture_Metallic.ankitex


BIN
samples/sponza/assets/ChainTexture_Normal.ankitex


BIN
samples/sponza/assets/ChainTexture_Roughness.ankitex


BIN
samples/sponza/assets/Lion_Albedo.ankitex


BIN
samples/sponza/assets/Lion_Normal.ankitex


BIN
samples/sponza/assets/Lion_Roughness.ankitex


BIN
samples/sponza/assets/Sponza_Arch_diffuse.ankitex


BIN
samples/sponza/assets/Sponza_Arch_normal.ankitex


BIN
samples/sponza/assets/Sponza_Arch_roughness.ankitex


BIN
samples/sponza/assets/Sponza_Bricks_a_Albedo.ankitex


BIN
samples/sponza/assets/Sponza_Bricks_a_Normal.ankitex


BIN
samples/sponza/assets/Sponza_Bricks_a_Roughness.ankitex


BIN
samples/sponza/assets/Sponza_Ceiling_diffuse.ankitex


BIN
samples/sponza/assets/Sponza_Ceiling_normal.ankitex


BIN
samples/sponza/assets/Sponza_Ceiling_roughness.ankitex


BIN
samples/sponza/assets/Sponza_Column_a_diffuse.ankitex


BIN
samples/sponza/assets/Sponza_Column_a_normal.ankitex


BIN
samples/sponza/assets/Sponza_Column_a_roughness.ankitex


BIN
samples/sponza/assets/Sponza_Column_b_diffuse.ankitex


BIN
samples/sponza/assets/Sponza_Column_b_normal.ankitex


BIN
samples/sponza/assets/Sponza_Column_b_roughness.ankitex


BIN
samples/sponza/assets/Sponza_Column_c_diffuse.ankitex


BIN
samples/sponza/assets/Sponza_Column_c_normal.ankitex


BIN
samples/sponza/assets/Sponza_Column_c_roughness.ankitex


BIN
samples/sponza/assets/Sponza_Curtain_Blue_diffuse.ankitex


BIN
samples/sponza/assets/Sponza_Curtain_Green_diffuse.ankitex


BIN
samples/sponza/assets/Sponza_Curtain_Red_diffuse.ankitex


BIN
samples/sponza/assets/Sponza_Curtain_Red_normal.ankitex


BIN
samples/sponza/assets/Sponza_Curtain_metallic.ankitex


BIN
samples/sponza/assets/Sponza_Curtain_roughness.ankitex


BIN
samples/sponza/assets/Sponza_Details_diffuse.ankitex


BIN
samples/sponza/assets/Sponza_Details_metallic.ankitex


BIN
samples/sponza/assets/Sponza_Details_normal.ankitex


BIN
samples/sponza/assets/Sponza_Details_roughness.ankitex


BIN
samples/sponza/assets/Sponza_Fabric_Blue_diffuse.ankitex


BIN
samples/sponza/assets/Sponza_Fabric_Green_diffuse.ankitex


BIN
samples/sponza/assets/Sponza_Fabric_Red_diffuse.ankitex


BIN
samples/sponza/assets/Sponza_Fabric_Red_normal.ankitex


BIN
samples/sponza/assets/Sponza_Fabric_metallic.ankitex


BIN
samples/sponza/assets/Sponza_Fabric_roughness.ankitex


BIN
samples/sponza/assets/Sponza_FlagPole_diffuse.ankitex


BIN
samples/sponza/assets/Sponza_FlagPole_normal.ankitex


BIN
samples/sponza/assets/Sponza_FlagPole_roughness.ankitex


BIN
samples/sponza/assets/Sponza_Floor_diffuse.ankitex


BIN
samples/sponza/assets/Sponza_Floor_normal.ankitex


BIN
samples/sponza/assets/Sponza_Floor_roughness.ankitex


BIN
samples/sponza/assets/Sponza_Roof_diffuse.ankitex


BIN
samples/sponza/assets/Sponza_Roof_normal.ankitex


BIN
samples/sponza/assets/Sponza_Roof_roughness.ankitex


BIN
samples/sponza/assets/Sponza_Thorn_diffuse.ankitex


BIN
samples/sponza/assets/Sponza_Thorn_normal.ankitex


BIN
samples/sponza/assets/Sponza_Thorn_roughness.ankitex


BIN
samples/sponza/assets/VaseHanging_diffuse.ankitex


BIN
samples/sponza/assets/VaseHanging_normal.ankitex


BIN
samples/sponza/assets/VaseHanging_roughness.ankitex


BIN
samples/sponza/assets/VasePlant_diffuse.ankitex


BIN
samples/sponza/assets/VasePlant_normal.ankitex


BIN
samples/sponza/assets/VasePlant_roughness.ankitex


BIN
samples/sponza/assets/VaseRound_diffuse.ankitex


BIN
samples/sponza/assets/VaseRound_normal.ankitex


BIN
samples/sponza/assets/VaseRound_roughness.ankitex


BIN
samples/sponza/assets/Vase_diffuse.ankitex


BIN
samples/sponza/assets/Vase_normal.ankitex


BIN
samples/sponza/assets/Vase_roughness.ankitex


+ 8 - 6
src/anki/resource/Material.cpp

@@ -209,8 +209,11 @@ Material::~Material()
 
 	for(MaterialVariable* var : m_vars)
 	{
-		var->destroy(alloc);
-		alloc.deleteInstance(var);
+		if(var)
+		{
+			var->destroy(alloc);
+			alloc.deleteInstance(var);
+		}
 	}
 	m_vars.destroy(alloc);
 }
@@ -247,17 +250,18 @@ Error Material::createVars(const MaterialLoader& loader)
 
 	auto alloc = getAllocator();
 	m_vars.create(alloc, count);
+	memset(&m_vars[0], 0, count * sizeof(m_vars[0]));
 
 	// Find the name
 	count = 0;
 	err = loader.iterateAllInputVariables([&](const MaterialLoader::Input& in) -> Error {
-		MaterialVariable* mtlvar = nullptr;
 
 #define ANKI_INIT_VAR(type_)                                                                                           \
 	{                                                                                                                  \
 		MaterialVariableTemplate<type_>* var = alloc.newInstance<MaterialVariableTemplate<type_>>();                   \
+		m_vars[count] = var;                                                                                           \
 		ANKI_CHECK(var->init(count, in, *this));                                                                       \
-		mtlvar = var;                                                                                                  \
+		++count;                                                                                                       \
 	}
 
 		switch(in.m_type)
@@ -291,8 +295,6 @@ Error Material::createVars(const MaterialLoader& loader)
 
 #undef ANKI_INIT_VAR
 
-		m_vars[count] = mtlvar;
-		++count;
 		return ErrorCode::NONE;
 	});
 

+ 22 - 20
tools/texture/convert_image.py

@@ -25,7 +25,7 @@ class Config:
 	normal = False
 	convert_path = ""
 	no_alpha = False
-	store_compressed = False
+	compressed_formats = 0
 	store_uncompressed = True
 	to_linear_rgb = False
 
@@ -50,8 +50,8 @@ CF_RGBA8 = 2
 # Data compression
 DC_NONE = 0
 DC_RAW = 1 << 0
-DC_ETC2 = 1 << 1
-DC_S3TC = 1 << 2
+DC_S3TC = 1 << 1
+DC_ETC2 = 1 << 2
 
 # Texture filtering
 TF_DEFAULT = 0
@@ -184,8 +184,8 @@ def parse_commandline():
 	""" Parse the command line arguments """
 
 	parser = argparse.ArgumentParser(description = "This program converts a single image or a number " \
-			"of images (for 3D and 2DArray textures) to AnKi texture format." \
-			" It requires 4 different applications/executables to " \
+			"of images (for 3D and 2DArray textures) to AnKi texture format. " \
+			"It requires 4 different applications/executables to " \
 			"operate: convert, identify, nvcompress and etcpack. These " \
 			"applications should be in PATH except the convert where you " \
 			"need to define the executable explicitly",
@@ -197,7 +197,7 @@ def parse_commandline():
 	parser.add_argument("-o", "--output", required = True, help = "specify output AnKi image.")
 
 	parser.add_argument("-t", "--type", default = "2D", choices = ["2D", "3D", "2DArray"],
-		help = "type of the image (2D or cube or 3D or 2DArray)")
+			help = "type of the image (2D or cube or 3D or 2DArray)")
 
 	parser.add_argument("-f", "--fast", type = int, default = 0, help = "run the fast version of the converters")
 
@@ -210,13 +210,15 @@ def parse_commandline():
 
 	parser.add_argument("--store-uncompressed", type = int, default = 0, help = "store or not uncompressed data")
 
-	parser.add_argument("--store-compressed", type = int, default = 1, help = "store or not compressed data")
+	parser.add_argument("--store-etc", type = int, default = 0, help = "store or not etc compressed data")
+
+	parser.add_argument("--store-s3tc", type = int, default = 1, help = "store or not S3TC compressed data")
 
 	parser.add_argument("--to-linear-rgb", type = int, default = 0,
 			help = "assume the input textures are sRGB. If this option is true then convert them to linear RGB")
 
 	parser.add_argument("--filter", default = "default", choices = ["default", "linear", "nearest"],
-		help = "texture filtering. Can be: default, linear, nearest")
+			help = "texture filtering. Can be: default, linear, nearest")
 
 	parser.add_argument("--mips-count", type = int, default = 0xFFFF, help = "Max number of mipmaps")
 
@@ -242,9 +244,6 @@ def parse_commandline():
 	else:
 		assert 0, "See file"
 
-	if not args.store_uncompressed and not args.store_compressed:
-		parser.error("One of --store-compressed and --store-uncompressed should be True")
-
 	if args.mips_count <= 0:
 		parser.error("Wrong number of mipmaps")
 
@@ -257,12 +256,15 @@ def parse_commandline():
 	config.convert_path = args.convert_path
 	config.no_alpha = args.no_alpha
 	config.store_uncompressed = args.store_uncompressed
-	config.store_compressed = args.store_compressed
 	config.to_linear_rgb = args.to_linear_rgb
 	config.filter = filter
 	config.mips_count = args.mips_count
 
-	print(config)
+	if args.store_etc:
+		config.compressed_formats = config.compressed_formats | DC_ETC2
+
+	if args.store_s3tc:
+		config.compressed_formats = config.compressed_formats | DC_S3TC
 
 	return config
 
@@ -606,10 +608,12 @@ def convert(config):
 				config.mips_count)
 
 		# Create etc images
-		create_etc_images(mips_fnames, config.tmp_dir, config.fast, color_format, config.convert_path)
+		if config.compressed_formats & DC_ETC2:
+			create_etc_images(mips_fnames, config.tmp_dir, config.fast, color_format, config.convert_path)
 
 		# Create dds images
-		create_dds_images(mips_fnames, config.tmp_dir, config.fast, color_format, config.normal)
+		if config.compressed_formats & DC_S3TC:
+			create_dds_images(mips_fnames, config.tmp_dir, config.fast, color_format, config.normal)
 
 	# Open file
 	fname = config.out_file
@@ -619,9 +623,7 @@ def convert(config):
 	# Write header
 	ak_format = "8sIIIIIIII"
 
-	data_compression = 0
-	if config.store_compressed:
-		data_compression = data_compression | DC_S3TC | DC_ETC2
+	data_compression = config.compressed_formats
 
 	if config.store_uncompressed:
 		data_compression = data_compression | DC_RAW
@@ -666,10 +668,10 @@ def convert(config):
 				if compression == 0 and config.store_uncompressed:
 					write_raw(tex_file, in_base_fname + ".tga", tmp_width, tmp_height, color_format)
 				# Write S3TC
-				elif compression == 1 and config.store_compressed:
+				elif compression == 1 and (config.compressed_formats & DC_S3TC):
 					write_s3tc(tex_file, in_base_fname + ".dds", tmp_width, tmp_height, color_format)
 				# Write ETC
-				elif compression == 2 and config.store_compressed:
+				elif compression == 2 and (config.compressed_formats & DC_ETC2):
 					write_etc(tex_file, in_base_fname + "_flip.pkm", tmp_width, tmp_height, color_format)
 
 			tmp_width = tmp_width / 2