示例#1
0
 public void BindGraphicsPipeline(
     GraphicsPipeline graphicsPipeline
     )
 {
     Refresh.Refresh_BindGraphicsPipeline(
         Device.Handle,
         Handle,
         graphicsPipeline.Handle
         );
 }
示例#2
0
        public void Draw()
        {
            IntPtr commandBuffer = Refresh.Refresh_AcquireCommandBuffer(RefreshDevice, 0);

            unsafe
            {
                fixed(Refresh.Color *ptr = &clearColor)
                {
                    Refresh.Refresh_BeginRenderPass(
                        RefreshDevice,
                        commandBuffer,
                        mainRenderPass,
                        mainFrameBuffer,
                        renderArea,
                        (IntPtr)ptr,
                        1,
                        ref depthStencilClearValue
                        );
                }
            }

            Refresh.Refresh_BindGraphicsPipeline(
                RefreshDevice,
                commandBuffer,
                raymarchPipeline
                );

            uint fragmentParamOffset;

            unsafe
            {
                fixed(RaymarchUniforms *ptr = &raymarchUniforms)
                {
                    fragmentParamOffset = Refresh.Refresh_PushFragmentShaderParams(
                        RefreshDevice,
                        commandBuffer,
                        (IntPtr)ptr,
                        1
                        );
                }
            }

            GCHandle vertexBufferHandle = GCHandle.Alloc(vertexBuffer, GCHandleType.Pinned);
            GCHandle offsetHandle       = GCHandle.Alloc(offsets, GCHandleType.Pinned);

            Refresh.Refresh_BindVertexBuffers(
                RefreshDevice,
                commandBuffer,
                0,
                1,
                vertexBufferHandle.AddrOfPinnedObject(),
                offsetHandle.AddrOfPinnedObject()
                );

            vertexBufferHandle.Free();
            offsetHandle.Free();

            GCHandle sampleTextureHandle = GCHandle.Alloc(sampleTextures, GCHandleType.Pinned);
            GCHandle sampleSamplerHandle = GCHandle.Alloc(sampleSamplers, GCHandleType.Pinned);

            Refresh.Refresh_BindFragmentSamplers(
                RefreshDevice,
                commandBuffer,
                sampleTextureHandle.AddrOfPinnedObject(),
                sampleSamplerHandle.AddrOfPinnedObject()
                );

            sampleTextureHandle.Free();
            sampleSamplerHandle.Free();

            Refresh.Refresh_DrawPrimitives(
                RefreshDevice,
                commandBuffer,
                0,
                1,
                0,
                fragmentParamOffset
                );

            Refresh.Refresh_EndRenderPass(
                RefreshDevice,
                commandBuffer
                );

            Refresh.Refresh_QueuePresent(
                RefreshDevice,
                commandBuffer,
                ref mainColorTargetTextureSlice,
                ref flip,
                Refresh.Filter.Nearest
                );

            GCHandle commandBufferHandle = GCHandle.Alloc(commandBuffer, GCHandleType.Pinned);

            Refresh.Refresh_Submit(
                RefreshDevice,
                1,
                commandBufferHandle.AddrOfPinnedObject()
                );

            commandBufferHandle.Free();
        }