Exemplo n.º 1
0
        public void Render(GameView view)
        {
            inflightSemaphore.WaitOne();

            PrepareToDraw();

            IMTLCommandBuffer       commandBuffer        = commandQueue.CommandBuffer();
            ICAMetalDrawable        drawable             = view.GetNextDrawable();
            MTLRenderPassDescriptor renderPassDescriptor = view.GetRenderPassDescriptor(drawable);

            if (renderPassDescriptor == null)
            {
                Console.WriteLine("ERROR: Failed to get render pass descriptor from view!");
            }

            IMTLRenderCommandEncoder renderEncoder = commandBuffer.CreateRenderCommandEncoder(renderPassDescriptor);

            renderEncoder.SetDepthStencilState(depthState);

            RenderBox(renderEncoder, view, 0, "Box1");
            RenderBox(renderEncoder, view, (nuint)Marshal.SizeOf <Uniforms> (), "Box2");
            renderEncoder.EndEncoding();

            commandBuffer.AddCompletedHandler((IMTLCommandBuffer buffer) => {
                drawable.Dispose();
                inflightSemaphore.Release();
            });

            commandBuffer.PresentDrawable(drawable);
            commandBuffer.Commit();

            constantDataBufferIndex = (constantDataBufferIndex + 1) % max_inflight_buffers;
        }
Exemplo n.º 2
0
		public void Render (GameView view)
		{
			inflightSemaphore.WaitOne ();

			PrepareToDraw ();

			IMTLCommandBuffer commandBuffer = commandQueue.CommandBuffer ();
			ICAMetalDrawable drawable = view.GetNextDrawable ();
			MTLRenderPassDescriptor renderPassDescriptor = view.GetRenderPassDescriptor (drawable);

			if (renderPassDescriptor == null)
				Console.WriteLine ("ERROR: Failed to get render pass descriptor from view!");

			IMTLRenderCommandEncoder renderEncoder = commandBuffer.CreateRenderCommandEncoder (renderPassDescriptor);
			renderEncoder.SetDepthStencilState (depthState);

			RenderBox (renderEncoder, view, 0, "Box1");
			RenderBox (renderEncoder, view, (nuint)Marshal.SizeOf<Uniforms> (), "Box2");
			renderEncoder.EndEncoding ();

			commandBuffer.AddCompletedHandler ((IMTLCommandBuffer buffer) => {
				drawable.Dispose ();
				inflightSemaphore.Release ();
			});

			commandBuffer.PresentDrawable (drawable);
			commandBuffer.Commit ();

			constantDataBufferIndex = (constantDataBufferIndex + 1) % max_inflight_buffers;
		}