浏览代码

Merge pull request #463 from GoaLitiuM/test-windowless

test: Update Windows test application for windowless contexts
Jim 10 年之前
父节点
当前提交
4aef24a431
共有 1 个文件被更改,包括 30 次插入6 次删除
  1. 30 6
      test/win/test.cpp

+ 30 - 6
test/win/test.cpp

@@ -36,6 +36,17 @@ public:
 
 /* --------------------------------------------------- */
 
+class DisplayContext {
+	obs_display_t *display;
+
+public:
+	inline DisplayContext(obs_display_t *display) : display(display) {}
+	inline ~DisplayContext() {obs_display_destroy(display);}
+	inline operator obs_display_t*() {return display;}
+};
+
+/* --------------------------------------------------- */
+
 static LRESULT CALLBACK sceneProc(HWND hwnd, UINT message, WPARAM wParam,
 		LPARAM lParam)
 {
@@ -60,7 +71,7 @@ static void do_log(int log_level, const char *msg, va_list args, void *param)
 	OutputDebugStringA(bla);
 	OutputDebugStringA("\n");
 
-	if (log_level <= LOG_WARNING)
+	if (log_level < LOG_WARNING)
 		__debugbreak();
 
 	UNUSED_PARAMETER(param);
@@ -81,17 +92,29 @@ static void CreateOBS(HWND hwnd)
 	ovi.fps_num         = 30000;
 	ovi.fps_den         = 1001;
 	ovi.graphics_module = DL_OPENGL;
-	ovi.window_width    = rc.right;
-	ovi.window_height   = rc.bottom;
 	ovi.output_format   = VIDEO_FORMAT_RGBA;
 	ovi.output_width    = rc.right;
 	ovi.output_height   = rc.bottom;
-	ovi.window.hwnd     = hwnd;
 
 	if (obs_reset_video(&ovi) != 0)
 		throw "Couldn't initialize video";
 }
 
+static DisplayContext CreateDisplay(HWND hwnd)
+{
+	RECT rc;
+	GetClientRect(hwnd, &rc);
+
+	gs_init_data info = {};
+	info.cx = rc.right;
+	info.cy = rc.bottom;
+	info.format = GS_RGBA;
+	info.zsformat = GS_ZS_NONE;
+	info.window.hwnd = hwnd;
+
+	return obs_display_create(&info);
+}
+
 static void AddTestItems(obs_scene_t *scene, obs_source_t *source)
 {
 	obs_sceneitem_t *item = NULL;
@@ -184,8 +207,9 @@ int WINAPI WinMain(HINSTANCE instance, HINSTANCE prevInstance, LPSTR cmdLine,
 		obs_set_output_source(0, obs_scene_get_source(scene));
 
 		/* ------------------------------------------------------ */
-		/* set the main output render callback */
-		obs_add_draw_callback(RenderWindow, nullptr);
+		/* create display for output and set the output render callback */
+		DisplayContext display = CreateDisplay(hwnd);
+		obs_display_add_draw_callback(display, RenderWindow, nullptr);
 
 		MSG msg;
 		while (GetMessage(&msg, NULL, 0, 0)) {