3 #if !defined(__EMSCRIPTEN__)
8 const String printingDocumentName;
10 public void SetPrintingDocumentName(const String name)
12 printingDocumentName = name;
15 public class DisplaySystemResPtr : struct
17 DisplaySystemResPtr prev, next;
21 #if !defined(ECERE_VANILLA) && !defined(ECERE_NO3D)
22 static void FreeTexture(NamedLink texture)
24 Bitmap bitmap = texture.data;
30 static void FreeMaterial(Material material)
36 public class DisplaySystem
42 #if !defined(ECERE_VANILLA) && !defined(ECERE_NO3D)
45 materials.Free(Material::Free);
46 textures.Free(FreeTexture);
47 for(mesh = meshes.first; mesh; mesh = mesh.next)
48 ((Mesh)mesh.data).Free(0);
53 driver.DestroyDisplaySystem(this);
55 if(driver.displaySystem == this)
56 driver.displaySystem = null;
59 bool Create(const char * driverName, void * window, bool fullScreen)
62 subclass(DisplayDriver) displayDriver = GetDisplayDriver(driverName);
65 flags.fullScreen = fullScreen;
67 if(displayDriver.CreateDisplaySystem(this))
70 driver = displayDriver;
73 // LogErrorCode(GERR_DISPLAY_INIT_FAILED, driver);
74 displayDriver.displaySystem = null;
76 else if(!displayDriver.displaySystem)
78 displayDriver.displaySystem = this;
84 Font LoadOutlineFont(const char * faceName, float size, FontFlags flags, float outlineSize, float outlineFade)
87 subclass(DisplayDriver) driver = this ? this.driver : ((subclass(DisplayDriver))class(LFBDisplayDriver));
88 char * string = CopyString(faceName);
92 int numFonts = TokenizeWith(string, 32, fonts, ",", true);
94 for(c = 0; c<numFonts; c++)
96 TrimLSpaces(fonts[c],fonts[c]);
97 TrimRSpaces(fonts[c],fonts[c]);
98 if((result = driver.LoadFont(this, fonts[c], size, flags, outlineSize, outlineFade)))
108 Font LoadFont(const char * faceName, float size, FontFlags flags)
110 return LoadOutlineFont(faceName, size, flags, 0, 0);
113 void UnloadFont(Font font)
115 subclass(DisplayDriver) driver = this ? this.driver : ((subclass(DisplayDriver))class(LFBDisplayDriver));
116 driver.UnloadFont(this, font);
119 void FontExtent(Font font, const char * text, int len, int * width, int * height)
124 driver.FontExtent(this, font, text, len, width, height, 0, null, &advance);
125 if(width) *width += advance;
129 if(width) *width = 0;
130 if(height) *height = 0;
134 void FontExtent2(Font font, const char * text, int len, int * width, int * height, int prevGlyph, int * rPrevGlyph, int * overHang)
137 driver.FontExtent(this, font, text, len, width, height, prevGlyph, rPrevGlyph, overHang);
140 if(width) *width = 0;
141 if(height) *height = 0;
145 void * LoadResource(Resource resource)
147 DisplaySystemResPtr res;
148 for(res = resources.first; res; res = res.next)
150 Resource existing = res.resource;
152 if(existing._class == resource._class)
154 if(resource.OnCompare(existing) == 0)
160 // res = DisplaySystemResPtr { resource = new classof(resource) };
161 res = DisplaySystemResPtr { resource = eInstance_New(resource._class) };
164 // This will load e.g. the Bitmap *
165 res.resource.Load(resource, this);
167 // This would copy e.g. the Bitmap *
169 resource.Reference(res.resource);
174 void UnloadResource(Resource resource, DisplaySystemResPtr res)
176 // This would clear e.g. the Bitmap *
177 resource.Dereference();
180 if(res.resource._refCount == 1)
183 resources.Delete(res);
186 res.resource._refCount--;
193 #if !defined(__EMSCRIPTEN__)
198 result = driver.LockSystem(this);
209 driver.UnlockSystem(this);
211 #if !defined(__EMSCRIPTEN__)
215 #if !defined(ECERE_VANILLA) && !defined(ECERE_NO3D)
216 // --- Materials List Management ---
218 Material AddNamedMaterial(const char * name)
220 Material material = materials.FindName(name, false);
223 material = Material { };
226 material.name = CopyString(name);
228 materials.AddName(material);
230 materials.Add(material);
236 bool AddMaterial(Material material)
239 materials.AddName(material);
241 materials.Add(material);
245 Material GetMaterial(const char * name)
247 return materials.FindName(name, false);
250 bool RemoveMaterial(Material material)
252 delete material.name;
253 materials.Delete(material);
257 void ClearMaterials()
259 materials.Free(FreeMaterial);
262 // --- Textures List Management ---
264 NamedLink AddTexture(const char * name, Bitmap bitmap)
271 item.name = new char[strlen(name) + 1];
272 strcpy(item.name, name);
273 textures.AddName(item);
278 Bitmap GetTexture(const char * name)
280 return textures.FindNamedLink(name, false);
283 bool RemoveTexture(const char * name)
285 NamedLink item = textures.FindName(name, false);
289 textures.Delete(item);
297 textures.Free(FreeTexture);
300 // --- Meshes List Management ---
302 OldLink AddMesh(Mesh mesh)
310 mesh.displaySystem = this;
318 bool RemoveMesh(Mesh mesh)
320 OldLink item = meshes.FindLink(mesh);
333 for(mesh = meshes.first; mesh; mesh = mesh.next)
334 ((Mesh)mesh.data).Free(0);
340 subclass(DisplayDriver) driver;
343 public PixelFormat pixelFormat;
344 public DisplayFlags flags;
346 GLCapabilities glCapabilities;
350 #if !defined(ECERE_VANILLA) && !defined(ECERE_NO3D)
351 // This will all go in resources
359 #if !defined(__EMSCRIPTEN__)