private unsafe void Move2Center(string content, GlyphPosition *array, float currentWidth, float currentHeight, IFontTexture fontTexture) { // move to center for (int i = 0; i < content.Length; i++) { TextModel.GlyphPosition position = array[i]; position.leftUp.x -= currentWidth / 2.0f; //position.leftUp.x /= currentWidth / factor; position.leftDown.x -= currentWidth / 2.0f; //position.leftDown.x /= currentWidth / factor; position.rightUp.x -= currentWidth / 2.0f; //position.rightUp.x /= currentWidth / factor; position.rightDown.x -= currentWidth / 2.0f; //position.rightDown.x /= currentWidth / factor; position.leftUp.y -= (currentHeight + fontTexture.GlyphHeight) / 2.0f; position.leftDown.y -= (currentHeight + fontTexture.GlyphHeight) / 2.0f; position.rightUp.y -= (currentHeight + fontTexture.GlyphHeight) / 2.0f; position.rightDown.y -= (currentHeight + fontTexture.GlyphHeight) / 2.0f; position.leftUp.x /= (currentHeight + fontTexture.GlyphHeight); position.leftDown.x /= (currentHeight + fontTexture.GlyphHeight); position.rightUp.x /= (currentHeight + fontTexture.GlyphHeight); position.rightDown.x /= (currentHeight + fontTexture.GlyphHeight); position.leftUp.y /= (currentHeight + fontTexture.GlyphHeight); position.leftDown.y /= (currentHeight + fontTexture.GlyphHeight); position.rightUp.y /= (currentHeight + fontTexture.GlyphHeight); position.rightDown.y /= (currentHeight + fontTexture.GlyphHeight); array[i] = position; } }
unsafe private void SetupGlyphPositions(string content, IFontTexture fontTexture) { FullDictionary <char, GlyphInfo> charInfoDict = fontTexture.GlyphInfoDictionary; OpenGL.BindBuffer(BufferTarget.ArrayBuffer, this.positionBufferPtr.BufferId); IntPtr pointer = OpenGL.MapBuffer(BufferTarget.ArrayBuffer, MapBufferAccess.ReadWrite); var array = (TextModel.GlyphPosition *)pointer.ToPointer(); float currentWidth = 0; int currentHeight = 0; /* * 0 3 4 7 8 11 12 15 * ------- ------- ------- ------- * | | | | | | | | * | | | | | | | | * | | | | | | | | * ------- ------- ------- ------- * 1 2 5 6 9 10 13 14 */ for (int i = 0; i < content.Length; i++) { char ch = content[i]; GlyphInfo info = charInfoDict[ch]; array[i] = new TextModel.GlyphPosition( new vec2(currentWidth, currentHeight + fontTexture.GlyphHeight), new vec2(currentWidth, currentHeight), new vec2(currentWidth + info.width, currentHeight), new vec2(currentWidth + info.width, currentHeight + fontTexture.GlyphHeight)); currentWidth += info.width + fontTexture.GlyphHeight / 10; } // move to center for (int i = 0; i < content.Length; i++) { TextModel.GlyphPosition position = array[i]; position.leftUp.x -= currentWidth / 2.0f; //position.leftUp.x /= currentWidth / factor; position.leftDown.x -= currentWidth / 2.0f; //position.leftDown.x /= currentWidth / factor; position.rightUp.x -= currentWidth / 2.0f; //position.rightUp.x /= currentWidth / factor; position.rightDown.x -= currentWidth / 2.0f; //position.rightDown.x /= currentWidth / factor; position.leftUp.y -= (currentHeight + fontTexture.GlyphHeight) / 2.0f; position.leftDown.y -= (currentHeight + fontTexture.GlyphHeight) / 2.0f; position.rightUp.y -= (currentHeight + fontTexture.GlyphHeight) / 2.0f; position.rightDown.y -= (currentHeight + fontTexture.GlyphHeight) / 2.0f; position.leftUp.x /= (currentHeight + fontTexture.GlyphHeight); position.leftDown.x /= (currentHeight + fontTexture.GlyphHeight); position.rightUp.x /= (currentHeight + fontTexture.GlyphHeight); position.rightDown.x /= (currentHeight + fontTexture.GlyphHeight); position.leftUp.y /= (currentHeight + fontTexture.GlyphHeight); position.leftDown.y /= (currentHeight + fontTexture.GlyphHeight); position.rightUp.y /= (currentHeight + fontTexture.GlyphHeight); position.rightDown.y /= (currentHeight + fontTexture.GlyphHeight); array[i] = position; } OpenGL.UnmapBuffer(BufferTarget.ArrayBuffer); OpenGL.BindBuffer(BufferTarget.ArrayBuffer, 0); }
private unsafe void SetupGlyphPositions(string content, FontResource fontResource) { FullDictionary<char, CharacterInfo> charInfoDict = fontResource.CharInfoDict; OpenGL.BindBuffer(BufferTarget.ArrayBuffer, this.model.positionBufferPtr.BufferId); IntPtr pointer = OpenGL.MapBuffer(BufferTarget.ArrayBuffer, MapBufferAccess.ReadWrite); var array = (TextModel.GlyphPosition*)pointer.ToPointer(); int currentWidth = 0; int currentHeight = 0; /* * 0 3 4 7 8 11 12 15 * ------- ------- ------- ------- * | | | | | | | | * | | | | | | | | * | | | | | | | | * ------- ------- ------- ------- * 1 2 5 6 9 10 13 14 */ for (int i = 0; i < content.Length; i++) { char ch = content[i]; CharacterInfo info = charInfoDict[ch]; array[i] = new TextModel.GlyphPosition( new vec2(currentWidth, currentHeight + fontResource.FontHeight), new vec2(currentWidth, currentHeight), new vec2(currentWidth + info.width, currentHeight), new vec2(currentWidth + info.width, currentHeight + fontResource.FontHeight)); currentWidth += info.width + fontResource.FontHeight / 10; } // move to center for (int i = 0; i < content.Length; i++) { TextModel.GlyphPosition position = array[i]; position.leftUp.x -= currentWidth / 2.0f; //position.leftUp.x /= currentWidth / factor; position.leftDown.x -= currentWidth / 2.0f; //position.leftDown.x /= currentWidth / factor; position.rightUp.x -= currentWidth / 2.0f; //position.rightUp.x /= currentWidth / factor; position.rightDown.x -= currentWidth / 2.0f; //position.rightDown.x /= currentWidth / factor; position.leftUp.y -= (currentHeight + fontResource.FontHeight) / 2.0f; position.leftDown.y -= (currentHeight + fontResource.FontHeight) / 2.0f; position.rightUp.y -= (currentHeight + fontResource.FontHeight) / 2.0f; position.rightDown.y -= (currentHeight + fontResource.FontHeight) / 2.0f; position.leftUp.x /= (currentHeight + fontResource.FontHeight); position.leftDown.x /= (currentHeight + fontResource.FontHeight); position.rightUp.x /= (currentHeight + fontResource.FontHeight); position.rightDown.x /= (currentHeight + fontResource.FontHeight); position.leftUp.y /= (currentHeight + fontResource.FontHeight); position.leftDown.y /= (currentHeight + fontResource.FontHeight); position.rightUp.y /= (currentHeight + fontResource.FontHeight); position.rightDown.y /= (currentHeight + fontResource.FontHeight); array[i] = position; } OpenGL.UnmapBuffer(BufferTarget.ArrayBuffer); OpenGL.BindBuffer(BufferTarget.ArrayBuffer, 0); }
private unsafe void SetupGlyphPositions(string content, IFontTexture fontTexture) { FullDictionary<char, GlyphInfo> charInfoDict = fontTexture.GlyphInfoDictionary; IntPtr pointer = this.positionBuffer.MapBuffer(MapBufferAccess.ReadWrite); var array = (TextModel.GlyphPosition*)pointer.ToPointer(); float currentWidth = 0; int currentHeight = 0; /* * 0 3 4 7 8 11 12 15 * ------- ------- ------- ------- * | | | | | | | | * | | | | | | | | * | | | | | | | | * ------- ------- ------- ------- * 1 2 5 6 9 10 13 14 */ for (int i = 0; i < content.Length; i++) { char ch = content[i]; GlyphInfo info = charInfoDict[ch]; array[i] = new TextModel.GlyphPosition( new vec2(currentWidth, currentHeight + fontTexture.GlyphHeight), new vec2(currentWidth, currentHeight), new vec2(currentWidth + info.width, currentHeight), new vec2(currentWidth + info.width, currentHeight + fontTexture.GlyphHeight)); currentWidth += info.width + fontTexture.GlyphHeight / 10; } // move to center for (int i = 0; i < content.Length; i++) { TextModel.GlyphPosition position = array[i]; position.leftUp.x -= currentWidth / 2.0f; //position.leftUp.x /= currentWidth / factor; position.leftDown.x -= currentWidth / 2.0f; //position.leftDown.x /= currentWidth / factor; position.rightUp.x -= currentWidth / 2.0f; //position.rightUp.x /= currentWidth / factor; position.rightDown.x -= currentWidth / 2.0f; //position.rightDown.x /= currentWidth / factor; position.leftUp.y -= (currentHeight + fontTexture.GlyphHeight) / 2.0f; position.leftDown.y -= (currentHeight + fontTexture.GlyphHeight) / 2.0f; position.rightUp.y -= (currentHeight + fontTexture.GlyphHeight) / 2.0f; position.rightDown.y -= (currentHeight + fontTexture.GlyphHeight) / 2.0f; position.leftUp.x /= (currentHeight + fontTexture.GlyphHeight); position.leftDown.x /= (currentHeight + fontTexture.GlyphHeight); position.rightUp.x /= (currentHeight + fontTexture.GlyphHeight); position.rightDown.x /= (currentHeight + fontTexture.GlyphHeight); position.leftUp.y /= (currentHeight + fontTexture.GlyphHeight); position.leftDown.y /= (currentHeight + fontTexture.GlyphHeight); position.rightUp.y /= (currentHeight + fontTexture.GlyphHeight); position.rightDown.y /= (currentHeight + fontTexture.GlyphHeight); array[i] = position; } this.positionBuffer.UnmapBuffer(); }
unsafe private void SetupGlyphPositions(string content, IFontTexture fontTexture) { FullDictionary <char, GlyphInfo> charInfoDict = fontTexture.GlyphInfoDictionary; IntPtr pointer = this.positionBuffer.MapBuffer(MapBufferAccess.ReadWrite); var array = (TextModel.GlyphPosition *)pointer.ToPointer(); float currentWidth = 0; int currentHeight = 0; /* * 0 3 4 7 8 11 12 15 * ------- ------- ------- ------- * | | | | | | | | * | | | | | | | | * | | | | | | | | * ------- ------- ------- ------- * 1 2 5 6 9 10 13 14 */ for (int i = 0; i < content.Length; i++) { char ch = content[i]; GlyphInfo info = charInfoDict[ch]; array[i] = new TextModel.GlyphPosition( new vec2(currentWidth, currentHeight + fontTexture.GlyphHeight), new vec2(currentWidth, currentHeight), new vec2(currentWidth + info.width, currentHeight), new vec2(currentWidth + info.width, currentHeight + fontTexture.GlyphHeight)); currentWidth += info.width + fontTexture.GlyphHeight / 10; } switch (this.Alignment) { case TextAlignment.Center: Move2Center(content, array, currentWidth, currentHeight, fontTexture); break; case TextAlignment.Left: Move2Left(content, array, currentWidth, currentHeight, fontTexture); break; case TextAlignment.Right: Move2Right(content, array, currentWidth, currentHeight, fontTexture); break; default: break; } this.positionBuffer.UnmapBuffer(); }