コード例 #1
0
ファイル: PresentRender.cs プロジェクト: zhiy0122/GalDesigner
        public void Draw(Image texture, Rectangle area, float opacity = 1.0f)
        {
            //init the data we need uo upload
            Transform    transform    = new Transform();
            RenderConfig renderConfig = new RenderConfig();

            transform.World      = Matrix4x4.CreateTranslation(new System.Numerics.Vector3(area.Left, area.Top, 0));
            transform.World      = Matrix4x4.CreateScale(new System.Numerics.Vector3(area.Right - area.Left, area.Bottom - area.Top, 1)) * transform.World;
            transform.Projection = Matrix4x4.CreateOrthographicOffCenter(0, mSwapChain.Size.Width, 0, mSwapChain.Size.Height, 0, 1);

            renderConfig.Opacity = new System.Numerics.Vector4(opacity);

            //upload it to gpu memory
            mTransformBuffer.Update(transform);
            mRenderConfigBuffer.Update(renderConfig);

            //set resource to shader
            mDevice.SetBuffer(mTransformBuffer, mTransformBufferSlot, GpuShaderType.VertexShader);
            mDevice.SetBuffer(mRenderConfigBuffer, mRenderConfigBufferSlot, GpuShaderType.PixelShader);
            mDevice.SetSamplerState(mGpuSamplerState, mSamplerStateSlot, GpuShaderType.PixelShader);
            mDevice.SetResourceUsage(texture.GpuResourceUsage, mTextureSlot, GpuShaderType.PixelShader);

            //draw
            mDevice.DrawIndexed(6, 0, 0);
        }
コード例 #2
0
ファイル: GuiRender.cs プロジェクト: zhiy0122/GalDesigner
        public virtual void BeginDraw(Image image)
        {
            //begin draw and we need set the render target before we draw anything

            //reset device and set render target
            mDevice.Reset();
            mDevice.SetRenderTarget(image.GpuRenderTarget);

            //set blend state
            mDevice.SetBlendState(mBlendState);

            //set input layout ,vertex shader and primitive type
            mDevice.SetInputLayout(mInputLayout);
            mDevice.SetPixelShader(mPixelShader);
            mDevice.SetVertexShader(mVertexShader);
            mDevice.SetPrimitiveType(GpuPrimitiveType.TriangleList);

            //set view port
            mDevice.SetViewPort(new Rectanglef(0, 0, image.Size.Width, image.Size.Height));

            mDevice.SetSamplerState(mSamplerState, mSamplerStateSlot, GpuShaderType.All);

            //set the project matrix, need set null when we end draw
            mProject = Matrix4x4.CreateOrthographicOffCenter(
                0, image.Size.Width,
                0, image.Size.Height, 0, 1);
        }
コード例 #3
0
ファイル: GuiRender.cs プロジェクト: muGouDan/GalDesigner
        public virtual void DrawImage(Rectangle <float> rectangle, Image image, Color <float> color)
        {
            //fill rectangle with texture
            //the result color's alpha is equal texture.alpha * opacity

            MatrixData   matrixData   = new MatrixData();
            RenderConfig renderConfig = new RenderConfig()
            {
                Color = color
            };

            //1.scale the rectangle
            matrixData.World = Matrix4x4.CreateScale(rectangle.Right - rectangle.Left, rectangle.Bottom - rectangle.Top, 1.0f);
            //2.translate it
            matrixData.World *= Matrix4x4.CreateTranslation(rectangle.Left, rectangle.Top, 0.0f);
            //3.keep transform matrix data
            matrixData.World *= Transform;

            //set projection matrix
            matrixData.Project = mProject;

            mMatrixDataBuffer.Update(matrixData);
            mRenderConfigBuffer.Update(renderConfig);

            mDevice.SetPixelShader(mTexturePixelShader);
            mDevice.SetVertexBuffer(mSquareVertexBuffer);
            mDevice.SetIndexBuffer(mSquareIndexBuffer);

            mDevice.SetSamplerState(mSamplerState, mSamplerStateSlot, GpuShaderType.PixelShader);

            mDevice.SetBuffer(mMatrixDataBuffer, mMatrixDataBufferSlot, GpuShaderType.VertexShader);
            mDevice.SetBuffer(mRenderConfigBuffer, mRenderConfigBufferSlot, GpuShaderType.PixelShader);
            mDevice.SetResourceUsage(image.GpuResourceUsage, mTextureSlot, GpuShaderType.PixelShader);

            mDevice.DrawIndexed(6, 0, 0);
        }