namespace gfx; #if !defined(__EMSCRIPTEN__) import "Mutex" #endif import "Display" const String printingDocumentName; public void SetPrintingDocumentName(const String name) { printingDocumentName = name; } public class DisplaySystemResPtr : struct { DisplaySystemResPtr prev, next; Resource resource; }; #if !defined(ECERE_VANILLA) && !defined(ECERE_NO3D) static void FreeTexture(NamedLink texture) { Bitmap bitmap = texture.data; bitmap.Free(); delete bitmap; delete texture.name; } static void FreeMaterial(Material material) { delete material.name; } #endif public class DisplaySystem { public: class_no_expansion; ~DisplaySystem() { #if !defined(ECERE_VANILLA) && !defined(ECERE_NO3D) OldLink mesh; materials.Free(Material::Free); textures.Free(FreeTexture); for(mesh = meshes.first; mesh; mesh = mesh.next) ((Mesh)mesh.data).Free(0); meshes.Free(null); #endif if(driverData) driver.DestroyDisplaySystem(this); if(driver.displaySystem == this) driver.displaySystem = null; } bool Create(const char * driverName, void * window, bool fullScreen) { bool result = false; subclass(DisplayDriver) displayDriver = GetDisplayDriver(driverName); if(displayDriver) { flags.fullScreen = fullScreen; this.window = window; if(displayDriver.CreateDisplaySystem(this)) result = true; driver = displayDriver; if(!result) { // LogErrorCode(GERR_DISPLAY_INIT_FAILED, driver); displayDriver.displaySystem = null; } else if(!displayDriver.displaySystem) { displayDriver.displaySystem = this; } } return result; } Font LoadOutlineFont(const char * faceName, float size, FontFlags flags, float outlineSize, float outlineFade) { Font result = null; subclass(DisplayDriver) driver = this ? this.driver : ((subclass(DisplayDriver))class(LFBDisplayDriver)); char * string = CopyString(faceName); char *fonts[32]; if(string) { int numFonts = TokenizeWith(string, 32, fonts, ",", true); int c; for(c = 0; c