/src/lipsofsuna/extension/render/ext-render.c

https://gitlab.com/xenodora/lipsofsuna · C · 223 lines · 169 code · 29 blank · 25 comment · 12 complexity · c37fd22bf6513b44bcad420f89bc9608 MD5 · raw file

  1. /* Lips of Suna
  2. * Copyright© 2007-2012 Lips of Suna development team.
  3. *
  4. * Lips of Suna is free software: you can redistribute it and/or modify
  5. * it under the terms of the GNU Lesser General Public License as
  6. * published by the Free Software Foundation, either version 3 of the
  7. * License, or (at your option) any later version.
  8. *
  9. * Lips of Suna is distributed in the hope that it will be useful,
  10. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12. * GNU Lesser General Public License for more details.
  13. *
  14. * You should have received a copy of the GNU Lesser General Public License
  15. * along with Lips of Suna. If not, see <http://www.gnu.org/licenses/>.
  16. */
  17. /**
  18. * \addtogroup LIExt Extension
  19. * @{
  20. * \addtogroup LIExtWidgets Widgets
  21. * @{
  22. */
  23. #include <lipsofsuna/render.h>
  24. #include "ext-module.h"
  25. #include "../image/module.h"
  26. static void Render_add_compositor (LIScrArgs* args)
  27. {
  28. const char* value;
  29. LIExtModule* module;
  30. if (liscr_args_geti_string (args, 0, &value))
  31. {
  32. module = liscr_script_get_userdata (args->script, LIEXT_SCRIPT_RENDER);
  33. liren_render_add_compositor (module->render, value);
  34. }
  35. }
  36. static void Render_remove_compositor (LIScrArgs* args)
  37. {
  38. const char* value;
  39. LIExtModule* module;
  40. if (liscr_args_geti_string (args, 0, &value))
  41. {
  42. module = liscr_script_get_userdata (args->script, LIEXT_SCRIPT_RENDER);
  43. liren_render_remove_compositor (module->render, value);
  44. }
  45. }
  46. static void Render_project (LIScrArgs* args)
  47. {
  48. LIMatVector value;
  49. LIMatVector result;
  50. LIExtModule* module;
  51. if (liscr_args_geti_vector (args, 0, &value))
  52. {
  53. module = liscr_script_get_userdata (args->script, LIEXT_SCRIPT_RENDER);
  54. liren_render_project (module->render, &value, &result);
  55. liscr_args_seti_vector (args, &result);
  56. }
  57. }
  58. static void Render_set_camera_far (LIScrArgs* args)
  59. {
  60. float value;
  61. LIExtModule* module;
  62. if (liscr_args_geti_float (args, 0, &value))
  63. {
  64. module = liscr_script_get_userdata (args->script, LIEXT_SCRIPT_RENDER);
  65. liren_render_set_camera_far (module->render, value);
  66. }
  67. }
  68. static void Render_set_camera_near (LIScrArgs* args)
  69. {
  70. float value;
  71. LIExtModule* module;
  72. if (liscr_args_geti_float (args, 0, &value))
  73. {
  74. module = liscr_script_get_userdata (args->script, LIEXT_SCRIPT_RENDER);
  75. liren_render_set_camera_near (module->render, value);
  76. }
  77. }
  78. static void Render_set_camera_transform (LIScrArgs* args)
  79. {
  80. LIExtModule* module;
  81. LIMatVector position;
  82. LIMatQuaternion rotation;
  83. LIMatTransform transform;
  84. if (liscr_args_geti_vector (args, 0, &position) &&
  85. liscr_args_geti_quaternion (args, 1, &rotation))
  86. {
  87. module = liscr_script_get_userdata (args->script, LIEXT_SCRIPT_RENDER);
  88. transform = limat_transform_init (position, rotation);
  89. liren_render_set_camera_transform (module->render, &transform);
  90. }
  91. }
  92. static void Render_get_anisotrophy (LIScrArgs* args)
  93. {
  94. LIExtModule* module;
  95. module = liscr_script_get_userdata (args->script, LIEXT_SCRIPT_RENDER);
  96. liscr_args_seti_int (args, liren_render_get_anisotropy (module->render));
  97. }
  98. static void Render_set_anisotrophy (LIScrArgs* args)
  99. {
  100. int value;
  101. LIExtModule* module;
  102. module = liscr_script_get_userdata (args->script, LIEXT_SCRIPT_RENDER);
  103. if (liscr_args_geti_int (args, 0, &value))
  104. {
  105. value = LIMAT_MAX (0, value);
  106. liren_render_set_anisotropy (module->render, value);
  107. }
  108. }
  109. static void Render_set_material_scheme (LIScrArgs* args)
  110. {
  111. const char* value;
  112. LIExtModule* module;
  113. module = liscr_script_get_userdata (args->script, LIEXT_SCRIPT_RENDER);
  114. if (liscr_args_geti_string (args, 0, &value))
  115. liren_render_set_material_scheme (module->render, value);
  116. else
  117. liren_render_set_material_scheme (module->render, "Default");
  118. }
  119. static void Render_set_scene_ambient (LIScrArgs* args)
  120. {
  121. int i;
  122. float value[4] = { 0.0f, 0.0f, 0.0f, 1.0f };
  123. LIExtModule* module;
  124. module = liscr_script_get_userdata (args->script, LIEXT_SCRIPT_RENDER);
  125. for (i = 0 ; i < 4 ; i++)
  126. liscr_args_geti_float (args, i, value + i);
  127. liren_render_set_scene_ambient (module->render, value);
  128. }
  129. static void Render_set_skybox (LIScrArgs* args)
  130. {
  131. const char* value;
  132. LIExtModule* module;
  133. module = liscr_script_get_userdata (args->script, LIEXT_SCRIPT_RENDER);
  134. if (liscr_args_geti_string (args, 0, &value))
  135. liren_render_set_skybox (module->render, value);
  136. else
  137. liren_render_set_skybox (module->render, NULL);
  138. }
  139. static void Render_get_stats (LIScrArgs* args)
  140. {
  141. LIExtModule* module;
  142. LIRenStats stats;
  143. module = liscr_script_get_userdata (args->script, LIEXT_SCRIPT_RENDER);
  144. liren_render_get_stats (module->render, &stats);
  145. liscr_args_set_output (args, LISCR_ARGS_OUTPUT_TABLE);
  146. liscr_args_sets_int (args, "attachment_count", stats.attachment_count);
  147. liscr_args_sets_int (args, "batch_count", stats.batch_count);
  148. liscr_args_sets_int (args, "entity_count", stats.entity_count);
  149. liscr_args_sets_int (args, "face_count", stats.face_count);
  150. liscr_args_sets_int (args, "material_count", stats.material_count);
  151. liscr_args_sets_int (args, "material_count_loaded", stats.material_count_loaded);
  152. liscr_args_sets_int (args, "mesh_count", stats.mesh_count);
  153. liscr_args_sets_int (args, "mesh_memory", stats.mesh_memory);
  154. liscr_args_sets_int (args, "skeleton_count", stats.skeleton_count);
  155. liscr_args_sets_int (args, "texture_count", stats.texture_count);
  156. liscr_args_sets_int (args, "texture_count_loaded", stats.texture_count_loaded);
  157. liscr_args_sets_int (args, "texture_memory", stats.texture_memory);
  158. }
  159. static void Render_update_texture (LIScrArgs* args)
  160. {
  161. LIExtModule* module;
  162. const char* name;
  163. LIScrData* value;
  164. LIImgImage* image;
  165. if (!liscr_args_geti_string (args, 0, &name)) {
  166. return;
  167. }
  168. if (!liscr_args_geti_data (args, 1, LIEXT_SCRIPT_IMAGE, &value)) {
  169. return;
  170. }
  171. module = liscr_script_get_userdata (args->script, LIEXT_SCRIPT_RENDER);
  172. image = liscr_data_get_data (value);
  173. liren_render_update_texture(module->render, name, image->width, image->height, image->pixels);
  174. }
  175. /*****************************************************************************/
  176. void liext_script_render (
  177. LIScrScript* self)
  178. {
  179. liscr_script_insert_cfunc (self, LIEXT_SCRIPT_RENDER, "render_add_compositor", Render_add_compositor);
  180. liscr_script_insert_cfunc (self, LIEXT_SCRIPT_RENDER, "render_remove_compositor", Render_remove_compositor);
  181. liscr_script_insert_cfunc (self, LIEXT_SCRIPT_RENDER, "render_project", Render_project);
  182. liscr_script_insert_cfunc (self, LIEXT_SCRIPT_RENDER, "render_set_camera_far", Render_set_camera_far);
  183. liscr_script_insert_cfunc (self, LIEXT_SCRIPT_RENDER, "render_set_camera_near", Render_set_camera_near);
  184. liscr_script_insert_cfunc (self, LIEXT_SCRIPT_RENDER, "render_set_camera_transform", Render_set_camera_transform);
  185. liscr_script_insert_cfunc (self, LIEXT_SCRIPT_RENDER, "render_get_anisotrophy", Render_get_anisotrophy);
  186. liscr_script_insert_cfunc (self, LIEXT_SCRIPT_RENDER, "render_set_anisotrophy", Render_set_anisotrophy);
  187. liscr_script_insert_cfunc (self, LIEXT_SCRIPT_RENDER, "render_set_material_scheme", Render_set_material_scheme);
  188. liscr_script_insert_cfunc (self, LIEXT_SCRIPT_RENDER, "render_set_scene_ambient", Render_set_scene_ambient);
  189. liscr_script_insert_cfunc (self, LIEXT_SCRIPT_RENDER, "render_set_skybox", Render_set_skybox);
  190. liscr_script_insert_cfunc (self, LIEXT_SCRIPT_RENDER, "render_get_stats", Render_get_stats);
  191. liscr_script_insert_cfunc (self, LIEXT_SCRIPT_RENDER, "render_update_texture", Render_update_texture);
  192. }
  193. /** @} */
  194. /** @} */