예제 #1
0
        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));
        }
예제 #2
0
        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));
        }
예제 #3
0
        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;
        }
예제 #4
0
        // ==== API ====
        protected void begin()
        {
            currentZ            = 0;
            drawCallsUpperBound = 0;
            calls.clear();
            drawMeshes.clear();
            tesselatorThread.begin();

            passFlags = eRenderPassFlags.None;
        }
예제 #5
0
파일: Meshes.cs 프로젝트: zeta1999/Vrmac
        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));
        }
예제 #6
0
 public sPendingDrawCall(iTessellatedMeshes mesh, eRenderPassFlags rpf, byte dcc)
 {
     drawInfo  = new sDrawCallInfo(rpf, dcc);
     this.mesh = mesh;
 }
예제 #7
0
 public sDrawCallInfo(eRenderPassFlags rpf, byte dcc)
 {
     renderPassFlags = rpf;
     drawCallsCount  = dcc;
 }