Пример #1
0
 private void UpdateVertex()
 {
     useCustomVertices = rec.X != 0 || rec.Y != 0 || rec.Width != imageResource.Width || rec.Height != imageResource.Height || (edgeColors != null && edgeColors.Length == 4);
     if (useCustomVertices)
     {
         if (vertices == null)
         {
             vertices = device.GetModule <ShaderCommon>().CreateVertex(4);
         }
         var textureSize = new Size2F(imageResource.Width, imageResource.Height);
         var colors      = edgeColors != null && edgeColors.Length == 4 ? edgeColors : new[] { PPDColors.White, PPDColors.White, PPDColors.White, PPDColors.White };
         var rect        = imageResource.GetActualUVRectangle(
             rec.X / textureSize.Width,
             rec.Y / textureSize.Height,
             (rec.X + rec.Width) / textureSize.Width,
             (rec.Y + rec.Height) / textureSize.Height);
         vertices.Write(new[] {
             new ColoredTexturedVertex(new Vector3(0, 0, 0.5f), colors[0], rect.TopLeft),
             new ColoredTexturedVertex(new Vector3(rec.Width, 0, 0.5f), colors[1], rect.TopRight),
             new ColoredTexturedVertex(new Vector3(0, rec.Height, 0.5f), colors[2], rect.BottomLeft),
             new ColoredTexturedVertex(new Vector3(rec.Width, rec.Height, 0.5f), colors[3], rect.BottomRight)
         });
     }
 }
Пример #2
0
        private void UpdateResource()
        {
            var valueString   = Value.ToString();
            var verticesCount = 0;

            if (maxDigit < 0)
            {
                verticesCount = valueString.Length;
            }
            else if (valueString.Length < maxDigit)
            {
                var sb = new StringBuilder();
                sb.Append('0', maxDigit - valueString.Length);
                sb.Append(valueString);
                valueString   = sb.ToString();
                verticesCount = valueString.Length;
            }
            else if (valueString.Length >= maxDigit)
            {
                valueString   = valueString.Substring(valueString.Length - maxDigit);
                verticesCount = valueString.Length;
            }
            if (numberVertices == null || numberVertices.Length != verticesCount)
            {
                if (numberVertices != null)
                {
                    foreach (var vertices in numberVertices)
                    {
                        if (vertices != null)
                        {
                            vertices.Dispose();
                        }
                    }
                }
                numberVertices = new VertexInfo[verticesCount];
                for (var i = 0; i < verticesCount; i++)
                {
                    numberVertices[i] = device.GetModule <ShaderCommon>().CreateVertex(4);
                }
            }
            var left = GetLeft(valueString.Length);

            for (var i = 0; i < verticesCount; i++)
            {
                var textureSize = new Size2F(imageResource.Width, imageResource.Height);
                var offset      = valueString[i] - '0';
                var rect        = imageResource.GetActualUVRectangle(
                    (offset * DigitWidth) / textureSize.Width,
                    0,
                    ((offset + 1) * DigitWidth) / textureSize.Width,
                    imageResource.Height / textureSize.Height);
                var pos1X = i * DigitWidth + left;
                var pos2X = pos1X + DigitWidth;
                numberVertices[i].Write(new[] {
                    new ColoredTexturedVertex(new Vector3(pos1X, 0, 0.5f), rect.TopLeft),
                    new ColoredTexturedVertex(new Vector3(pos2X, 0, 0.5f), rect.TopRight),
                    new ColoredTexturedVertex(new Vector3(pos1X, imageResource.Height, 0.5f), rect.BottomLeft),
                    new ColoredTexturedVertex(new Vector3(pos2X, imageResource.Height, 0.5f), rect.BottomRight)
                });
            }
        }