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) }); } }
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) }); } }