internal static void AlertWindowResized(DWindow window) { GL.Viewport(0, 0, window.Width, window.Height); IVector res = new IVector(window.Width, window.Height); gridSize = res / (new IVector(1920, 1080) / hdScale); cachedUnitSize = GetUnitSize(gridSize); cachedUnitScreenPositions = new Vector[gridSize.y * gridSize.x]; cachedUnitFontPositions = new Vector[gridSize.y * gridSize.x]; cachedUnitForegroundColors = new Color[gridSize.y * gridSize.x]; cachedUnitBackgroundColors = new Color[gridSize.y * gridSize.x]; IVector oldSize = rootCanvas.Size; bool rootCanvasSizeChanged = gridSize != oldSize; CBuffer oldBuffer = rootBuffer; rootCanvas.ChangeSize(gridSize); rootBuffer = rootCanvas.buffer; rootCanvas.SignalRender(); if (rootCanvasSizeChanged) { window.Title = $"Dae | Size: {gridSize.x}x{gridSize.y}"; } unitMaterial?.Set("size", GetUnitSize(gridSize) * unitScale); CBuffer.Blit(oldBuffer, rootBuffer, IVector.zero, oldBuffer.Size, IVector.zero); for (int y = 0; y < gridSize.y; y++) { for (int x = 0; x < gridSize.x; x++) { CUnit unit = rootBuffer[x, y]; int aPos = (y * gridSize.x) + x; cachedUnitScreenPositions[aPos] = DMath.P01ToN1P1(GetCorrectedPosition(new Vector(x, y))).ReversedYFull; } } }
internal void RenderSubComponents() { // Remove all null components subComponents.RemoveAll(component => component == null); // Render all sub components foreach (Component component in subComponents) { if (component.Size.x > 0 && component.Size.y > 0) { if (component.signalRender || !checkSignalRender) { component.signalRender = false; component.Render(); } CBuffer.Blit(component.buffer, buffer, Vector.zero, component.Size, component.position); } } }