X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=retrace%2Fglws_glx.cpp;h=537ea3cfb1ca706c5abada650879919d0389e510;hb=refs%2Fheads%2Fglx-copy-sub-buffer;hp=b6175304d29dd1ff8557027a8dab800d4f3373e0;hpb=7a5d9692c1072effd87092960333f34e78648bf1;p=apitrace diff --git a/retrace/glws_glx.cpp b/retrace/glws_glx.cpp index b617530..537ea3c 100644 --- a/retrace/glws_glx.cpp +++ b/retrace/glws_glx.cpp @@ -183,8 +183,6 @@ public: Drawable::resize(w, h); - XResizeWindow(display, window, w, h); - // Tell the window manager to respect the requested size XSizeHints size_hints; size_hints.max_width = size_hints.min_width = w; @@ -192,6 +190,8 @@ public: size_hints.flags = PMinSize | PMaxSize; XSetWMNormalHints(display, window, &size_hints); + XResizeWindow(display, window, w, h); + waitForEvent(ConfigureNotify); glXWaitX(); @@ -213,6 +213,12 @@ public: Drawable::show(); } + void copySubBuffer(int x, int y, int width, int height) { + glXCopySubBufferMESA(display, window, x, y, width, height); + + processKeys(); + } + void swapBuffers(void) { glXSwapBuffers(display, window); @@ -238,6 +244,8 @@ public: void init(void) { + XInitThreads(); + display = XOpenDisplay(NULL); if (!display) { std::cerr << "error: unable to open display " << XDisplayName(NULL) << "\n"; @@ -265,7 +273,8 @@ cleanup(void) { Visual * createVisual(bool doubleBuffer, Profile profile) { if (profile != PROFILE_COMPAT && - profile != PROFILE_CORE) { + profile != PROFILE_CORE && + profile != PROFILE_ES2) { return NULL; } @@ -340,6 +349,9 @@ createContext(const Visual *_visual, Context *shareContext, Profile profile, boo switch (profile) { case PROFILE_COMPAT: break; + case PROFILE_ES2: + attribs.add(GLX_CONTEXT_PROFILE_MASK_ARB, GLX_CONTEXT_ES2_PROFILE_BIT_EXT); + break; case PROFILE_CORE: // XXX: This will invariable return a 3.2 context, when supported. // We probably should have a PROFILE_CORE_XX per version.