protected void drawConsoleText(string text, int width, Font font, Vector2 position, SolidColorData foreground, SolidColorData background) { getCurrentTransform(out Matrix3x2 tform, out float pixel); IntMatrix?intMtx; CPoint startingPoint = transformToPhysicalPixels(position, out intMtx); if (!intMtx.HasValue) { throw new ApplicationException("iDrawContext.drawConsoleText doesn't currently support transforms"); } eTextRendering trs = textRenderingStyle(intMtx); CRect rect = new CRect(startingPoint, new CSize()); Order o = drawMeshes.addText(ref currentZ, text, font, ref rect, foreground.paletteIndex, trs, width); bool opaqueBackground = background.brushType == eBrushType.Opaque; passFlags |= eRenderPassFlags.Transparent; calls.add(sDrawCall.drawText(o, ref tform, foreground.paletteIndex, background.paletteIndex, opaqueBackground, pixel, trs)); }
protected void drawText(string text, Font font, ref Rect rectangle, SolidColorData foreground, SolidColorData background) { getCurrentTransform(out Matrix3x2 tform, out float pixel); var transformedRect = tform.transformRectangle(ref rectangle); if (!DrawDevice.clipSpaceRectangle.intersects(ref transformedRect) || foreground.brushType == eBrushType.Null) { return; } flushIfNeeded(1); IntMatrix? intMtx; CPoint startingPoint = transformToPhysicalPixels(rectangle.topLeft, out intMtx); CSize size = (rectangle.size / pixel).roundToInt().asSize; CRect textRect = new CRect(startingPoint, size); eTextRendering trs = textRenderingStyle(intMtx); Order o = drawMeshes.addText(ref currentZ, text, font, ref textRect, foreground.paletteIndex, trs); bool opaqueBackground = background.brushType == eBrushType.Opaque; passFlags |= eRenderPassFlags.Transparent; calls.add(sDrawCall.drawText(o, ref tform, foreground.paletteIndex, background.paletteIndex, opaqueBackground, pixel, trs)); }
public void summarize(ref eRenderPassFlags renderPasses, out eShaderMacros drawFeatures) { eRenderPassFlags flags = eRenderPassFlags.None; eShaderMacros macros = eShaderMacros.None; foreach (var m in meshes.read()) { flags |= m.mesh.drawInfo.renderPassFlags; } if (rectCommands.length > 0) { flags |= eRenderPassFlags.Opaque; } if (spriteCommands.length > 0) { flags |= eRenderPassFlags.Transparent; macros |= eShaderMacros.TextureAtlas; } if (textCommands.length > 0) { macros |= eShaderMacros.TextRendering; flags |= eRenderPassFlags.Transparent; } renderPasses |= flags; drawFeatures = macros; }
// ==== API ==== protected void begin() { currentZ = 0; drawCallsUpperBound = 0; calls.clear(); drawMeshes.clear(); tesselatorThread.begin(); passFlags = eRenderPassFlags.None; }
public static sDrawCallInfo cacheMeshInfo(sTriangleMesh i) { eRenderPassFlags rpf = eRenderPassFlags.None; byte dc = 0; if (i.opaqueTriangles > 0) { dc++; rpf |= eRenderPassFlags.Opaque; } if (i.transparentTriangles > 0) { dc++; rpf |= eRenderPassFlags.Transparent; } return(new sDrawCallInfo(rpf, dc)); }
public sPendingDrawCall(iTessellatedMeshes mesh, eRenderPassFlags rpf, byte dcc) { drawInfo = new sDrawCallInfo(rpf, dcc); this.mesh = mesh; }
public sDrawCallInfo(eRenderPassFlags rpf, byte dcc) { renderPassFlags = rpf; drawCallsCount = dcc; }