bela333

Untitled

Mar 2nd, 2018
255
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 4.10 KB | None | 0 0
  1. local effectPath = "F:\\obsScripts\\equiConvert.effect"
  2.  
  3. local PI = 3.14159265
  4.  
  5. function script_description()
  6.     return "A filter that can be used to transform sources into a 360° video"
  7. end
  8.  
  9. local info = {}
  10. info.id = "equi_conv"
  11. info.type = obslua.OBS_SOURCE_TYPE_FILTER
  12. info.output_flags = obslua.OBS_SOURCE_VIDEO
  13.  
  14. info.get_name = function (unused)
  15.     --obslua.UNUSED_PARAMETER(unused)
  16.     return "Equirectangular Converter"
  17. end
  18.  
  19. info.create = function(settings, context)
  20.     print("[create] Creating")
  21.     local filter = {}
  22.  
  23.     filter.context = context
  24.     obslua.obs_enter_graphics()
  25.  
  26.     print("[create] Loading file")
  27.     filter.effect = obslua.gs_effect_create_from_file(effectPath, nil)
  28.     print("[create] Loaded effect")
  29.     if(filter.effect ~= nil) then
  30.         print("[create] Effect loaded successfully!")
  31.         filter.width_param = obslua.gs_effect_get_param_by_name(filter.effect, "width")
  32.         filter.height_param = obslua.gs_effect_get_param_by_name(filter.effect, "height")
  33.         filter.x_param = obslua.gs_effect_get_param_by_name(filter.effect, "x")
  34.         filter.y_param = obslua.gs_effect_get_param_by_name(filter.effect, "y")
  35.         filter.texture_width = obslua.gs_effect_get_param_by_name(filter.effect, "texture_width")
  36.         filter.texture_height = obslua.gs_effect_get_param_by_name(filter.effect, "texture_height")
  37.     end
  38.  
  39.     obslua.obs_leave_graphics()
  40.  
  41.     if(filter.effect == nil) then
  42.         print("[create] Couldn't load effect")
  43.         info.destroy(filter)
  44.         return nil
  45.     end
  46.  
  47.     print("[create] Updating frame")
  48.     info.update(filter, settings)
  49.     print("[create] Creation done")
  50.     return filter
  51. end
  52.  
  53. info.destroy = function(data)
  54.  
  55.     if(data.effect ~= nil) then
  56.         obslua.obs_enter_graphics()
  57.         obslua.gs_effect_destroy(data.effect)
  58.         obslua.obs_leave_graphics()
  59.     end
  60.  
  61. end
  62.  
  63. info.update = function(data, settings)
  64.  
  65.     print("[update] Updating")
  66.  
  67.     data.width = obslua.obs_data_get_double(settings, "width")
  68.     data.height = obslua.obs_data_get_double(settings, "height")
  69.     data.x = obslua.obs_data_get_double(settings, "x")
  70.     data.y = obslua.obs_data_get_double(settings, "y")
  71.  
  72.     print("[update] Updating done!")
  73.  
  74. end
  75.  
  76. info.video_render = function (data, effect)
  77.     -- print("[video_render] ")
  78.  
  79.     local succ = obslua.obs_source_process_filter_begin(data.context, obslua.GS_RGBA, obslua.OBS_ALLOW_DIRECT_RENDERING)
  80.     if(not succ) then
  81.         print("[video_render] ERROR")
  82.         return
  83.     end
  84.  
  85.     local target = obslua.obs_filter_get_target(data.context)
  86.     data.texwidth = obslua.obs_source_get_base_width(target)
  87.     data.texheight = obslua.obs_source_get_base_height(target)
  88.  
  89.  
  90.     obslua.gs_effect_set_float(data.width_param, data.width)
  91.     obslua.gs_effect_set_float(data.height_param, data.height)
  92.     obslua.gs_effect_set_float(data.x_param, data.x)
  93.     obslua.gs_effect_set_float(data.y_param, data.y)
  94.     obslua.gs_effect_set_float(data.texture_width, data.texwidth)
  95.     obslua.gs_effect_set_float(data.texture_height, data.texheight)
  96.  
  97.  
  98.     obslua.obs_source_process_filter_end(data.context, data.effect, 0, 0)
  99.     --obslua.UNUSED_PARAMETER(effect)
  100. end
  101.  
  102. info.get_width = function(data)
  103.     return data.texwidth
  104. end
  105. info.get_height = function(data)
  106.     return data.texheight
  107. end
  108.  
  109. info.get_properties = function(data)
  110.     print("[get_properties] Getting properties")
  111.     props = obslua.obs_properties_create()
  112.     print("[get_properties] Created Prop Container")
  113.     obslua.obs_properties_add_float_slider(props, "width", "Width", 0, 100, 0.01)
  114.     obslua.obs_properties_add_float_slider(props, "height", "Height", 0, 100, 0.01)
  115.     obslua.obs_properties_add_float_slider(props, "x", "X Position", -100, 100, 0.01)
  116.     obslua.obs_properties_add_float_slider(props, "y", "Y Position", -100, 100, 0.01)
  117.     print("[get_properties] Added slider. DONE!")
  118.     --obslua.UNUSED_PARAMETER(data)
  119.     return props
  120. end
  121.  
  122. info.get_defaults = function (settings)
  123.     print("[get_defaults] Getting defaults.")
  124.     obslua.obs_data_set_default_double(settings, "width", 1);
  125.     obslua.obs_data_set_default_double(settings, "height", 1);
  126.     obslua.obs_data_set_default_double(settings, "x", 0);
  127.     obslua.obs_data_set_default_double(settings, "y", 0);
  128.     print("[get_defaults] Getting defaults DONE!")
  129. end
  130.  
  131. obslua.obs_register_source(info)
Advertisement
Add Comment
Please, Sign In to add comment