public RectangleGuiComponent(RectangleShape shape, Color <float> color, GuiRenderMode renderMode, float padding = 2.0f) : base(shape) { Color = color; RenderMode = renderMode; Padding = 2.0f; }
private void DrawImage(Rectanglef rectangle, Image image, Colorf color, GuiRenderMode mode) { //fill rectangle with texture //the result color's alpha is equal texture.alpha * opacity //do not render image if (image.GpuTexture == null) { return; } var transform = new GuiTransform(); var renderConfig = new GuiRenderConfig() { Color = color, Config = new Vector4((int)mode) }; //1.scale the rectangle transform.World = Matrix4x4.CreateScale(rectangle.Right - rectangle.Left, rectangle.Bottom - rectangle.Top, 1.0f); //2.translate it transform.World *= Matrix4x4.CreateTranslation(rectangle.Left, rectangle.Top, 0.0f); //3.keep transform matrix data transform.World *= Transform; //set projection matrix transform.Project = mProject; mTransformBuffer.Update(transform); mRenderConfigBuffer.Update(renderConfig); mDevice.SetVertexBuffer(mSquareVertexBuffer); mDevice.SetIndexBuffer(mSquareIndexBuffer); mDevice.SetBuffer(mTransformBuffer, mTransformBufferSlot, GpuShaderType.All); mDevice.SetBuffer(mRenderConfigBuffer, mRenderConfigBufferSlot, GpuShaderType.All); mDevice.SetResourceUsage(image.GpuResourceUsage, mTextureSlot, GpuShaderType.All); mDevice.DrawIndexed(6, 0, 0); }