void OpenGLExampleX11::renderThread() { GdkGLContext *glcontext = gtk_widget_get_gl_context(drawing_area); try { while (!boost::this_thread::interruption_requested()) { gdk_threads_enter(); GdkGLDrawable *gld = gtk_widget_get_gl_drawable (drawing_area); gdk_gl_drawable_make_current(gld, glcontext); gboolean tmp = gdk_gl_drawable_gl_begin(gld, glcontext); FBLOG_WARN("", "Setting current context to widget. glbegin was " << tmp); //render(); gdk_gl_drawable_gl_end(gld); //FBLOG_INFO("", "Got drawable: " << gld); //if (gdk_gl_drawable_is_double_buffered (gld)) { //gdk_gl_drawable_swap_buffers (gld); //} else { //glFlush(); //} gdk_flush(); gdk_threads_leave(); boost::this_thread::sleep(boost::posix_time::milliseconds(200)); } } catch (const boost::thread_interrupted&) { } FBLOG_WARN("", "Thread stop signaled"); FBLOG_WARN("", "Thread stopping"); }
CV_IMPL void cvSetOpenGlContext(const char* name) { CvWindow* window; GdkGLContext* glcontext; GdkGLDrawable* gldrawable; CV_FUNCNAME( "cvSetOpenGlContext" ); __BEGIN__; if(!name) CV_ERROR( CV_StsNullPtr, "NULL name string" ); window = icvFindWindowByName( name ); if (!window) CV_ERROR( CV_StsNullPtr, "NULL window" ); if (!window->useGl) CV_ERROR( CV_OpenGlNotSupported, "Window doesn't support OpenGL" ); glcontext = gtk_widget_get_gl_context(window->widget); gldrawable = gtk_widget_get_gl_drawable(window->widget); if (!gdk_gl_drawable_make_current(gldrawable, glcontext)) CV_ERROR( CV_OpenGlApiCallError, "Can't Activate The GL Rendering Context" ); __END__; }
void GtkGlExtGlue::configure(GtkWidget *const widget, GdkEventConfigure *const event) { GdkGLContext *glcontext = gtk_widget_get_gl_context (widget); GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable (widget); if (gdk_gl_drawable_make_current(gldrawable, glcontext)) { glViewport (event->x, event->y, event->width, event->height); } }
Renderer* GtkGlExtGlue::createRenderHandler() { // GNASH_REPORT_FUNCTION; GdkGLContext *glcontext = gtk_widget_get_gl_context (_drawing_area); GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable (_drawing_area); // Attach our OpenGL context to the drawing_area. gdk_gl_drawable_make_current(gldrawable, glcontext); Renderer* renderer = renderer::opengl::create_handler(true); return renderer; }
Renderer* GtkGlExtGlue::createRenderHandler() { // GNASH_REPORT_FUNCTION; GdkGLContext *glcontext = gtk_widget_get_gl_context (_drawing_area); GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable (_drawing_area); // Attach our OpenGL context to the drawing_area. gdk_gl_drawable_make_current(gldrawable, glcontext); Renderer* renderer = create_Renderer_ogl(); #ifdef FIX_I810_LOD_BIAS glTexEnvf(GL_TEXTURE_FILTER_CONTROL_EXT, GL_TEXTURE_LOD_BIAS_EXT, _tex_lod_bias); #endif return renderer; }
void yui_gl_draw(YuiGl * glxarea) { #ifdef HAVE_LIBGTKGLEXT GdkGLContext *glcontext = gtk_widget_get_gl_context (GTK_WIDGET(glxarea)); GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable (GTK_WIDGET(glxarea)); if (!gdk_gl_drawable_make_current (gldrawable, glcontext)) { g_print("Cannot set gl drawable current\n"); return; } gdk_gl_drawable_swap_buffers(gldrawable); #else int buf_width, buf_height; GdkPixbuf * pixbuf, * scaledpixbuf; VIDCore->GetGlSize( &buf_width, &buf_height ); glxarea->pixels_width = GTK_WIDGET(glxarea)->allocation.width; glxarea->pixels_height = GTK_WIDGET(glxarea)->allocation.height; glxarea->pixels_rowstride = glxarea->pixels_width * 4; glxarea->pixels_rowstride += (glxarea->pixels_rowstride % 4)? (4 - (glxarea->pixels_rowstride % 4)): 0; if (dispbuffer == NULL) return; pixbuf = gdk_pixbuf_new_from_data((const guchar *) dispbuffer, GDK_COLORSPACE_RGB, TRUE, 8, buf_width, buf_height, buf_width*4, NULL, NULL); if (( glxarea->pixels_width < buf_width + X_NOSCALE )&&( glxarea->pixels_height < buf_height + Y_NOSCALE )) { gdk_draw_pixbuf(GTK_WIDGET(glxarea)->window, NULL, pixbuf, 0, 0, (glxarea->pixels_width-buf_width)/2, (glxarea->pixels_height-buf_height)/2, buf_width, buf_height, GDK_RGB_DITHER_NONE, 0, 0); } else { scaledpixbuf = gdk_pixbuf_scale_simple(pixbuf, glxarea->pixels_width, glxarea->pixels_height, GDK_INTERP_NEAREST ); gdk_draw_pixbuf(GTK_WIDGET(glxarea)->window, NULL, scaledpixbuf, 0, 0, 0, 0, glxarea->pixels_width, glxarea->pixels_height, GDK_RGB_DITHER_NONE, 0, 0); g_object_unref(scaledpixbuf); } g_object_unref(pixbuf); #endif glxarea->is_init = 1; }