public int GetDrawIndex(Render.IColoredRect coloredRect, Render.PositionTransformation positionTransformation, Render.SizeTransformation sizeTransformation) { var position = new Position(coloredRect.X, coloredRect.Y); var size = new Size(coloredRect.Width, coloredRect.Height); if (positionTransformation != null) { position = positionTransformation(position); } if (sizeTransformation != null) { size = sizeTransformation(size); } int index = positionBuffer.Add((short)position.X, (short)position.Y); positionBuffer.Add((short)(position.X + size.Width), (short)position.Y, index + 1); positionBuffer.Add((short)(position.X + size.Width), (short)(position.Y + size.Height), index + 2); positionBuffer.Add((short)position.X, (short)(position.Y + size.Height), index + 3); indexBuffer.InsertQuad(index / 4); if (layerBuffer != null) { int layerBufferIndex = layerBuffer.Add(coloredRect.DisplayLayer); if (layerBufferIndex != index) { throw new System.Exception("Invalid index"); } layerBuffer.Add(coloredRect.DisplayLayer, layerBufferIndex + 1); layerBuffer.Add(coloredRect.DisplayLayer, layerBufferIndex + 2); layerBuffer.Add(coloredRect.DisplayLayer, layerBufferIndex + 3); } if (colorBuffer != null) { var color = coloredRect.Color; int colorBufferIndex = colorBuffer.Add(color); if (colorBufferIndex != index) { throw new System.Exception("Invalid index"); } colorBuffer.Add(color, colorBufferIndex + 1); colorBuffer.Add(color, colorBufferIndex + 2); colorBuffer.Add(color, colorBufferIndex + 3); } return(index); }
public void UpdatePosition(int index, Render.IRenderNode renderNode, int baseLineOffset, Render.PositionTransformation positionTransformation, Render.SizeTransformation sizeTransformation) { var position = new Position(renderNode.X, renderNode.Y); var size = new Size(renderNode.Width, renderNode.Height); if (positionTransformation != null) { position = positionTransformation(position); } if (sizeTransformation != null) { size = sizeTransformation(size); } positionBuffer.Update(index, (short)position.X, (short)position.Y); positionBuffer.Update(index + 1, (short)(position.X + size.Width), (short)position.Y); positionBuffer.Update(index + 2, (short)(position.X + size.Width), (short)(position.Y + size.Height)); positionBuffer.Update(index + 3, (short)position.X, (short)(position.Y + size.Height)); if (Shape != Shape.Triangle && baseLineBuffer != null) { ushort baseLine = (ushort)(position.Y + size.Height + baseLineOffset); baseLineBuffer.Update(index, baseLine); baseLineBuffer.Update(index + 1, baseLine); baseLineBuffer.Update(index + 2, baseLine); baseLineBuffer.Update(index + 3, baseLine); } }
public int GetDrawIndex(Render.ISprite sprite, Render.PositionTransformation positionTransformation, Render.SizeTransformation sizeTransformation, Position maskSpriteTextureAtlasOffset = null) { var position = new Position(sprite.X, sprite.Y); var size = new Size(sprite.Width, sprite.Height); if (positionTransformation != null) { position = positionTransformation(position); } if (sizeTransformation != null) { size = sizeTransformation(size); } int index = positionBuffer.Add((short)position.X, (short)position.Y); positionBuffer.Add((short)(position.X + size.Width), (short)position.Y, index + 1); positionBuffer.Add((short)(position.X + size.Width), (short)(position.Y + size.Height), index + 2); positionBuffer.Add((short)position.X, (short)(position.Y + size.Height), index + 3); indexBuffer.InsertQuad(index / 4); if (textureAtlasOffsetBuffer != null) { int textureAtlasOffsetBufferIndex = textureAtlasOffsetBuffer.Add((short)sprite.TextureAtlasOffset.X, (short)sprite.TextureAtlasOffset.Y); if (textureAtlasOffsetBufferIndex != index) { throw new System.Exception("Invalid index"); } textureAtlasOffsetBuffer.Add((short)(sprite.TextureAtlasOffset.X + sprite.Width), (short)sprite.TextureAtlasOffset.Y, textureAtlasOffsetBufferIndex + 1); textureAtlasOffsetBuffer.Add((short)(sprite.TextureAtlasOffset.X + sprite.Width), (short)(sprite.TextureAtlasOffset.Y + sprite.Height), textureAtlasOffsetBufferIndex + 2); textureAtlasOffsetBuffer.Add((short)sprite.TextureAtlasOffset.X, (short)(sprite.TextureAtlasOffset.Y + sprite.Height), textureAtlasOffsetBufferIndex + 3); } if (Masked && maskSpriteTextureAtlasOffset != null) { int maskTextureAtlasOffsetBufferIndex = maskTextureAtlasOffsetBuffer.Add((short)maskSpriteTextureAtlasOffset.X, (short)maskSpriteTextureAtlasOffset.Y); if (maskTextureAtlasOffsetBufferIndex != index) { throw new System.Exception("Invalid index"); } maskTextureAtlasOffsetBuffer.Add((short)(maskSpriteTextureAtlasOffset.X + sprite.Width), (short)maskSpriteTextureAtlasOffset.Y, maskTextureAtlasOffsetBufferIndex + 1); maskTextureAtlasOffsetBuffer.Add((short)(maskSpriteTextureAtlasOffset.X + sprite.Width), (short)(maskSpriteTextureAtlasOffset.Y + sprite.Height), maskTextureAtlasOffsetBufferIndex + 2); maskTextureAtlasOffsetBuffer.Add((short)maskSpriteTextureAtlasOffset.X, (short)(maskSpriteTextureAtlasOffset.Y + sprite.Height), maskTextureAtlasOffsetBufferIndex + 3); } if (Shape != Shape.Triangle && baseLineBuffer != null) { ushort baseLine = (ushort)(position.Y + size.Height + sprite.BaseLineOffset); int baseLineBufferIndex = baseLineBuffer.Add(baseLine); if (baseLineBufferIndex != index) { throw new System.Exception("Invalid index"); } baseLineBuffer.Add(baseLine, baseLineBufferIndex + 1); baseLineBuffer.Add(baseLine, baseLineBufferIndex + 2); baseLineBuffer.Add(baseLine, baseLineBufferIndex + 3); } if (layerBuffer != null) { byte layer = (sprite is Render.ILayerSprite) ? (sprite as Render.ILayerSprite).DisplayLayer : (byte)0; int layerBufferIndex = layerBuffer.Add(layer); if (layerBufferIndex != index) { throw new System.Exception("Invalid index"); } layerBuffer.Add(layer, layerBufferIndex + 1); layerBuffer.Add(layer, layerBufferIndex + 2); layerBuffer.Add(layer, layerBufferIndex + 3); } return(index); }