BsScriptRenderSettings.cpp 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #include "BsScriptRenderSettings.h"
  4. #include "BsMonoManager.h"
  5. #include "BsMonoAssembly.h"
  6. #include "BsMonoClass.h"
  7. #include "BsMonoUtil.h"
  8. #include "BsCoreThread.h"
  9. #include "BsRenderSettings.h"
  10. namespace bs
  11. {
  12. MonoField* ScriptAutoExposureSettings::sHistogramLog2Min = nullptr;
  13. MonoField* ScriptAutoExposureSettings::sHistogramLog2Max = nullptr;
  14. MonoField* ScriptAutoExposureSettings::sHistogramPctLow = nullptr;
  15. MonoField* ScriptAutoExposureSettings::sHistogramPctHigh = nullptr;
  16. MonoField* ScriptAutoExposureSettings::sMinEyeAdaptation = nullptr;
  17. MonoField* ScriptAutoExposureSettings::sMaxEyeAdaptation = nullptr;
  18. MonoField* ScriptAutoExposureSettings::sEyeAdaptationSpeedUp = nullptr;
  19. MonoField* ScriptAutoExposureSettings::sEyeAdaptationSpeedDown = nullptr;
  20. ScriptAutoExposureSettings::ScriptAutoExposureSettings(MonoObject* instance)
  21. :ScriptObject(instance)
  22. { }
  23. void ScriptAutoExposureSettings::initRuntimeData()
  24. {
  25. sHistogramLog2Min = metaData.scriptClass->getField("HistogramLog2Min");
  26. sHistogramLog2Max = metaData.scriptClass->getField("HistogramLog2Max");
  27. sHistogramPctLow = metaData.scriptClass->getField("HistogramPctLow");
  28. sHistogramPctHigh = metaData.scriptClass->getField("HistogramPctHigh");
  29. sMinEyeAdaptation = metaData.scriptClass->getField("MinEyeAdaptation");
  30. sMaxEyeAdaptation = metaData.scriptClass->getField("MaxEyeAdaptation");
  31. sEyeAdaptationSpeedUp = metaData.scriptClass->getField("EyeAdaptationSpeedUp");
  32. sEyeAdaptationSpeedDown = metaData.scriptClass->getField("EyeAdaptationSpeedDown");
  33. }
  34. SPtr<AutoExposureSettings> ScriptAutoExposureSettings::toNative(MonoObject* object)
  35. {
  36. SPtr<AutoExposureSettings> output = bs_shared_ptr_new<AutoExposureSettings>();
  37. sHistogramLog2Min->get(object, &output->histogramLog2Min);
  38. sHistogramLog2Max->get(object, &output->histogramLog2Max);
  39. sHistogramPctLow->get(object, &output->histogramPctLow);
  40. sHistogramPctHigh->get(object, &output->histogramPctHigh);
  41. sMinEyeAdaptation->get(object, &output->minEyeAdaptation);
  42. sMaxEyeAdaptation->get(object, &output->maxEyeAdaptation);
  43. sEyeAdaptationSpeedUp->get(object, &output->eyeAdaptationSpeedUp);
  44. sEyeAdaptationSpeedDown->get(object, &output->eyeAdaptationSpeedDown);
  45. return output;
  46. }
  47. MonoObject* ScriptAutoExposureSettings::toManaged(AutoExposureSettings& value)
  48. {
  49. MonoObject* object = metaData.scriptClass->createInstance();
  50. sHistogramLog2Min->set(object, &value.histogramLog2Min);
  51. sHistogramLog2Max->set(object, &value.histogramLog2Max);
  52. sHistogramPctLow->set(object, &value.histogramPctLow);
  53. sHistogramPctHigh->set(object, &value.histogramPctHigh);
  54. sMinEyeAdaptation->set(object, &value.minEyeAdaptation);
  55. sMaxEyeAdaptation->set(object, &value.maxEyeAdaptation);
  56. sEyeAdaptationSpeedUp->set(object, &value.eyeAdaptationSpeedUp);
  57. sEyeAdaptationSpeedDown->set(object, &value.eyeAdaptationSpeedDown);
  58. return object;
  59. }
  60. MonoField* ScriptTonemappingSettings::sFilmicCurveShoulderStrength = nullptr;
  61. MonoField* ScriptTonemappingSettings::sFilmicCurveLinearStrength = nullptr;
  62. MonoField* ScriptTonemappingSettings::sFilmicCurveLinearAngle = nullptr;
  63. MonoField* ScriptTonemappingSettings::sFilmicCurveToeStrength = nullptr;
  64. MonoField* ScriptTonemappingSettings::sFilmicCurveToeNumerator = nullptr;
  65. MonoField* ScriptTonemappingSettings::sFilmicCurveToeDenominator = nullptr;
  66. MonoField* ScriptTonemappingSettings::sFilmicCurveLinearWhitePoint = nullptr;
  67. ScriptTonemappingSettings::ScriptTonemappingSettings(MonoObject* instance)
  68. :ScriptObject(instance)
  69. { }
  70. void ScriptTonemappingSettings::initRuntimeData()
  71. {
  72. sFilmicCurveShoulderStrength = metaData.scriptClass->getField("FilmicCurveShoulderStrength");
  73. sFilmicCurveLinearStrength = metaData.scriptClass->getField("FilmicCurveLinearStrength");
  74. sFilmicCurveLinearAngle = metaData.scriptClass->getField("FilmicCurveLinearAngle");
  75. sFilmicCurveToeStrength = metaData.scriptClass->getField("FilmicCurveToeStrength");
  76. sFilmicCurveToeNumerator = metaData.scriptClass->getField("FilmicCurveToeNumerator");
  77. sFilmicCurveToeDenominator = metaData.scriptClass->getField("FilmicCurveToeDenominator");
  78. sFilmicCurveLinearWhitePoint = metaData.scriptClass->getField("FilmicCurveLinearWhitePoint");
  79. }
  80. SPtr<TonemappingSettings> ScriptTonemappingSettings::toNative(MonoObject* object)
  81. {
  82. SPtr<TonemappingSettings> output = bs_shared_ptr_new<TonemappingSettings>();
  83. sFilmicCurveShoulderStrength->get(object, &output->filmicCurveShoulderStrength);
  84. sFilmicCurveLinearStrength->get(object, &output->filmicCurveLinearStrength);
  85. sFilmicCurveLinearAngle->get(object, &output->filmicCurveLinearAngle);
  86. sFilmicCurveToeStrength->get(object, &output->filmicCurveToeStrength);
  87. sFilmicCurveToeNumerator->get(object, &output->filmicCurveToeNumerator);
  88. sFilmicCurveToeDenominator->get(object, &output->filmicCurveToeDenominator);
  89. sFilmicCurveLinearWhitePoint->get(object, &output->filmicCurveLinearWhitePoint);
  90. return output;
  91. }
  92. MonoObject* ScriptTonemappingSettings::toManaged(TonemappingSettings& value)
  93. {
  94. MonoObject* object = metaData.scriptClass->createInstance();
  95. sFilmicCurveShoulderStrength->set(object, &value.filmicCurveShoulderStrength);
  96. sFilmicCurveLinearStrength->set(object, &value.filmicCurveLinearStrength);
  97. sFilmicCurveLinearAngle->set(object, &value.filmicCurveLinearAngle);
  98. sFilmicCurveToeStrength->set(object, &value.filmicCurveToeStrength);
  99. sFilmicCurveToeNumerator->set(object, &value.filmicCurveToeNumerator);
  100. sFilmicCurveToeDenominator->set(object, &value.filmicCurveToeDenominator);
  101. sFilmicCurveLinearWhitePoint->set(object, &value.filmicCurveLinearWhitePoint);
  102. return object;
  103. }
  104. MonoField* ScriptWhiteBalanceSettings::sTemperature = nullptr;
  105. MonoField* ScriptWhiteBalanceSettings::sTint = nullptr;
  106. ScriptWhiteBalanceSettings::ScriptWhiteBalanceSettings(MonoObject* instance)
  107. :ScriptObject(instance)
  108. { }
  109. void ScriptWhiteBalanceSettings::initRuntimeData()
  110. {
  111. sTemperature = metaData.scriptClass->getField("Temperature");
  112. sTint = metaData.scriptClass->getField("Tint");
  113. }
  114. SPtr<WhiteBalanceSettings> ScriptWhiteBalanceSettings::toNative(MonoObject* object)
  115. {
  116. SPtr<WhiteBalanceSettings> output = bs_shared_ptr_new<WhiteBalanceSettings>();
  117. sTemperature->get(object, &output->temperature);
  118. sTint->get(object, &output->tint);
  119. return output;
  120. }
  121. MonoObject* ScriptWhiteBalanceSettings::toManaged(WhiteBalanceSettings& value)
  122. {
  123. MonoObject* object = metaData.scriptClass->createInstance();
  124. sTemperature->set(object, &value.temperature);
  125. sTint->set(object, &value.tint);
  126. return object;
  127. }
  128. MonoField* ScriptColorGradingSettings::sSaturation = nullptr;
  129. MonoField* ScriptColorGradingSettings::sContrast = nullptr;
  130. MonoField* ScriptColorGradingSettings::sGain = nullptr;
  131. MonoField* ScriptColorGradingSettings::sOffset = nullptr;
  132. ScriptColorGradingSettings::ScriptColorGradingSettings(MonoObject* instance)
  133. :ScriptObject(instance)
  134. { }
  135. void ScriptColorGradingSettings::initRuntimeData()
  136. {
  137. sSaturation = metaData.scriptClass->getField("Saturation");
  138. sContrast = metaData.scriptClass->getField("Contrast");
  139. sGain = metaData.scriptClass->getField("Gain");
  140. sOffset = metaData.scriptClass->getField("Offset");
  141. }
  142. SPtr<ColorGradingSettings> ScriptColorGradingSettings::toNative(MonoObject* object)
  143. {
  144. SPtr<ColorGradingSettings> output = bs_shared_ptr_new<ColorGradingSettings>();
  145. sSaturation->get(object, &output->saturation);
  146. sContrast->get(object, &output->contrast);
  147. sGain->get(object, &output->gain);
  148. sOffset->get(object, &output->offset);
  149. return output;
  150. }
  151. MonoObject* ScriptColorGradingSettings::toManaged(ColorGradingSettings& value)
  152. {
  153. MonoObject* object = metaData.scriptClass->createInstance();
  154. sSaturation->set(object, &value.saturation);
  155. sContrast->set(object, &value.contrast);
  156. sGain->set(object, &value.gain);
  157. sOffset->set(object, &value.offset);
  158. return object;
  159. }
  160. MonoField* ScriptRenderSettings::sEnableAutoExposure = nullptr;
  161. MonoField* ScriptRenderSettings::sAutoExposure = nullptr;
  162. MonoField* ScriptRenderSettings::sEnableTonemapping = nullptr;
  163. MonoField* ScriptRenderSettings::sTonemapping = nullptr;
  164. MonoField* ScriptRenderSettings::sWhiteBalance = nullptr;
  165. MonoField* ScriptRenderSettings::sColorGrading = nullptr;
  166. MonoField* ScriptRenderSettings::sExposureScale = nullptr;
  167. MonoField* ScriptRenderSettings::sGamma = nullptr;
  168. MonoField* ScriptRenderSettings::sEnableHDR = nullptr;
  169. MonoField* ScriptRenderSettings::sEnableLighting = nullptr;
  170. MonoField* ScriptRenderSettings::sEnableShadows = nullptr;
  171. MonoField* ScriptRenderSettings::sOverlayOnly = nullptr;
  172. ScriptRenderSettings::ScriptRenderSettings(MonoObject* instance)
  173. :ScriptObject(instance)
  174. { }
  175. void ScriptRenderSettings::initRuntimeData()
  176. {
  177. metaData.scriptClass->addInternalCall("Internal_CreateDefault", &ScriptRenderSettings::internal_CreateDefault);
  178. sEnableAutoExposure = metaData.scriptClass->getField("EnableAutoExposure");
  179. sAutoExposure = metaData.scriptClass->getField("AutoExposure");
  180. sEnableTonemapping = metaData.scriptClass->getField("EnableTonemapping");
  181. sTonemapping = metaData.scriptClass->getField("Tonemapping");
  182. sWhiteBalance = metaData.scriptClass->getField("WhiteBalance");
  183. sColorGrading = metaData.scriptClass->getField("ColorGrading");
  184. sExposureScale = metaData.scriptClass->getField("ExposureScale");
  185. sGamma = metaData.scriptClass->getField("Gamma");
  186. sEnableHDR = metaData.scriptClass->getField("EnableHDR");
  187. sEnableLighting = metaData.scriptClass->getField("EnableLighting");
  188. sEnableShadows = metaData.scriptClass->getField("EnableShadows");
  189. sOverlayOnly = metaData.scriptClass->getField("OverlayOnly");
  190. }
  191. SPtr<RenderSettings> ScriptRenderSettings::toNative(MonoObject* object)
  192. {
  193. SPtr<RenderSettings> output = bs_shared_ptr_new<RenderSettings>();
  194. sEnableAutoExposure->get(object, &output->enableAutoExposure);
  195. sEnableTonemapping->get(object, &output->enableTonemapping);
  196. sExposureScale->get(object, &output->exposureScale);
  197. sGamma->get(object, &output->gamma);
  198. sEnableHDR->get(object, &output->enableHDR);
  199. sEnableLighting->get(object, &output->enableLighting);
  200. sEnableShadows->get(object, &output->enableShadows);
  201. sOverlayOnly->get(object, &output->overlayOnly);
  202. MonoObject* autoExposureMono;
  203. sAutoExposure->get(object, &autoExposureMono);
  204. output->autoExposure = *ScriptAutoExposureSettings::toNative(autoExposureMono);
  205. MonoObject* tonemappingMono;
  206. sTonemapping->get(object, &tonemappingMono);
  207. output->tonemapping = *ScriptTonemappingSettings::toNative(tonemappingMono);
  208. MonoObject* whiteBalanceMono;
  209. sWhiteBalance->get(object, &whiteBalanceMono);
  210. output->whiteBalance = *ScriptWhiteBalanceSettings::toNative(whiteBalanceMono);
  211. MonoObject* colorGradingMono;
  212. sColorGrading->get(object, &colorGradingMono);
  213. output->colorGrading = *ScriptColorGradingSettings::toNative(colorGradingMono);
  214. return output;
  215. }
  216. MonoObject* ScriptRenderSettings::toManaged(const SPtr<RenderSettings>& value)
  217. {
  218. MonoObject* object = metaData.scriptClass->createInstance();
  219. sEnableAutoExposure->set(object, &value->enableAutoExposure);
  220. sEnableTonemapping->set(object, &value->enableTonemapping);
  221. sExposureScale->set(object, &value->exposureScale);
  222. sGamma->set(object, &value->gamma);
  223. sEnableHDR->set(object, &value->enableHDR);
  224. sEnableLighting->set(object, &value->enableLighting);
  225. sEnableShadows->set(object, &value->enableShadows);
  226. sOverlayOnly->set(object, &value->overlayOnly);
  227. MonoObject* autoExposureMono = ScriptAutoExposureSettings::toManaged(value->autoExposure);
  228. sAutoExposure->set(object, autoExposureMono);
  229. MonoObject* tonemappingMono = ScriptTonemappingSettings::toManaged(value->tonemapping);
  230. sTonemapping->set(object, tonemappingMono);
  231. MonoObject* whiteBalanceMono = ScriptWhiteBalanceSettings::toManaged(value->whiteBalance);
  232. sWhiteBalance->set(object, whiteBalanceMono);
  233. MonoObject* colorGradingMono = ScriptColorGradingSettings::toManaged(value->colorGrading);
  234. sColorGrading->set(object, colorGradingMono);
  235. return object;
  236. }
  237. MonoObject* ScriptRenderSettings::internal_CreateDefault()
  238. {
  239. return toManaged(bs_shared_ptr_new<RenderSettings>());
  240. }
  241. }