示例#1
0
文件: window.c 项目: je-so/js-projekt
static int init_test_window(/*out*/window_t * win, /*out*/EGLContext * eglcontext, display_t * disp, window_evh_t * evhandler)
{
   gconfig_t gconf      = gconfig_FREE;
   int32_t   surfattr[] = {
                  gconfig_BITS_BUFFER, 32, gconfig_BITS_ALPHA, 1,
                  gconfig_TYPE, gconfig_value_TYPE_WINDOW_BIT,
                  gconfig_NONE
             };
   windowconfig_t winattr[] = {
                     windowconfig_INIT_POS(WINPOS_INIT_X, WINPOS_INIT_Y),
                     windowconfig_INIT_SIZE(100, 100),
                     windowconfig_INIT_FRAME,
                     windowconfig_INIT_NONE
                  };

   TEST(0 == init_gconfig(&gconf, disp, surfattr));
   TEST(0 == init_window(win, disp, defaultscreennr_display(disp), evhandler, &gconf, winattr));
   *eglcontext = eglCreateContext(gl_display(disp), gl_gconfig(&gconf), EGL_NO_CONTEXT, (EGLint[]){EGL_CONTEXT_CLIENT_VERSION, 2, EGL_NONE});
   TEST(EGL_NO_CONTEXT != *eglcontext);
   TEST(EGL_TRUE == eglMakeCurrent(gl_display(disp), (void*)gl_window(win), (void*)gl_window(win), *eglcontext));

   return 0;
ONERR:
   (void) free_gconfig(&gconf);
   return EINVAL;
}
示例#2
0
int main()
{
    GlWindow gl_window("depthgl", 320, 240);

    Camera camera;
    camera.frame_received.connect(
            [&](cv::Mat image){ gl_window.update_image(image); });

    std::thread gl_window_thread(&GlWindow::run, &gl_window);
    std::thread camera_thread(&Camera::run, &camera);
    gl_window_thread.join();
    camera_thread.join();

    return 0;
}
示例#3
0
文件: window.c 项目: je-so/js-projekt
int free_window(window_t * win)
{
   int err;
   int err2;

   if (0 != display_window(win)) {
      err  = FREE_GLWINDOW(&gl_window(win), display_window(win));
      (void) PROCESS_testerrortimer(&s_window_errtimer, &err);

      err2 = FREE_OSWINDOW(os_window(win));
      (void) PROCESS_testerrortimer(&s_window_errtimer, &err2);
      if (err2) err = err2;

      if (err) goto ONERR;
   }

   return 0;
ONERR:
   TRACEEXITFREE_ERRLOG(err);
   return err;
}
示例#4
0
文件: window.c 项目: je-so/js-projekt
int init_window(
      /*out*/window_t       * win,
      display_t             * disp,
      uint32_t                screennr,
      const
      struct window_evh_t   * eventhandler,
      gconfig_t             * gconf,
      struct windowconfig_t * winattr)
{
   int      err;
   int      isinit = 0;
   int32_t  visualid;

   static_assert(win == (void*)&win->oswindow, "window_t is subtype of oswindow type");

   if (! PROCESS_testerrortimer(&s_window_errtimer, &err)) {
      err = visualid_gconfig(gconf, disp, &visualid);
   }
   if (err) goto ONERR;

   err = INIT_OSWINDOW(os_window(win), disp, screennr, eventhandler, visualid, winattr);
   if (err) goto ONERR;
   ++ isinit;

   if (! PROCESS_testerrortimer(&s_window_errtimer, &err)) {
      err = INIT_GLWINDOW(&gl_window(win), disp, gconf, os_window(win));
   }
   if (err) goto ONERR;

   return 0;
ONERR:
   if (isinit) {
      FREE_OSWINDOW(&win->oswindow);
   }
   return err;
}
示例#5
0
文件: window.c 项目: je-so/js-projekt
static int test_initfree(display_t * disp)
{
   window_t    win   = window_FREE;
   gconfig_t   gconf = gconfig_FREE;
   int32_t     surfattr[4][7] = {
         { gconfig_TYPE, gconfig_value_TYPE_WINDOW_BIT, gconfig_BITS_RED, 8, gconfig_NONE },
         { gconfig_TYPE, gconfig_value_TYPE_WINDOW_BIT, gconfig_BITS_ALPHA, 1, gconfig_BITS_STENCIL, 1, gconfig_NONE },
         { gconfig_TYPE, gconfig_value_TYPE_WINDOW_BIT, gconfig_BITS_BUFFER, 24, gconfig_BITS_DEPTH, 1, gconfig_NONE },
         { gconfig_TYPE, gconfig_value_TYPE_WINDOW_BIT, gconfig_CONFORMANT, gconfig_value_CONFORMANT_ES2_BIT|gconfig_value_CONFORMANT_OPENGL_BIT, gconfig_NONE },
   };
   windowconfig_t winattr[] = {
         windowconfig_INIT_FRAME, windowconfig_INIT_TRANSPARENCY(255), windowconfig_INIT_TITLE("name"),
         windowconfig_INIT_MINSIZE(10,10), windowconfig_INIT_MAXSIZE(1000,1000),
         windowconfig_INIT_SIZE(1000,1000), windowconfig_INIT_POS(333,444), windowconfig_INIT_NONE
   };

   // TEST window_FREE
   TEST(1 == isfree_helper(&win));
   TEST(1 == ISFREE_OSWINDOW(&win.oswindow));

   for (unsigned i = 0; i < lengthof(surfattr); ++i) {
      TEST(0 == init_gconfig(&gconf, disp, surfattr[i]));

      // TEST init_window
      TEST(0 == init_window(&win, disp, defaultscreennr_display(disp), 0, &gconf, winattr));
      TEST(0 != gl_window(&win));

      // TEST free_window
      TEST(0 == free_window(&win));
      TEST(1 == isfree_helper(&win));
      TEST(1 == ISFREE_OSWINDOW(&win.oswindow));
      TEST(0 == free_window(&win));
      TEST(1 == isfree_helper(&win));
      TEST(1 == ISFREE_OSWINDOW(&win.oswindow));

      TEST(0 == free_gconfig(&gconf));
   }

   // prepare
   TEST(0 == init_gconfig(&gconf, disp, surfattr[0]));

   // TEST init_window: E2BIG
   windowconfig_t winattr2big[3*windowconfig__NROF+2];
   for (unsigned i = 0; i < lengthof(winattr2big)-1; ++i) {
      winattr2big[i] = (windowconfig_t)windowconfig_INIT_FRAME;
   }
   winattr2big[lengthof(winattr2big)-1] = (windowconfig_t) windowconfig_INIT_NONE;
   TEST(E2BIG == init_window(&win, disp, defaultscreennr_display(disp), 0, &gconf, winattr2big));
   TEST(0 == free_window(&win));
   TEST(1 == isfree_helper(&win));

   // TEST init_window: ERROR
   for (unsigned i = 1; i <= 2; ++i) {
      init_testerrortimer(&s_window_errtimer, i, ENOMEM);
      TEST(ENOMEM == init_window(&win, disp, defaultscreennr_display(disp), 0, &gconf, winattr));
      TEST(0 == free_window(&win));
      TEST(1 == isfree_helper(&win));
   }

   // TEST free_window: ERROR
   for (unsigned i = 1; i <= 2; ++i) {
      TEST(0 == init_window(&win, disp, defaultscreennr_display(disp), 0, &gconf, winattr));
      init_testerrortimer(&s_window_errtimer, i, ENOMEM);
      TEST(ENOMEM == free_window(&win));
      TEST(0 == free_window(&win));
      TEST(1 == isfree_helper(&win));
   }

   // unprepare
   TEST(0 == free_gconfig(&gconf));

   return 0;
ONERR:
   (void) free_gconfig(&gconf);
   (void) free_window(&win);
   return EINVAL;
}
示例#6
0
文件: window.c 项目: je-so/js-projekt
static int test_transparentalpha(display_t * disp)
{
   int32_t           surfattr[] = {
                        gconfig_TRANSPARENT_ALPHA, 1,
                        gconfig_BITS_BUFFER, 32, gconfig_NONE
                     };
   windowconfig_t    winattr[]  = {
                        windowconfig_INIT_TITLE("test-graphic-window"),
                        windowconfig_INIT_SIZE(100, 100),
                        windowconfig_INIT_POS(50, 100),
                        windowconfig_INIT_NONE
                     };
   window_t    top      = window_FREE;
   window_t    bottom   = window_FREE;
   gconfig_t   gconf = gconfig_FREE;
   uint32_t    snr      = defaultscreennr_display(disp);
   EGLContext  eglcontext = EGL_NO_CONTEXT;

   // prepare
   TEST(0 == init_gconfig(&gconf, disp, surfattr));
   eglcontext = eglCreateContext(gl_display(disp), gl_gconfig(&gconf), EGL_NO_CONTEXT, 0);
   TEST(EGL_NO_CONTEXT != eglcontext);

   // TEST init_window: gconfig_TRANSPARENT_ALPHA: draw overlay on top of bottom
   TEST(0 == init_window(&top, disp, snr, 0, &gconf, winattr));
   TEST(0 == init_window(&bottom, disp, snr, 0, &gconf, winattr));

   // TEST swapbuffer_window: bottom window opaque color
   TEST(0 == show_x11window(os_window(&bottom)));
   WAITFOR(disp, os_window(&bottom)->state == x11window_state_SHOWN);
   TEST(EGL_TRUE == eglMakeCurrent(gl_display(disp), (void*)gl_window(&bottom), (void*)gl_window(&bottom), eglcontext));
   glClearColor(1, 0, 0, 1);
   glClear(GL_COLOR_BUFFER_BIT);
   TEST(0 == swapbuffer_window(&bottom, disp));
   eglWaitGL();
   // red color
   TEST(0 == compare_color(os_window(&bottom), 100, 100, 1, 0, 0));

   // TEST swapbuffer_window: top window with transparent value
   TEST(0 == show_x11window(os_window(&top)));
   WAITFOR(disp, os_window(&top)->state == x11window_state_SHOWN);
   TEST(EGL_TRUE == eglMakeCurrent(gl_display(disp), (void*)gl_window(&top), (void*)gl_window(&top), eglcontext));
   glClearColor(0, 0, 1, 0); // transparent blue
   glClear(GL_COLOR_BUFFER_BIT);
   TEST(0 == swapbuffer_window(&top, disp));
   eglWaitGL();
   // resulting color is the combination of red and blue
   TEST(0 == compare_color(os_window(&bottom), 100, 100, 1, 0, 1));

   // unprepare
	TEST(EGL_TRUE == eglMakeCurrent(gl_display(disp), EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT));
	TEST(EGL_TRUE == eglDestroyContext(gl_display(disp), eglcontext));
   TEST(0 == free_gconfig(&gconf));
   TEST(0 == free_window(&bottom));
   TEST(0 == free_window(&top));
   WAITFOR(disp, false);
   eglReleaseThread();

   return 0;
ONERR:
   eglMakeCurrent(gl_display(disp), EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
   if (eglcontext != EGL_NO_CONTEXT) eglDestroyContext(gl_display(disp), eglcontext);
   (void) free_gconfig(&gconf);
   (void) free_window(&top);
   (void) free_window(&bottom);
   return EINVAL;
}