ソースを参照

resource: cleanup

Daniele Bartolini 5 年 前
コミット
071966cf45
1 ファイル変更42 行追加33 行削除
  1. 42 33
      src/resource/font_resource.cpp

+ 42 - 33
src/resource/font_resource.cpp

@@ -55,62 +55,71 @@ namespace font_resource_internal
 		}
 		}
 	};
 	};
 
 
+	s32 parse_glyphs(Array<GlyphInfo>& _glyphs, const JsonArray& glyphs)
+	{
+		for (u32 i = 0; i < array::size(glyphs); ++i)
+		{
+			TempAllocator512 ta;
+			JsonObject obj(ta);
+			sjson::parse(obj, glyphs[i]);
+
+			GlyphInfo gi;
+			gi.cp           = sjson::parse_int  (obj["id"]);
+			gi.gd.x         = sjson::parse_float(obj["x"]);
+			gi.gd.y         = sjson::parse_float(obj["y"]);
+			gi.gd.width     = sjson::parse_float(obj["width"]);
+			gi.gd.height    = sjson::parse_float(obj["height"]);
+			gi.gd.x_offset  = sjson::parse_float(obj["x_offset"]);
+			gi.gd.y_offset  = sjson::parse_float(obj["y_offset"]);
+			gi.gd.x_advance = sjson::parse_float(obj["x_advance"]);
+
+			array::push_back(_glyphs, gi);
+		}
+
+		return 0;
+	}
+
 	s32 compile(CompileOptions& opts)
 	s32 compile(CompileOptions& opts)
 	{
 	{
 		Buffer buf = opts.read();
 		Buffer buf = opts.read();
 
 
 		TempAllocator4096 ta;
 		TempAllocator4096 ta;
 		JsonObject obj(ta);
 		JsonObject obj(ta);
-		JsonArray glyphs_json(ta);
+		JsonArray glyphs(ta);
 
 
 		sjson::parse(obj, buf);
 		sjson::parse(obj, buf);
-		sjson::parse_array(glyphs_json, obj["glyphs"]);
+		sjson::parse_array(glyphs, obj["glyphs"]);
 
 
 		const u32 texture_size = sjson::parse_int(obj["size"]);
 		const u32 texture_size = sjson::parse_int(obj["size"]);
 		const u32 font_size    = sjson::parse_int(obj["font_size"]);
 		const u32 font_size    = sjson::parse_int(obj["font_size"]);
-		const u32 num_glyphs   = array::size(glyphs_json);
-
 		DATA_COMPILER_ASSERT(font_size > 0
 		DATA_COMPILER_ASSERT(font_size > 0
 			, opts
 			, opts
 			, "Font size must be > 0"
 			, "Font size must be > 0"
 			);
 			);
 
 
-		Array<GlyphInfo> glyphs(default_allocator());
-		array::resize(glyphs, num_glyphs);
-		for (u32 i = 0; i < num_glyphs; ++i)
-		{
-			TempAllocator512 ta;
-			JsonObject obj(ta);
-			sjson::parse(obj, glyphs_json[i]);
-
-			glyphs[i].cp           = sjson::parse_int  (obj["id"]);
-			glyphs[i].gd.x         = sjson::parse_float(obj["x"]);
-			glyphs[i].gd.y         = sjson::parse_float(obj["y"]);
-			glyphs[i].gd.width     = sjson::parse_float(obj["width"]);
-			glyphs[i].gd.height    = sjson::parse_float(obj["height"]);
-			glyphs[i].gd.x_offset  = sjson::parse_float(obj["x_offset"]);
-			glyphs[i].gd.y_offset  = sjson::parse_float(obj["y_offset"]);
-			glyphs[i].gd.x_advance = sjson::parse_float(obj["x_advance"]);
-		}
-		std::sort(array::begin(glyphs), array::end(glyphs));
+		s32 err = 0;
+		Array<GlyphInfo> _glyphs(default_allocator());
+		err = parse_glyphs(_glyphs, glyphs);
+		DATA_COMPILER_ENSURE(err == 0, opts);
+		std::sort(array::begin(_glyphs), array::end(_glyphs));
 
 
 		opts.write(RESOURCE_HEADER(RESOURCE_VERSION_FONT));
 		opts.write(RESOURCE_HEADER(RESOURCE_VERSION_FONT));
 		opts.write(texture_size);
 		opts.write(texture_size);
 		opts.write(font_size);
 		opts.write(font_size);
-		opts.write(num_glyphs);
+		opts.write(array::size(_glyphs));
 
 
-		for (u32 i = 0; i < num_glyphs; ++i)
-			opts.write(glyphs[i].cp);
+		for (u32 i = 0; i < array::size(_glyphs); ++i)
+			opts.write(_glyphs[i].cp);
 
 
-		for (u32 i = 0; i < num_glyphs; ++i)
+		for (u32 i = 0; i < array::size(_glyphs); ++i)
 		{
 		{
-			opts.write(glyphs[i].gd.x);
-			opts.write(glyphs[i].gd.y);
-			opts.write(glyphs[i].gd.width);
-			opts.write(glyphs[i].gd.height);
-			opts.write(glyphs[i].gd.x_offset);
-			opts.write(glyphs[i].gd.y_offset);
-			opts.write(glyphs[i].gd.x_advance);
+			opts.write(_glyphs[i].gd.x);
+			opts.write(_glyphs[i].gd.y);
+			opts.write(_glyphs[i].gd.width);
+			opts.write(_glyphs[i].gd.height);
+			opts.write(_glyphs[i].gd.x_offset);
+			opts.write(_glyphs[i].gd.y_offset);
+			opts.write(_glyphs[i].gd.x_advance);
 		}
 		}
 
 
 		return 0;
 		return 0;