Advertisement
Guest User

Untitled

a guest
Dec 29th, 2016
1,497
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.02 KB | None | 0 0
  1. var temporary;
  2.  
  3. draw_enable_alphablend(false);
  4.  
  5. // Advect velocity.
  6. surface_set_target(sf_temporary_0);
  7. if (maccormack_amount_velocity > 0) {
  8. shader_set(sh_advect_velocity_maccormack);
  9. texture_set_stage(shader_get_sampler_index(sh_advect_velocity_maccormack, "texture_world"), surface_get_texture(sf_world));
  10. texture_set_stage(shader_get_sampler_index(sh_advect_velocity_maccormack, "texture_material"), surface_get_texture(sf_material_0));
  11. shader_set_uniform_f(shader_get_uniform(sh_advect_velocity_maccormack, "texel_size"), sf_texel_width, sf_texel_height);
  12. shader_set_uniform_f(shader_get_uniform(sh_advect_velocity_maccormack, "dissipation"), velocity_dissipation);
  13. shader_set_uniform_f(shader_get_uniform(sh_advect_velocity_maccormack, "acceleration"), 0, acceleration_y);
  14. shader_set_uniform_f(shader_get_uniform(sh_advect_velocity_maccormack, "time_step"), time_step);
  15. shader_set_uniform_f(shader_get_uniform(sh_advect_velocity_maccormack, "maccormack_amount"), maccormack_amount_velocity);
  16. shader_set_uniform_f(shader_get_uniform(sh_advect_velocity_maccormack, "mode"), mode);
  17. draw_surface(sf_velocity, 0, 0);
  18. shader_reset();
  19. } else {
  20. shader_set(sh_advect_velocity);
  21. texture_set_stage(shader_get_sampler_index(sh_advect_velocity, "texture_world"), surface_get_texture(sf_world));
  22. texture_set_stage(shader_get_sampler_index(sh_advect_velocity, "texture_material"), surface_get_texture(sf_material_0));
  23. shader_set_uniform_f(shader_get_uniform(sh_advect_velocity, "texel_size"), sf_texel_width, sf_texel_height);
  24. shader_set_uniform_f(shader_get_uniform(sh_advect_velocity, "dissipation"), velocity_dissipation);
  25. shader_set_uniform_f(shader_get_uniform(sh_advect_velocity, "acceleration"), 0, acceleration_y);
  26. shader_set_uniform_f(shader_get_uniform(sh_advect_velocity, "time_step"), time_step);
  27. draw_surface(sf_velocity, 0, 0);
  28. shader_reset();
  29. }
  30. surface_reset_target();
  31. temporary = sf_velocity; sf_velocity = sf_temporary_0; sf_temporary_0 = temporary;
  32.  
  33. // Calculates divergence of velocity.
  34. surface_set_target(sf_temporary_0);
  35. shader_set(sh_calculate_divergence);
  36. shader_set_uniform_f(shader_get_uniform(sh_calculate_divergence, "texel_size"), sf_texel_width, sf_texel_height);
  37. draw_surface(sf_velocity, 0, 0);
  38. shader_reset();
  39. surface_reset_target();
  40. temporary = sf_divergence; sf_divergence = sf_temporary_0; sf_temporary_0 = temporary;
  41.  
  42. // Clears pressure.
  43. surface_set_target(sf_pressure);
  44. draw_clear_alpha($0000C0, 0);
  45. surface_reset_target();
  46.  
  47. // Calculates pressure with jacobi iteration.
  48. shader_set(sh_calculate_pressure);
  49. texture_set_stage(shader_get_sampler_index(sh_calculate_pressure, "texture_divergence"), surface_get_texture(sf_divergence));
  50. shader_set_uniform_f(shader_get_uniform(sh_calculate_pressure, "texel_size"), sf_texel_width, sf_texel_height);
  51. repeat (pressure_jacobi_iterations) {
  52. surface_set_target(sf_temporary_0);
  53. draw_surface(sf_pressure, 0, 0);
  54. surface_reset_target();
  55. temporary = sf_pressure; sf_pressure = sf_temporary_0; sf_temporary_0 = temporary;
  56. }
  57. shader_reset();
  58.  
  59. // Calculates the gradient of pressure and subtracts it from the velocity.
  60. surface_set_target(sf_temporary_0);
  61. shader_set(sh_subtract_pressure_gradient);
  62. texture_set_stage(shader_get_sampler_index(sh_subtract_pressure_gradient, "texture_pressure"), surface_get_texture(sf_pressure));
  63. shader_set_uniform_f(shader_get_uniform(sh_subtract_pressure_gradient, "texel_size"), sf_texel_width, sf_texel_height);
  64. draw_surface(sf_velocity, 0, 0);
  65. shader_reset();
  66. surface_reset_target();
  67. temporary = sf_velocity; sf_velocity = sf_temporary_0; sf_temporary_0 = temporary;
  68.  
  69. // Advects material.
  70. if (mode == 2) {
  71. surface_set_target_ext(0, sf_temporary_0);
  72. surface_set_target_ext(1, sf_temporary_1);
  73. shader_set(sh_advect_material_smoke);
  74. texture_set_stage(shader_get_sampler_index(sh_advect_material_smoke, "texture_material_1"), surface_get_texture(sf_material_1));
  75. texture_set_stage(shader_get_sampler_index(sh_advect_material_smoke, "texture_velocity"), surface_get_texture(sf_velocity));
  76. texture_set_stage(shader_get_sampler_index(sh_advect_material_smoke, "texture_world"), surface_get_texture(sf_world));
  77. shader_set_uniform_f(shader_get_uniform(sh_advect_material_smoke, "texel_size"), sf_texel_width, sf_texel_height);
  78. shader_set_uniform_f(shader_get_uniform(sh_advect_material_smoke, "dissipation"), material_dissipation);
  79. shader_set_uniform_f(shader_get_uniform(sh_advect_material_smoke, "time_step"), time_step);
  80. shader_set_uniform_f(shader_get_uniform(sh_advect_material_smoke, "maccormack_amount"), maccormack_amount_material);
  81. draw_surface(sf_material_0, 0, 0);
  82. shader_reset();
  83. surface_reset_target();
  84. temporary = sf_material_0; sf_material_0 = sf_temporary_0; sf_temporary_0 = temporary;
  85. temporary = sf_material_1; sf_material_1 = sf_temporary_1; sf_temporary_1 = temporary;
  86. } else {
  87. surface_set_target_ext(0, sf_temporary_0);
  88. surface_set_target_ext(1, sf_temporary_1);
  89. if (maccormack_amount_material > 0) {
  90. shader_set(sh_advect_material_maccormack);
  91. texture_set_stage(shader_get_sampler_index(sh_advect_material_maccormack, "texture_material_1"), surface_get_texture(sf_material_1));
  92. texture_set_stage(shader_get_sampler_index(sh_advect_material_maccormack, "texture_velocity"), surface_get_texture(sf_velocity));
  93. texture_set_stage(shader_get_sampler_index(sh_advect_material_maccormack, "texture_world"), surface_get_texture(sf_world));
  94. shader_set_uniform_f(shader_get_uniform(sh_advect_material_maccormack, "texel_size"), sf_texel_width, sf_texel_height);
  95. shader_set_uniform_f(shader_get_uniform(sh_advect_material_maccormack, "dissipation"), material_dissipation);
  96. shader_set_uniform_f(shader_get_uniform(sh_advect_material_maccormack, "time_step"), time_step);
  97. shader_set_uniform_f(shader_get_uniform(sh_advect_material_maccormack, "maccormack_amount"), maccormack_amount_material);
  98. draw_surface(sf_material_0, 0, 0);
  99. shader_reset();
  100. } else {
  101. shader_set(sh_advect_material);
  102. texture_set_stage(shader_get_sampler_index(sh_advect_material, "texture_material_1"), surface_get_texture(sf_material_1));
  103. texture_set_stage(shader_get_sampler_index(sh_advect_material, "texture_velocity"), surface_get_texture(sf_velocity));
  104. texture_set_stage(shader_get_sampler_index(sh_advect_material, "texture_world"), surface_get_texture(sf_world));
  105. shader_set_uniform_f(shader_get_uniform(sh_advect_material, "texel_size"), sf_texel_width, sf_texel_height);
  106. shader_set_uniform_f(shader_get_uniform(sh_advect_material, "dissipation"), material_dissipation);
  107. shader_set_uniform_f(shader_get_uniform(sh_advect_material, "time_step"), time_step);
  108. draw_surface(sf_material_0, 0, 0);
  109. shader_reset();
  110. }
  111. surface_reset_target();
  112. temporary = sf_material_0; sf_material_0 = sf_temporary_0; sf_temporary_0 = temporary;
  113. temporary = sf_material_1; sf_material_1 = sf_temporary_1; sf_temporary_1 = temporary;
  114. }
  115.  
  116. draw_enable_alphablend(true);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement