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 LoadFont(const char * faceName, float size, FontFlags flags)
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)))
108 void UnloadFont(Font font)
110 subclass(DisplayDriver) driver = this ? this.driver : ((subclass(DisplayDriver))class(LFBDisplayDriver));
111 driver.UnloadFont(this, font);
114 void FontExtent(Font font, const char * text, int len, int * width, int * height)
117 driver.FontExtent(this, font, text, len, width, height);
120 if(width) *width = 0;
121 if(height) *height = 0;
125 void * LoadResource(Resource resource)
127 DisplaySystemResPtr res;
128 for(res = resources.first; res; res = res.next)
130 Resource existing = res.resource;
132 if(existing._class == resource._class)
134 if(resource.OnCompare(existing) == 0)
140 // res = DisplaySystemResPtr { resource = new classof(resource) };
141 res = DisplaySystemResPtr { resource = eInstance_New(resource._class) };
144 // This will load e.g. the Bitmap *
145 res.resource.Load(resource, this);
147 // This would copy e.g. the Bitmap *
149 resource.Reference(res.resource);
154 void UnloadResource(Resource resource, DisplaySystemResPtr res)
156 // This would clear e.g. the Bitmap *
157 resource.Dereference();
160 if(res.resource._refCount == 1)
163 resources.Delete(res);
166 res.resource._refCount--;
173 #if !defined(__EMSCRIPTEN__)
178 result = driver.LockSystem(this);
189 driver.UnlockSystem(this);
191 #if !defined(__EMSCRIPTEN__)
195 #if !defined(ECERE_VANILLA) && !defined(ECERE_NO3D)
196 // --- Materials List Management ---
198 Material AddNamedMaterial(const char * name)
200 Material material = materials.FindName(name, false);
203 material = Material { };
206 material.name = CopyString(name);
208 materials.AddName(material);
210 materials.Add(material);
216 bool AddMaterial(Material material)
219 materials.AddName(material);
221 materials.Add(material);
225 Material GetMaterial(const char * name)
227 return materials.FindName(name, false);
230 bool RemoveMaterial(Material material)
232 delete material.name;
233 materials.Delete(material);
237 void ClearMaterials()
239 materials.Free(FreeMaterial);
242 // --- Textures List Management ---
244 NamedLink AddTexture(const char * name, Bitmap bitmap)
251 item.name = new char[strlen(name) + 1];
252 strcpy(item.name, name);
253 textures.AddName(item);
258 Bitmap GetTexture(const char * name)
260 return textures.FindNamedLink(name, false);
263 bool RemoveTexture(const char * name)
265 NamedLink item = textures.FindName(name, false);
269 textures.Delete(item);
277 textures.Free(FreeTexture);
280 // --- Meshes List Management ---
282 OldLink AddMesh(Mesh mesh)
290 mesh.displaySystem = this;
298 bool RemoveMesh(Mesh mesh)
300 OldLink item = meshes.FindLink(mesh);
313 for(mesh = meshes.first; mesh; mesh = mesh.next)
314 ((Mesh)mesh.data).Free(0);
320 subclass(DisplayDriver) driver;
323 public PixelFormat pixelFormat;
324 public DisplayFlags flags;
329 #if !defined(ECERE_VANILLA) && !defined(ECERE_NO3D)
330 // This will all go in resources
338 #if !defined(__EMSCRIPTEN__)