Przeglądaj źródła

Write resource data to in-memory buffer

Daniele Bartolini 10 lat temu
rodzic
commit
f6ace5cfbe

+ 8 - 3
src/compilers/bundle_compiler.cpp

@@ -97,19 +97,24 @@ bool BundleCompiler::compile(const char* type, const char* name, const char* pla
 	bool success = true;
 	jmp_buf buf;
 
-	File* outf = _bundle_fs.open(path.c_str(), FOM_WRITE);
-	CompileOptions opts(_source_fs, outf, platform, &buf);
+	Buffer output(default_allocator());
+	array::reserve(output, 4*1024*1024);
 
 	if (!setjmp(buf))
 	{
+		CompileOptions opts(_source_fs, output, platform, &buf);
 		compile(_type, src_path.c_str(), opts);
+		File* outf = _bundle_fs.open(path.c_str(), FOM_WRITE);
+		uint32_t size = array::size(output);
+		uint32_t written = outf->write(array::begin(output), size);
+		_bundle_fs.close(outf);
+		success = size == written;
 	}
 	else
 	{
 		success = false;
 	}
 
-	_bundle_fs.close(outf);
 	return success;
 }
 

+ 9 - 15
src/compilers/compile_options.h

@@ -6,7 +6,6 @@
 #pragma once
 
 #include "filesystem.h"
-#include "reader_writer.h"
 #include "log.h"
 #include <setjmp.h>
 
@@ -18,9 +17,9 @@ namespace crown
 
 struct CompileOptions
 {
-	CompileOptions(Filesystem& fs, File* out, const char* platform, jmp_buf* buf)
+	CompileOptions(Filesystem& fs, Buffer& output, const char* platform, jmp_buf* buf)
 		: _fs(fs)
-		, _bw(*out)
+		, _output(output)
 		, _platform(platform)
 		, _jmpbuf(buf)
 	{
@@ -61,25 +60,20 @@ struct CompileOptions
 		_fs.delete_file(path);
 	}
 
-	BinaryWriter& write(const void* data, uint32_t size)
+	void write(const void* data, uint32_t size)
 	{
-		_bw.write(data, size);
-		return _bw;
+		array::push(_output, (const char*)data, size);
 	}
 
 	template <typename T>
-	BinaryWriter& write(const T& data)
+	void write(const T& data)
 	{
-		_bw.write(data);
-		return _bw;
+		write(&data, sizeof(data));
 	}
 
-	BinaryWriter& write(const Buffer& data)
+	void write(const Buffer& data)
 	{
-		if (array::size(data))
-			_bw.write(array::begin(data), array::size(data));
-
-		return _bw;
+		array::push(_output, array::begin(data), array::size(data));
 	}
 
 	const char* platform() const
@@ -88,7 +82,7 @@ struct CompileOptions
 	}
 
 	Filesystem& _fs;
-	BinaryWriter _bw;
+	Buffer& _output;
 	const char* _platform;
 	jmp_buf* _jmpbuf;
 };

+ 1 - 0
src/resource/mesh_resource.cpp

@@ -13,6 +13,7 @@
 #include "resource_manager.h"
 #include "compile_options.h"
 #include "vector2.h"
+#include "reader_writer.h"
 
 namespace crown
 {