public void BindGraphicsPipeline( GraphicsPipeline graphicsPipeline ) { Refresh.Refresh_BindGraphicsPipeline( Device.Handle, Handle, graphicsPipeline.Handle ); }
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(); }