TestMode.hpp 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. #pragma once
  2. #include <graphics/math-extra.h>
  3. #include <obs.hpp>
  4. class TestMode {
  5. obs_video_info ovi;
  6. OBSSource source[6];
  7. static void render_rand(void *, uint32_t cx, uint32_t cy)
  8. {
  9. gs_effect_t *solid = obs_get_base_effect(OBS_EFFECT_SOLID);
  10. gs_eparam_t *randomvals[3] = {gs_effect_get_param_by_name(solid, "randomvals1"),
  11. gs_effect_get_param_by_name(solid, "randomvals2"),
  12. gs_effect_get_param_by_name(solid, "randomvals3")};
  13. struct vec4 r;
  14. for (int i = 0; i < 3; i++) {
  15. vec4_set(&r, rand_float(true) * 100.0f, rand_float(true) * 100.0f,
  16. rand_float(true) * 50000.0f + 10000.0f, 0.0f);
  17. gs_effect_set_vec4(randomvals[i], &r);
  18. }
  19. while (gs_effect_loop(solid, "Random"))
  20. gs_draw_sprite(nullptr, 0, cx, cy);
  21. }
  22. public:
  23. inline TestMode()
  24. {
  25. obs_get_video_info(&ovi);
  26. obs_add_main_render_callback(render_rand, this);
  27. for (uint32_t i = 0; i < 6; i++) {
  28. source[i] = obs_get_output_source(i);
  29. obs_source_release(source[i]);
  30. obs_set_output_source(i, nullptr);
  31. }
  32. }
  33. inline ~TestMode()
  34. {
  35. for (uint32_t i = 0; i < 6; i++)
  36. obs_set_output_source(i, source[i]);
  37. obs_remove_main_render_callback(render_rand, this);
  38. obs_reset_video(&ovi);
  39. }
  40. inline void SetVideo(int cx, int cy, int fps_num, int fps_den)
  41. {
  42. obs_video_info newOVI = ovi;
  43. newOVI.output_width = (uint32_t)cx;
  44. newOVI.output_height = (uint32_t)cy;
  45. newOVI.fps_num = (uint32_t)fps_num;
  46. newOVI.fps_den = (uint32_t)fps_den;
  47. obs_reset_video(&newOVI);
  48. }
  49. };