BsScriptPostProcessSettings.cpp 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #include "BsScriptPostProcessSettings.h"
  4. #include "BsMonoManager.h"
  5. #include "BsMonoAssembly.h"
  6. #include "BsMonoClass.h"
  7. #include "BsMonoUtil.h"
  8. #include "BsCoreThread.h"
  9. #include "BsStandardPostProcessSettings.h"
  10. namespace BansheeEngine
  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->getValue(object, &output->histogramLog2Min);
  38. sHistogramLog2Max->getValue(object, &output->histogramLog2Max);
  39. sHistogramPctLow->getValue(object, &output->histogramPctLow);
  40. sHistogramPctHigh->getValue(object, &output->histogramPctHigh);
  41. sMinEyeAdaptation->getValue(object, &output->minEyeAdaptation);
  42. sMaxEyeAdaptation->getValue(object, &output->maxEyeAdaptation);
  43. sEyeAdaptationSpeedUp->getValue(object, &output->eyeAdaptationSpeedUp);
  44. sEyeAdaptationSpeedDown->getValue(object, &output->eyeAdaptationSpeedDown);
  45. return output;
  46. }
  47. MonoObject* ScriptAutoExposureSettings::toManaged(AutoExposureSettings& value)
  48. {
  49. MonoObject* object = metaData.scriptClass->createInstance();
  50. sHistogramLog2Min->setValue(object, &value.histogramLog2Min);
  51. sHistogramLog2Max->setValue(object, &value.histogramLog2Max);
  52. sHistogramPctLow->setValue(object, &value.histogramPctLow);
  53. sHistogramPctHigh->setValue(object, &value.histogramPctHigh);
  54. sMinEyeAdaptation->setValue(object, &value.minEyeAdaptation);
  55. sMaxEyeAdaptation->setValue(object, &value.maxEyeAdaptation);
  56. sEyeAdaptationSpeedUp->setValue(object, &value.eyeAdaptationSpeedUp);
  57. sEyeAdaptationSpeedDown->setValue(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->getValue(object, &output->filmicCurveShoulderStrength);
  84. sFilmicCurveLinearStrength->getValue(object, &output->filmicCurveLinearStrength);
  85. sFilmicCurveLinearAngle->getValue(object, &output->filmicCurveLinearAngle);
  86. sFilmicCurveToeStrength->getValue(object, &output->filmicCurveToeStrength);
  87. sFilmicCurveToeNumerator->getValue(object, &output->filmicCurveToeNumerator);
  88. sFilmicCurveToeDenominator->getValue(object, &output->filmicCurveToeDenominator);
  89. sFilmicCurveLinearWhitePoint->getValue(object, &output->filmicCurveLinearWhitePoint);
  90. return output;
  91. }
  92. MonoObject* ScriptTonemappingSettings::toManaged(TonemappingSettings& value)
  93. {
  94. MonoObject* object = metaData.scriptClass->createInstance();
  95. sFilmicCurveShoulderStrength->setValue(object, &value.filmicCurveShoulderStrength);
  96. sFilmicCurveLinearStrength->setValue(object, &value.filmicCurveLinearStrength);
  97. sFilmicCurveLinearAngle->setValue(object, &value.filmicCurveLinearAngle);
  98. sFilmicCurveToeStrength->setValue(object, &value.filmicCurveToeStrength);
  99. sFilmicCurveToeNumerator->setValue(object, &value.filmicCurveToeNumerator);
  100. sFilmicCurveToeDenominator->setValue(object, &value.filmicCurveToeDenominator);
  101. sFilmicCurveLinearWhitePoint->setValue(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->getValue(object, &output->temperature);
  118. sTint->getValue(object, &output->tint);
  119. return output;
  120. }
  121. MonoObject* ScriptWhiteBalanceSettings::toManaged(WhiteBalanceSettings& value)
  122. {
  123. MonoObject* object = metaData.scriptClass->createInstance();
  124. sTemperature->setValue(object, &value.temperature);
  125. sTint->setValue(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->getValue(object, &output->saturation);
  146. sContrast->getValue(object, &output->contrast);
  147. sGain->getValue(object, &output->gain);
  148. sOffset->getValue(object, &output->offset);
  149. return output;
  150. }
  151. MonoObject* ScriptColorGradingSettings::toManaged(ColorGradingSettings& value)
  152. {
  153. MonoObject* object = metaData.scriptClass->createInstance();
  154. sSaturation->setValue(object, &value.saturation);
  155. sContrast->setValue(object, &value.contrast);
  156. sGain->setValue(object, &value.gain);
  157. sOffset->setValue(object, &value.offset);
  158. return object;
  159. }
  160. MonoField* ScriptPostProcessSettings::sEnableAutoExposure = nullptr;
  161. MonoField* ScriptPostProcessSettings::sAutoExposure = nullptr;
  162. MonoField* ScriptPostProcessSettings::sEnableTonemapping = nullptr;
  163. MonoField* ScriptPostProcessSettings::sTonemapping = nullptr;
  164. MonoField* ScriptPostProcessSettings::sWhiteBalance = nullptr;
  165. MonoField* ScriptPostProcessSettings::sColorGrading = nullptr;
  166. MonoField* ScriptPostProcessSettings::sExposureScale = nullptr;
  167. MonoField* ScriptPostProcessSettings::sGamma = nullptr;
  168. ScriptPostProcessSettings::ScriptPostProcessSettings(MonoObject* instance)
  169. :ScriptObject(instance)
  170. { }
  171. void ScriptPostProcessSettings::initRuntimeData()
  172. {
  173. metaData.scriptClass->addInternalCall("Internal_CreateDefault", &ScriptPostProcessSettings::internal_CreateDefault);
  174. sEnableAutoExposure = metaData.scriptClass->getField("EnableAutoExposure");
  175. sAutoExposure = metaData.scriptClass->getField("AutoExposure");
  176. sEnableTonemapping = metaData.scriptClass->getField("EnableTonemapping");
  177. sTonemapping = metaData.scriptClass->getField("Tonemapping");
  178. sWhiteBalance = metaData.scriptClass->getField("WhiteBalance");
  179. sColorGrading = metaData.scriptClass->getField("ColorGrading");
  180. sExposureScale = metaData.scriptClass->getField("ExposureScale");
  181. sGamma = metaData.scriptClass->getField("Gamma");
  182. }
  183. SPtr<StandardPostProcessSettings> ScriptPostProcessSettings::toNative(MonoObject* object)
  184. {
  185. SPtr<StandardPostProcessSettings> output = bs_shared_ptr_new<StandardPostProcessSettings>();
  186. sEnableAutoExposure->getValue(object, &output->enableAutoExposure);
  187. sEnableTonemapping->getValue(object, &output->enableTonemapping);
  188. sExposureScale->getValue(object, &output->exposureScale);
  189. sGamma->getValue(object, &output->gamma);
  190. MonoObject* autoExposureMono;
  191. sAutoExposure->getValue(object, &autoExposureMono);
  192. output->autoExposure = *ScriptAutoExposureSettings::toNative(autoExposureMono);
  193. MonoObject* tonemappingMono;
  194. sTonemapping->getValue(object, &tonemappingMono);
  195. output->tonemapping = *ScriptTonemappingSettings::toNative(tonemappingMono);
  196. MonoObject* whiteBalanceMono;
  197. sWhiteBalance->getValue(object, &whiteBalanceMono);
  198. output->whiteBalance = *ScriptWhiteBalanceSettings::toNative(whiteBalanceMono);
  199. MonoObject* colorGradingMono;
  200. sColorGrading->getValue(object, &colorGradingMono);
  201. output->colorGrading = *ScriptColorGradingSettings::toNative(colorGradingMono);
  202. return output;
  203. }
  204. MonoObject* ScriptPostProcessSettings::toManaged(const SPtr<StandardPostProcessSettings>& value)
  205. {
  206. MonoObject* object = metaData.scriptClass->createInstance();
  207. sEnableAutoExposure->setValue(object, &value->enableAutoExposure);
  208. sEnableTonemapping->setValue(object, &value->enableTonemapping);
  209. sExposureScale->setValue(object, &value->exposureScale);
  210. sGamma->setValue(object, &value->gamma);
  211. MonoObject* autoExposureMono = ScriptAutoExposureSettings::toManaged(value->autoExposure);
  212. sAutoExposure->setValue(object, autoExposureMono);
  213. MonoObject* tonemappingMono = ScriptTonemappingSettings::toManaged(value->tonemapping);
  214. sTonemapping->setValue(object, tonemappingMono);
  215. MonoObject* whiteBalanceMono = ScriptWhiteBalanceSettings::toManaged(value->whiteBalance);
  216. sWhiteBalance->setValue(object, whiteBalanceMono);
  217. MonoObject* colorGradingMono = ScriptColorGradingSettings::toManaged(value->colorGrading);
  218. sColorGrading->setValue(object, colorGradingMono);
  219. return object;
  220. }
  221. MonoObject* ScriptPostProcessSettings::internal_CreateDefault()
  222. {
  223. return toManaged(bs_shared_ptr_new<StandardPostProcessSettings>());
  224. }
  225. }