JSGraphics.cpp 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. // Copyright (c) 2014-2015, THUNDERBEAST GAMES LLC All rights reserved
  2. // Please see LICENSE.md in repository root for license information
  3. // https://github.com/AtomicGameEngine/AtomicGameEngine
  4. #include "JSGraphics.h"
  5. #include "JSVM.h"
  6. #include <Atomic/Graphics/Material.h>
  7. #include <Atomic/Graphics/Light.h>
  8. namespace Atomic
  9. {
  10. static int Light_SetShadowCascade(duk_context* ctx)
  11. {
  12. //CascadeParameters(float split1, float split2, float split3, float split4, float fadeStart, float biasAutoAdjust = 1.0f) :
  13. int numargs = duk_get_top(ctx);
  14. float split1;
  15. float split2;
  16. float split3;
  17. float split4;
  18. float fadeStart;
  19. float biasAutoAdjust = 1.0f;
  20. split1 = (float) duk_to_number(ctx, 0);
  21. split2 = (float) duk_to_number(ctx, 1);
  22. split3 = (float) duk_to_number(ctx, 2);
  23. split4 = (float) duk_to_number(ctx, 3);
  24. fadeStart = (float) duk_to_number(ctx, 4);
  25. if (numargs == 6)
  26. biasAutoAdjust = (float) duk_to_number(ctx, 5);
  27. CascadeParameters cparms(split1, split2, split3, split4, fadeStart, biasAutoAdjust);
  28. duk_push_this(ctx);
  29. Light* light = js_to_class_instance<Light>(ctx, -1, 0);
  30. light->SetShadowCascade(cparms);
  31. return 0;
  32. }
  33. static int Light_SetShadowBias(duk_context* ctx)
  34. {
  35. float constantBias = (float) duk_to_number(ctx, 0);
  36. float slopeScaledBias = (float) duk_to_number(ctx, 1);
  37. BiasParameters bparms(constantBias, slopeScaledBias);
  38. duk_push_this(ctx);
  39. Light* light = js_to_class_instance<Light>(ctx, -1, 0);
  40. light->SetShadowBias(bparms);
  41. return 0;
  42. }
  43. // Material
  44. static int Material_GetShaderParamaters(duk_context* ctx)
  45. {
  46. duk_push_this(ctx);
  47. Material* material = js_to_class_instance<Material>(ctx, -1, 0);
  48. const HashMap<StringHash, MaterialShaderParameter>& params = material->GetShaderParameters();
  49. duk_push_array(ctx);
  50. unsigned j = 0;
  51. for (HashMap<StringHash, MaterialShaderParameter>::ConstIterator i = params.Begin(); i != params.End(); ++i)
  52. {
  53. duk_push_object(ctx);
  54. duk_push_string(ctx, i->second_.name_.CString());
  55. duk_put_prop_string(ctx, -2, "name");
  56. js_push_variant(ctx, i->second_.value_);
  57. duk_put_prop_string(ctx, -2, "value");
  58. duk_push_string(ctx, i->second_.value_.ToString().CString());
  59. duk_put_prop_string(ctx, -2, "valueString");
  60. duk_push_string(ctx, i->second_.value_.GetTypeName().CString());
  61. duk_put_prop_string(ctx, -2, "typeName");
  62. duk_push_number(ctx, (double) i->second_.value_.GetType());
  63. duk_put_prop_string(ctx, -2, "type");
  64. duk_put_prop_index(ctx, -2, j++);
  65. }
  66. return 1;
  67. }
  68. void jsapi_init_graphics(JSVM* vm)
  69. {
  70. duk_context* ctx = vm->GetJSContext();
  71. js_class_get_prototype(ctx, "Atomic", "Light");
  72. duk_push_c_function(ctx, Light_SetShadowCascade, DUK_VARARGS);
  73. duk_put_prop_string(ctx, -2, "setShadowCascade");
  74. duk_push_c_function(ctx, Light_SetShadowBias, 2);
  75. duk_put_prop_string(ctx, -2, "setShadowBias");
  76. duk_pop(ctx);
  77. js_class_get_prototype(ctx, "Atomic", "Material");
  78. duk_push_c_function(ctx, Material_GetShaderParamaters, 0);
  79. duk_put_prop_string(ctx, -2, "getShaderParameters");
  80. duk_pop(ctx);
  81. }
  82. }