RenderState.bf 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  1. using System;
  2. using System.Collections;
  3. using System.Text;
  4. using System.Threading.Tasks;
  5. using Beefy;
  6. using Beefy.geom;
  7. namespace Beefy.gfx
  8. {
  9. public enum DepthFunc
  10. {
  11. Never,
  12. Less,
  13. LessEqual,
  14. Equal,
  15. Greater,
  16. NotEqual,
  17. GreaterEqual,
  18. Always
  19. }
  20. public enum Topology
  21. {
  22. TriangleList,
  23. LineList
  24. }
  25. #if !STUDIO_CLIENT
  26. public class RenderState
  27. {
  28. [CallingConvention(.Stdcall), CLink]
  29. static extern void* Gfx_CreateRenderState(void* srcNativeRenderState);
  30. [CallingConvention(.Stdcall), CLink]
  31. static extern void RenderState_Delete(void* renderState);
  32. [CallingConvention(.Stdcall), CLink]
  33. static extern void RenderState_SetClip(void* renderState, float x, float y, float width, float height);
  34. [CallingConvention(.Stdcall), CLink]
  35. static extern void RenderState_SetTexWrap(void* renderState, bool texWrap);
  36. [CallingConvention(.Stdcall), CLink]
  37. static extern void RenderState_SetWireframe(void* renderState, bool wireframe);
  38. [CallingConvention(.Stdcall), CLink]
  39. static extern void RenderState_DisableClip(void* renderState);
  40. [CallingConvention(.Stdcall), CLink]
  41. static extern void RenderState_SetShader(void* nativeRenderState, void* nativeShader);
  42. [CallingConvention(.Stdcall), CLink]
  43. static extern void RenderState_SetDepthFunc(void* nativeRenderState, int32 depthFunc);
  44. [CallingConvention(.Stdcall), CLink]
  45. static extern void RenderState_SetDepthWrite(void* nativeRenderState, int32 depthWrite);
  46. [CallingConvention(.Stdcall), CLink]
  47. static extern void RenderState_SetTopology(void* nativeRenderState, int32 topology);
  48. public void* mNativeRenderState;
  49. public bool mIsFromDefaultRenderState;
  50. public this()
  51. {
  52. }
  53. public ~this()
  54. {
  55. RenderState_Delete(mNativeRenderState);
  56. }
  57. public static RenderState Create(RenderState srcRenderState = null)
  58. {
  59. void* nativeRenderState = Gfx_CreateRenderState((srcRenderState != null) ? srcRenderState.mNativeRenderState : null);
  60. if (nativeRenderState == null)
  61. return null;
  62. RenderState renderState = new RenderState();
  63. renderState.mNativeRenderState = nativeRenderState;
  64. return renderState;
  65. }
  66. public Shader Shader
  67. {
  68. set
  69. {
  70. RenderState_SetShader(mNativeRenderState, value.mNativeShader);
  71. }
  72. }
  73. public DepthFunc DepthFunc
  74. {
  75. set
  76. {
  77. RenderState_SetDepthFunc(mNativeRenderState, (int32)value);
  78. }
  79. }
  80. public bool DepthWrite
  81. {
  82. set
  83. {
  84. RenderState_SetDepthWrite(mNativeRenderState, value ? 1 : 0);
  85. }
  86. }
  87. public Rect? ClipRect
  88. {
  89. set
  90. {
  91. if (value.HasValue)
  92. {
  93. Rect rect = value.Value;
  94. RenderState_SetClip(mNativeRenderState, rect.mX, rect.mY, rect.mWidth, rect.mHeight);
  95. }
  96. else
  97. RenderState_DisableClip(mNativeRenderState);
  98. }
  99. }
  100. public bool TexWrap
  101. {
  102. set
  103. {
  104. RenderState_SetTexWrap(mNativeRenderState, value);
  105. }
  106. }
  107. public bool Wireframe
  108. {
  109. set
  110. {
  111. RenderState_SetWireframe(mNativeRenderState, value);
  112. }
  113. }
  114. public Topology Topology
  115. {
  116. set
  117. {
  118. RenderState_SetTopology(mNativeRenderState, (.)value);
  119. }
  120. }
  121. }
  122. #else
  123. public class RenderState
  124. {
  125. public IPCProxy<IStudioRenderState> mStudioRenderState;
  126. public bool mIsFromDefaultRenderState;
  127. internal RenderState()
  128. {
  129. }
  130. public static RenderState Create(RenderState srcRenderState = null)
  131. {
  132. /*if (nativeRenderState == IntPtr.Zero)
  133. return null;*/
  134. RenderState renderState = new RenderState();
  135. var renderStateRef = new IPCStudioObjectRef<IStudioRenderState>();
  136. if (srcRenderState != null)
  137. renderStateRef = srcRenderState.mStudioRenderState;
  138. var objId = BFApp.sApp.mStudioHost.Proxy.CreateRenderState(renderStateRef);
  139. renderState.mStudioRenderState = IPCProxy<IStudioRenderState>.Create(objId);
  140. return renderState;
  141. }
  142. public Shader Shader
  143. {
  144. set
  145. {
  146. mStudioRenderState.Proxy.SetShader(value.mStudioShader);
  147. }
  148. }
  149. public DepthFunc DepthFunc
  150. {
  151. set
  152. {
  153. mStudioRenderState.Proxy.SetDepthFunc((int)value); ;
  154. }
  155. }
  156. public bool DepthWrite
  157. {
  158. set
  159. {
  160. mStudioRenderState.Proxy.SetDepthWrite(value);
  161. }
  162. }
  163. public Rect? ClipRect
  164. {
  165. set
  166. {
  167. if (value.HasValue)
  168. {
  169. Rect rect = value.Value;
  170. mStudioRenderState.Proxy.SetClipRect(rect.mX, rect.mY, rect.mWidth, rect.mHeight);
  171. }
  172. else
  173. {
  174. mStudioRenderState.Proxy.DisableClipRect();
  175. }
  176. }
  177. }
  178. }
  179. #endif
  180. }