mirror of
				https://github.com/godotengine/godot.git
				synced 2025-10-31 13:41:03 +00:00 
			
		
		
		
	HTML5 exporter seems to be fully functional
-user:// filesystem implemented -default template page could look prettier, help appreciated
This commit is contained in:
		
							parent
							
								
									56c907ad04
								
							
						
					
					
						commit
						a88f67821c
					
				
					 6 changed files with 113 additions and 13 deletions
				
			
		|  | @ -17,7 +17,7 @@ javascript_objects=[] | |||
| for x in javascript_files: | ||||
| 	javascript_objects.append( env_javascript.Object( x ) ) | ||||
| 
 | ||||
| env.Append(LINKFLAGS=["-s","EXPORTED_FUNCTIONS=\"['_main','_audio_server_mix_function']\""]) | ||||
| env.Append(LINKFLAGS=["-s","EXPORTED_FUNCTIONS=\"['_main','_audio_server_mix_function','_main_after_fs_sync']\""]) | ||||
| 
 | ||||
| prog = None | ||||
| 
 | ||||
|  |  | |||
|  | @ -31,7 +31,8 @@ | |||
| #include "main/main.h" | ||||
| #include "io/resource_loader.h" | ||||
| #include "os/keyboard.h" | ||||
| 
 | ||||
| #include "emscripten.h" | ||||
| #include <string.h> | ||||
| 
 | ||||
| OS_JavaScript *os=NULL; | ||||
| 
 | ||||
|  | @ -198,15 +199,39 @@ static void _gfx_idle() { | |||
| 	glutPostRedisplay(); | ||||
| } | ||||
| 
 | ||||
| int start_step=0; | ||||
| 
 | ||||
| static void _godot_draw(void) { | ||||
| 
 | ||||
| 	os->main_loop_iterate(); | ||||
| 	if (start_step==1) { | ||||
| 		start_step=2; | ||||
| 		Main::start(); | ||||
| 		 os->main_loop_begin(); | ||||
| 	} | ||||
| 
 | ||||
| 	if (start_step==2) { | ||||
| 		os->main_loop_iterate(); | ||||
| 	} | ||||
| 
 | ||||
| 	glutSwapBuffers(); | ||||
| } | ||||
| 
 | ||||
| int main(int argc, char *argv[]) { | ||||
|    /* Initialize the window */ | ||||
| 
 | ||||
| 
 | ||||
| extern "C" { | ||||
| 
 | ||||
| void main_after_fs_sync(int value) { | ||||
| 
 | ||||
| 	start_step=1; | ||||
| 	printf("FS SYNCHED!\n"); | ||||
| } | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| int main(int argc, char *argv[]) { | ||||
| 
 | ||||
| 
 | ||||
| 	/* Initialize the window */ | ||||
| 	printf("let it go!\n"); | ||||
| 	glutInit(&argc, argv); | ||||
| 	os = new OS_JavaScript(_gfx_init,NULL,NULL,NULL,NULL); | ||||
|  | @ -220,7 +245,7 @@ int main(int argc, char *argv[]) { | |||
| 
 | ||||
| #endif | ||||
| 	ResourceLoader::set_abort_on_missing_resources(false); //ease up compatibility
 | ||||
| 	Main::start(); | ||||
| 
 | ||||
| 
 | ||||
| 	glutSpecialUpFunc(_glut_skey_up); | ||||
| 	glutSpecialFunc(_glut_skey_down); | ||||
|  | @ -238,10 +263,32 @@ int main(int argc, char *argv[]) { | |||
| //   glutReshapeFunc(gears_reshape);
 | ||||
| 	glutDisplayFunc(_godot_draw); | ||||
|    //glutSpecialFunc(gears_special);
 | ||||
| 	 os->main_loop_begin(); | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 	 //mount persistent filesystem
 | ||||
| 	 EM_ASM( | ||||
| 		 FS.mkdir('/userfs'); | ||||
| 		 FS.mount(IDBFS, {}, '/userfs'); | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 		 // sync from persisted state into memory and then
 | ||||
| 		 // run the 'test' function
 | ||||
| 		 FS.syncfs(true, function (err) { | ||||
| 			 assert(!err); | ||||
| 			 console.log("done syncinc!"); | ||||
| 			 _after_sync_cb = Module.cwrap('main_after_fs_sync', 'void',['number']); | ||||
| 			 _after_sync_cb(0); | ||||
| 
 | ||||
| 		 }); | ||||
| 
 | ||||
| 	  ); | ||||
| 
 | ||||
| 	glutMainLoop(); | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -37,6 +37,7 @@ | |||
| #include "main/main.h" | ||||
| 
 | ||||
| #include "core/globals.h" | ||||
| #include "emscripten.h" | ||||
| 
 | ||||
| int OS_JavaScript::get_video_driver_count() const { | ||||
| 
 | ||||
|  | @ -270,6 +271,32 @@ bool OS_JavaScript::main_loop_iterate() { | |||
| 
 | ||||
| 	if (!main_loop) | ||||
| 		return false; | ||||
| 
 | ||||
| 	if (time_to_save_sync>=0) { | ||||
| 		int64_t newtime = get_ticks_msec(); | ||||
| 		int64_t elapsed = newtime - last_sync_time; | ||||
| 		last_sync_time=newtime; | ||||
| 
 | ||||
| 		time_to_save_sync-=elapsed; | ||||
| 
 | ||||
| 		print_line("elapsed "+itos(elapsed)+" tts "+itos(time_to_save_sync)); | ||||
| 
 | ||||
| 		if (time_to_save_sync<0) { | ||||
| 			//time to sync, for real
 | ||||
| 			// run 'success'
 | ||||
| 			print_line("DOING SYNCH!"); | ||||
| 			EM_ASM( | ||||
| 			  FS.syncfs(function (err) { | ||||
| 			    assert(!err); | ||||
| 				console.log("Synched!"); | ||||
| 			    //ccall('success', 'v');
 | ||||
| 			  }); | ||||
| 			); | ||||
| 		} | ||||
| 
 | ||||
| 
 | ||||
| 	} | ||||
| 
 | ||||
| 	return Main::iteration(); | ||||
| } | ||||
| 
 | ||||
|  | @ -562,14 +589,21 @@ String OS_JavaScript::get_locale() const { | |||
| 
 | ||||
| String OS_JavaScript::get_data_dir() const { | ||||
| 
 | ||||
| 	if (get_data_dir_func) | ||||
| 		return get_data_dir_func(); | ||||
| 	return "/"; | ||||
| 	//if (get_data_dir_func)
 | ||||
| 	//	return get_data_dir_func();
 | ||||
| 	return "/userfs"; | ||||
| 	//return Globals::get_singleton()->get_singleton_object("GodotOS")->call("get_data_dir");
 | ||||
| }; | ||||
| 
 | ||||
| 
 | ||||
| void OS_JavaScript::_close_notification_funcs(const String& p_file,int p_flags) { | ||||
| 
 | ||||
| 	print_line("close "+p_file+" flags "+itos(p_flags)); | ||||
| 	if (p_file.begins_with("/userfs") && p_flags&FileAccess::WRITE) { | ||||
| 		static_cast<OS_JavaScript*>(get_singleton())->last_sync_time=OS::get_singleton()->get_ticks_msec(); | ||||
| 		static_cast<OS_JavaScript*>(get_singleton())->time_to_save_sync=5000; //five seconds since last save
 | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| OS_JavaScript::OS_JavaScript(GFXInitFunc p_gfx_init_func,void*p_gfx_init_ud, OpenURIFunc p_open_uri_func, GetDataDirFunc p_get_data_dir_func,GetLocaleFunc p_get_locale_func) { | ||||
| 
 | ||||
|  | @ -589,6 +623,9 @@ OS_JavaScript::OS_JavaScript(GFXInitFunc p_gfx_init_func,void*p_gfx_init_ud, Ope | |||
| 	open_uri_func=p_open_uri_func; | ||||
| 	get_data_dir_func=p_get_data_dir_func; | ||||
| 	get_locale_func=p_get_locale_func; | ||||
| 	FileAccessUnix::close_notification_func=_close_notification_funcs; | ||||
| 
 | ||||
| 	time_to_save_sync=-1; | ||||
| 
 | ||||
| 
 | ||||
| } | ||||
|  |  | |||
|  | @ -65,6 +65,9 @@ private: | |||
| 
 | ||||
| 	bool use_gl2; | ||||
| 
 | ||||
| 	int64_t time_to_save_sync; | ||||
| 	int64_t last_sync_time; | ||||
| 
 | ||||
| 	Rasterizer *rasterizer; | ||||
| 	VisualServer *visual_server; | ||||
| 	AudioServerJavascript *audio_server; | ||||
|  | @ -84,6 +87,8 @@ private: | |||
| 	GetDataDirFunc get_data_dir_func; | ||||
| 	GetLocaleFunc get_locale_func; | ||||
| 
 | ||||
| 	static void _close_notification_funcs(const String& p_file,int p_flags); | ||||
| 
 | ||||
| public: | ||||
| 
 | ||||
| 	// functions used by main to initialize/deintialize the OS
 | ||||
|  | @ -106,7 +111,7 @@ public: | |||
| 
 | ||||
| 	typedef int64_t ProcessID; | ||||
| 
 | ||||
| 	static OS* get_singleton(); | ||||
| 	//static OS* get_singleton();
 | ||||
| 
 | ||||
| 	virtual void vprint(const char* p_format, va_list p_list, bool p_stderr=false); | ||||
| 	virtual void print(const char *p_format, ... ); | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Juan Linietsky
						Juan Linietsky