public CommandBuffer AcquireCommandBuffer() { var commandBufferHandle = Refresh.Refresh_AcquireCommandBuffer(Handle, 0); if (commandBufferPool.Count == 0) { commandBufferPool.Enqueue(new CommandBuffer(this)); } var commandBuffer = commandBufferPool.Dequeue(); commandBuffer.Handle = commandBufferHandle; return(commandBuffer); }
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(); }