WebGLContextAttributes.cpp 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. /*
  2. * Copyright (c) 2022, Luke Wilde <lukew@serenityos.org>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #include <LibJS/Runtime/Completion.h>
  7. #include <LibJS/Runtime/GlobalObject.h>
  8. #include <LibJS/Runtime/ValueInlines.h>
  9. #include <LibWeb/WebGL/WebGLContextAttributes.h>
  10. namespace Web::WebGL {
  11. JS::ThrowCompletionOr<WebGLContextAttributes> convert_value_to_context_attributes_dictionary(JS::VM& vm, JS::Value value)
  12. {
  13. // NOTE: This code was generated by the IDL code generator and then cleaned up.
  14. if (!value.is_nullish() && !value.is_object())
  15. return vm.throw_completion<JS::TypeError>(JS::ErrorType::NotAnObjectOfType, "WebGLContextAttributes");
  16. WebGLContextAttributes context_attributes {};
  17. JS::Value alpha;
  18. if (value.is_nullish())
  19. alpha = JS::js_undefined();
  20. else
  21. alpha = TRY(value.as_object().get("alpha"));
  22. bool alpha_value;
  23. if (!alpha.is_undefined())
  24. alpha_value = alpha.to_boolean();
  25. else
  26. alpha_value = true;
  27. context_attributes.alpha = alpha_value;
  28. JS::Value antialias;
  29. if (value.is_nullish())
  30. antialias = JS::js_undefined();
  31. else
  32. antialias = TRY(value.as_object().get("antialias"));
  33. bool antialias_value;
  34. if (!antialias.is_undefined())
  35. antialias_value = antialias.to_boolean();
  36. else
  37. antialias_value = true;
  38. context_attributes.antialias = antialias_value;
  39. JS::Value depth;
  40. if (value.is_nullish())
  41. depth = JS::js_undefined();
  42. else
  43. depth = TRY(value.as_object().get("depth"));
  44. bool depth_value;
  45. if (!depth.is_undefined())
  46. depth_value = depth.to_boolean();
  47. else
  48. depth_value = true;
  49. context_attributes.depth = depth_value;
  50. JS::Value desynchronized;
  51. if (value.is_nullish())
  52. desynchronized = JS::js_undefined();
  53. else
  54. desynchronized = TRY(value.as_object().get("desynchronized"));
  55. bool desynchronized_value;
  56. if (!desynchronized.is_undefined())
  57. desynchronized_value = desynchronized.to_boolean();
  58. else
  59. desynchronized_value = false;
  60. context_attributes.desynchronized = desynchronized_value;
  61. JS::Value fail_if_major_performance_caveat;
  62. if (value.is_nullish())
  63. fail_if_major_performance_caveat = JS::js_undefined();
  64. else
  65. fail_if_major_performance_caveat = TRY(value.as_object().get("failIfMajorPerformanceCaveat"));
  66. bool fail_if_major_performance_caveat_value;
  67. if (!fail_if_major_performance_caveat.is_undefined())
  68. fail_if_major_performance_caveat_value = fail_if_major_performance_caveat.to_boolean();
  69. else
  70. fail_if_major_performance_caveat_value = false;
  71. context_attributes.fail_if_major_performance_caveat = fail_if_major_performance_caveat_value;
  72. JS::Value power_preference;
  73. if (value.is_nullish())
  74. power_preference = JS::js_undefined();
  75. else
  76. power_preference = TRY(value.as_object().get("powerPreference"));
  77. WebGLPowerPreference power_preference_value { WebGLPowerPreference::Default };
  78. if (!power_preference.is_undefined()) {
  79. auto power_preference_string = TRY(power_preference.to_byte_string(vm));
  80. if (power_preference_string == "high-performance"sv)
  81. power_preference_value = WebGLPowerPreference::HighPerformance;
  82. else if (power_preference_string == "low-power"sv)
  83. power_preference_value = WebGLPowerPreference::LowPower;
  84. else if (power_preference_string == "default"sv)
  85. power_preference_value = WebGLPowerPreference::Default;
  86. else
  87. return vm.throw_completion<JS::TypeError>(JS::ErrorType::InvalidEnumerationValue, power_preference_string, "WebGLPowerPreference");
  88. }
  89. context_attributes.power_preference = power_preference_value;
  90. JS::Value premultiplied_alpha;
  91. if (value.is_nullish())
  92. premultiplied_alpha = JS::js_undefined();
  93. else
  94. premultiplied_alpha = TRY(value.as_object().get("premultipliedAlpha"));
  95. bool premultiplied_alpha_value;
  96. if (!premultiplied_alpha.is_undefined())
  97. premultiplied_alpha_value = premultiplied_alpha.to_boolean();
  98. else
  99. premultiplied_alpha_value = true;
  100. context_attributes.premultiplied_alpha = premultiplied_alpha_value;
  101. JS::Value preserve_drawing_buffer;
  102. if (value.is_nullish())
  103. preserve_drawing_buffer = JS::js_undefined();
  104. else
  105. preserve_drawing_buffer = TRY(value.as_object().get("preserveDrawingBuffer"));
  106. bool preserve_drawing_buffer_value;
  107. if (!preserve_drawing_buffer.is_undefined())
  108. preserve_drawing_buffer_value = preserve_drawing_buffer.to_boolean();
  109. else
  110. preserve_drawing_buffer_value = false;
  111. context_attributes.preserve_drawing_buffer = preserve_drawing_buffer_value;
  112. JS::Value stencil;
  113. if (value.is_nullish())
  114. stencil = JS::js_undefined();
  115. else
  116. stencil = TRY(value.as_object().get("stencil"));
  117. bool stencil_value;
  118. if (!stencil.is_undefined())
  119. stencil_value = stencil.to_boolean();
  120. else
  121. stencil_value = false;
  122. context_attributes.stencil = stencil_value;
  123. return context_attributes;
  124. }
  125. }