MTLRenderCommandEncoder.cs 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. using System;
  2. using System.Runtime.InteropServices;
  3. using static Veldrid.MetalBindings.ObjectiveCRuntime;
  4. namespace Veldrid.MetalBindings
  5. {
  6. [StructLayout(LayoutKind.Sequential)]
  7. public struct MTLRenderCommandEncoder
  8. {
  9. public readonly IntPtr NativePtr;
  10. public MTLRenderCommandEncoder(IntPtr ptr) => NativePtr = ptr;
  11. public bool IsNull => NativePtr == IntPtr.Zero;
  12. public void setRenderPipelineState(MTLRenderPipelineState pipelineState)
  13. => objc_msgSend(NativePtr, sel_setRenderPipelineState, pipelineState.NativePtr);
  14. public void setVertexBuffer(MTLBuffer buffer, UIntPtr offset, UIntPtr index)
  15. => objc_msgSend(NativePtr, sel_setVertexBuffer,
  16. buffer.NativePtr,
  17. offset,
  18. index);
  19. public void setFragmentBuffer(MTLBuffer buffer, UIntPtr offset, UIntPtr index)
  20. => objc_msgSend(NativePtr, sel_setFragmentBuffer,
  21. buffer.NativePtr,
  22. offset,
  23. index);
  24. public void setVertexTexture(MTLTexture texture, UIntPtr index)
  25. => objc_msgSend(NativePtr, sel_setVertexTexture, texture.NativePtr, index);
  26. public void setFragmentTexture(MTLTexture texture, UIntPtr index)
  27. => objc_msgSend(NativePtr, sel_setFragmentTexture, texture.NativePtr, index);
  28. public void setVertexSamplerState(MTLSamplerState sampler, UIntPtr index)
  29. => objc_msgSend(NativePtr, sel_setVertexSamplerState, sampler.NativePtr, index);
  30. public void setFragmentSamplerState(MTLSamplerState sampler, UIntPtr index)
  31. => objc_msgSend(NativePtr, sel_setFragmentSamplerState, sampler.NativePtr, index);
  32. public void drawPrimitives(
  33. MTLPrimitiveType primitiveType,
  34. UIntPtr vertexStart,
  35. UIntPtr vertexCount,
  36. UIntPtr instanceCount,
  37. UIntPtr baseInstance)
  38. => objc_msgSend(NativePtr, sel_drawPrimitives0,
  39. primitiveType, vertexStart, vertexCount, instanceCount, baseInstance);
  40. public void drawPrimitives(
  41. MTLPrimitiveType primitiveType,
  42. UIntPtr vertexStart,
  43. UIntPtr vertexCount,
  44. UIntPtr instanceCount)
  45. => objc_msgSend(NativePtr, sel_drawPrimitives2,
  46. primitiveType, vertexStart, vertexCount, instanceCount);
  47. public void drawPrimitives(MTLPrimitiveType primitiveType, MTLBuffer indirectBuffer, UIntPtr indirectBufferOffset)
  48. => objc_msgSend(NativePtr, sel_drawPrimitives1,
  49. primitiveType, indirectBuffer, indirectBufferOffset);
  50. public void drawIndexedPrimitives(
  51. MTLPrimitiveType primitiveType,
  52. UIntPtr indexCount,
  53. MTLIndexType indexType,
  54. MTLBuffer indexBuffer,
  55. UIntPtr indexBufferOffset,
  56. UIntPtr instanceCount)
  57. => objc_msgSend(NativePtr, sel_drawIndexedPrimitives0,
  58. primitiveType, indexCount, indexType, indexBuffer.NativePtr, indexBufferOffset, instanceCount);
  59. public void drawIndexedPrimitives(
  60. MTLPrimitiveType primitiveType,
  61. UIntPtr indexCount,
  62. MTLIndexType indexType,
  63. MTLBuffer indexBuffer,
  64. UIntPtr indexBufferOffset,
  65. UIntPtr instanceCount,
  66. IntPtr baseVertex,
  67. UIntPtr baseInstance)
  68. => objc_msgSend(
  69. NativePtr,
  70. sel_drawIndexedPrimitives1,
  71. primitiveType, indexCount, indexType, indexBuffer.NativePtr, indexBufferOffset, instanceCount, baseVertex, baseInstance);
  72. public void drawIndexedPrimitives(
  73. MTLPrimitiveType primitiveType,
  74. MTLIndexType indexType,
  75. MTLBuffer indexBuffer,
  76. UIntPtr indexBufferOffset,
  77. MTLBuffer indirectBuffer,
  78. UIntPtr indirectBufferOffset)
  79. => objc_msgSend(NativePtr, sel_drawIndexedPrimitives2,
  80. primitiveType,
  81. indexType,
  82. indexBuffer,
  83. indexBufferOffset,
  84. indirectBuffer,
  85. indirectBufferOffset);
  86. public unsafe void setViewport(MTLViewport viewport)
  87. => objc_msgSend(NativePtr, sel_setViewport, viewport);
  88. public unsafe void setViewports(MTLViewport* viewports, UIntPtr count)
  89. => objc_msgSend(NativePtr, sel_setViewports, viewports, count);
  90. public unsafe void setScissorRect(MTLScissorRect scissorRect)
  91. => objc_msgSend(NativePtr, sel_setScissorRect, scissorRect);
  92. public unsafe void setScissorRects(MTLScissorRect* scissorRects, UIntPtr count)
  93. => objc_msgSend(NativePtr, sel_setScissorRects, scissorRects, count);
  94. public void setCullMode(MTLCullMode cullMode)
  95. => objc_msgSend(NativePtr, sel_setCullMode, (uint)cullMode);
  96. public void setFrontFacing(MTLWinding frontFaceWinding)
  97. => objc_msgSend(NativePtr, sel_setFrontFacingWinding, (uint)frontFaceWinding);
  98. public void setDepthStencilState(MTLDepthStencilState depthStencilState)
  99. => objc_msgSend(NativePtr, sel_setDepthStencilState, depthStencilState.NativePtr);
  100. public void setDepthClipMode(MTLDepthClipMode depthClipMode)
  101. => objc_msgSend(NativePtr, sel_setDepthClipMode, (uint)depthClipMode);
  102. public void endEncoding() => objc_msgSend(NativePtr, sel_endEncoding);
  103. public void setStencilReferenceValue(uint stencilReference)
  104. => objc_msgSend(NativePtr, sel_setStencilReferenceValue, stencilReference);
  105. public void setBlendColor(float red, float green, float blue, float alpha)
  106. => objc_msgSend(NativePtr, sel_setBlendColor, red, green, blue, alpha);
  107. public void setTriangleFillMode(MTLTriangleFillMode fillMode)
  108. => objc_msgSend(NativePtr, sel_setTriangleFillMode, (uint)fillMode);
  109. public void pushDebugGroup(NSString @string)
  110. => objc_msgSend(NativePtr, Selectors.pushDebugGroup, @string.NativePtr);
  111. public void popDebugGroup() => objc_msgSend(NativePtr, Selectors.popDebugGroup);
  112. public void insertDebugSignpost(NSString @string)
  113. => objc_msgSend(NativePtr, Selectors.insertDebugSignpost, @string.NativePtr);
  114. private static readonly Selector sel_setRenderPipelineState = "setRenderPipelineState:";
  115. private static readonly Selector sel_setVertexBuffer = "setVertexBuffer:offset:atIndex:";
  116. private static readonly Selector sel_setFragmentBuffer = "setFragmentBuffer:offset:atIndex:";
  117. private static readonly Selector sel_setVertexTexture = "setVertexTexture:atIndex:";
  118. private static readonly Selector sel_setFragmentTexture = "setFragmentTexture:atIndex:";
  119. private static readonly Selector sel_setVertexSamplerState = "setVertexSamplerState:atIndex:";
  120. private static readonly Selector sel_setFragmentSamplerState = "setFragmentSamplerState:atIndex:";
  121. private static readonly Selector sel_drawPrimitives0 = "drawPrimitives:vertexStart:vertexCount:instanceCount:baseInstance:";
  122. private static readonly Selector sel_drawPrimitives1 = "drawPrimitives:indirectBuffer:indirectBufferOffset:";
  123. private static readonly Selector sel_drawPrimitives2 = "drawPrimitives:vertexStart:vertexCount:instanceCount:";
  124. private static readonly Selector sel_drawIndexedPrimitives0 = "drawIndexedPrimitives:indexCount:indexType:indexBuffer:indexBufferOffset:instanceCount:";
  125. private static readonly Selector sel_drawIndexedPrimitives1 = "drawIndexedPrimitives:indexCount:indexType:indexBuffer:indexBufferOffset:instanceCount:baseVertex:baseInstance:";
  126. private static readonly Selector sel_drawIndexedPrimitives2 = "drawIndexedPrimitives:indexType:indexBuffer:indexBufferOffset:indirectBuffer:indirectBufferOffset:";
  127. private static readonly Selector sel_setViewport = "setViewport:";
  128. private static readonly Selector sel_setViewports = "setViewports:count:";
  129. private static readonly Selector sel_setScissorRect = "setScissorRect:";
  130. private static readonly Selector sel_setScissorRects = "setScissorRects:count:";
  131. private static readonly Selector sel_setCullMode = "setCullMode:";
  132. private static readonly Selector sel_setFrontFacingWinding = "setFrontFacingWinding:";
  133. private static readonly Selector sel_setDepthStencilState = "setDepthStencilState:";
  134. private static readonly Selector sel_setDepthClipMode = "setDepthClipMode:";
  135. private static readonly Selector sel_endEncoding = "endEncoding";
  136. private static readonly Selector sel_setStencilReferenceValue = "setStencilReferenceValue:";
  137. private static readonly Selector sel_setBlendColor = "setBlendColorRed:green:blue:alpha:";
  138. private static readonly Selector sel_setTriangleFillMode = "setTriangleFillMode:";
  139. }
  140. }