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, void * fm)
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 #if !defined(ECERE_VANILLA) && !defined(ECERE_ONEDRIVER)
168 ((FontResource)res.resource).LoadFM((FontResource)resource, this, fm);
172 res.resource.Load(resource, this);
174 #if !defined(ECERE_VANILLA) && !defined(ECERE_ONEDRIVER)
177 FontResource fr = (FontResource)res.resource;
180 FontManager fMgr = (FontManager)fm;
181 fr.fmFont = fMgr.getFont(fr);
186 fr.font = LoadFont(fr.faceName, fr.size, fr.flags);
187 fr.displaySystem = this;
191 // This would copy e.g. the Bitmap *
193 resource.Reference(res.resource);
198 void * LoadResource(Resource resource)
200 return _LoadResource(resource, null);
203 #if !defined(ECERE_VANILLA) && !defined(ECERE_ONEDRIVER)
204 void * LoadResourceFM(Resource resource, FontManager fm)
206 return _LoadResource(resource, fm);
210 void UnloadResource(Resource resource, DisplaySystemResPtr res)
212 // This would clear e.g. the Bitmap *
213 resource.Dereference();
216 if(res.resource._refCount == 1)
219 resources.Delete(res);
222 res.resource._refCount--;
229 #if !defined(__EMSCRIPTEN__)
234 result = driver.LockSystem(this);
245 driver.UnlockSystem(this);
247 #if !defined(__EMSCRIPTEN__)
251 #if !defined(ECERE_VANILLA) && !defined(ECERE_NO3D)
252 // --- Materials List Management ---
254 Material AddNamedMaterial(const char * name)
256 Material material = materials.FindName(name, false);
259 material = Material { };
262 material.name = CopyString(name);
264 materials.AddName(material);
266 materials.Add(material);
272 bool AddMaterial(Material material)
275 materials.AddName(material);
277 materials.Add(material);
281 Material GetMaterial(const char * name)
283 return materials.FindName(name, false);
286 bool RemoveMaterial(Material material)
288 delete material.name;
289 materials.Delete(material);
293 void ClearMaterials()
295 materials.Free(FreeMaterial);
298 // --- Textures List Management ---
300 NamedLink AddTexture(const char * name, Bitmap bitmap)
307 item.name = new char[strlen(name) + 1];
308 strcpy(item.name, name);
309 textures.AddName(item);
314 Bitmap GetTexture(const char * name)
316 return textures.FindNamedLink(name, false);
319 bool RemoveTexture(const char * name)
321 NamedLink item = textures.FindName(name, false);
325 textures.Delete(item);
333 textures.Free(FreeTexture);
336 // --- Meshes List Management ---
338 OldLink AddMesh(Mesh mesh)
346 mesh.displaySystem = this;
354 bool RemoveMesh(Mesh mesh)
356 OldLink item = meshes.FindLink(mesh);
369 for(mesh = meshes.first; mesh; mesh = mesh.next)
370 ((Mesh)mesh.data).Free(0);
376 subclass(DisplayDriver) driver;
379 public PixelFormat pixelFormat;
380 public DisplayFlags flags;
382 GLCapabilities glCapabilities;
386 #if !defined(ECERE_VANILLA) && !defined(ECERE_NO3D)
387 // This will all go in resources
395 #if !defined(__EMSCRIPTEN__)