From 7a5d9692c1072effd87092960333f34e78648bf1 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jos=C3=A9=20Fonseca?= Date: Mon, 22 Oct 2012 18:55:52 +0100 Subject: [PATCH] Don't show pbuffers in windows. They are often very numerous, making it hard to see the final rendering. --- retrace/glretrace.hpp | 3 +++ retrace/glretrace_glx.cpp | 5 +---- retrace/glretrace_wgl.cpp | 5 +---- retrace/glretrace_ws.cpp | 24 ++++++++++++++++++++---- retrace/glws.hpp | 9 +++++++-- retrace/glws_cocoa.mm | 8 ++++---- retrace/glws_egl_xlib.cpp | 9 +++++---- retrace/glws_glx.cpp | 8 ++++---- retrace/glws_wgl.cpp | 8 ++++---- 9 files changed, 49 insertions(+), 30 deletions(-) diff --git a/retrace/glretrace.hpp b/retrace/glretrace.hpp index 87ced60..6ee241d 100644 --- a/retrace/glretrace.hpp +++ b/retrace/glretrace.hpp @@ -78,6 +78,9 @@ createDrawable(glws::Profile profile); glws::Drawable * createDrawable(void); +glws::Drawable * +createPbuffer(int width, int height); + Context * createContext(Context *shareContext, glws::Profile profile); diff --git a/retrace/glretrace_glx.cpp b/retrace/glretrace_glx.cpp index cea892f..4ab3d67 100644 --- a/retrace/glretrace_glx.cpp +++ b/retrace/glretrace_glx.cpp @@ -139,11 +139,8 @@ static void retrace_glXCreatePbuffer(trace::Call &call) { unsigned long long orig_drawable = call.ret->toUInt(); - glws::Drawable *drawable = glretrace::createDrawable(); + glws::Drawable *drawable = glretrace::createPbuffer(width, height); - drawable->resize(width, height); - drawable->show(); - drawable_map[orig_drawable] = drawable; } diff --git a/retrace/glretrace_wgl.cpp b/retrace/glretrace_wgl.cpp index 639f419..8fc9fe6 100644 --- a/retrace/glretrace_wgl.cpp +++ b/retrace/glretrace_wgl.cpp @@ -182,10 +182,7 @@ static void retrace_wglCreatePbufferARB(trace::Call &call) { int iHeight = call.arg(3).toUInt(); unsigned long long orig_pbuffer = call.ret->toUIntPtr(); - glws::Drawable *drawable = glretrace::createDrawable(); - - drawable->resize(iWidth, iHeight); - drawable->show(); + glws::Drawable *drawable = glretrace::createPbuffer(iWidth, iHeight); pbuffer_map[orig_pbuffer] = drawable; } diff --git a/retrace/glretrace_ws.cpp b/retrace/glretrace_ws.cpp index aeaadb7..c49b472 100644 --- a/retrace/glretrace_ws.cpp +++ b/retrace/glretrace_ws.cpp @@ -68,9 +68,9 @@ getDefaultProfile(void) } -glws::Drawable * -createDrawable(glws::Profile profile) { - glws::Drawable *draw = glws::createDrawable(getVisual(profile)); +static glws::Drawable * +createDrawableHelper(glws::Profile profile, int width = 32, int height = 32, bool pbuffer = false) { + glws::Drawable *draw = glws::createDrawable(getVisual(profile), width, height, pbuffer); if (!draw) { std::cerr << "error: failed to create OpenGL drawable\n"; exit(1); @@ -81,9 +81,21 @@ createDrawable(glws::Profile profile) { } +glws::Drawable * +createDrawable(glws::Profile profile) { + return createDrawableHelper(profile); +} + + glws::Drawable * createDrawable(void) { - return glretrace::createDrawable(getDefaultProfile()); + return createDrawable(getDefaultProfile()); +} + + +glws::Drawable * +createPbuffer(int width, int height) { + return createDrawableHelper(getDefaultProfile(), width, height, true); } @@ -170,6 +182,10 @@ updateDrawable(int width, int height) { glws::Drawable *currentDrawable = currentContext->drawable; assert(currentDrawable); + if (currentDrawable->pbuffer) { + return; + } + if (currentDrawable->visible && width <= currentDrawable->width && height <= currentDrawable->height) { diff --git a/retrace/glws.hpp b/retrace/glws.hpp index 9557c0c..c76e193 100644 --- a/retrace/glws.hpp +++ b/retrace/glws.hpp @@ -31,6 +31,8 @@ #define _GLWS_HPP_ +#include + #include #include #include @@ -100,12 +102,14 @@ public: const Visual *visual; int width; int height; + bool pbuffer; bool visible; - Drawable(const Visual *vis, int w, int h) : + Drawable(const Visual *vis, int w, int h, bool pb) : visual(vis), width(w), height(h), + pbuffer(pb), visible(false) {} @@ -119,6 +123,7 @@ public: virtual void show(void) { + assert(!pbuffer); visible = true; } @@ -157,7 +162,7 @@ Visual * createVisual(bool doubleBuffer = false, Profile profile = PROFILE_COMPAT); Drawable * -createDrawable(const Visual *visual, int width = 32, int height = 32); +createDrawable(const Visual *visual, int width, int height, bool pbuffer = false); Context * createContext(const Visual *visual, Context *shareContext = 0, Profile profile = PROFILE_COMPAT, bool debug = false); diff --git a/retrace/glws_cocoa.mm b/retrace/glws_cocoa.mm index 5081d04..3dcbc0a 100644 --- a/retrace/glws_cocoa.mm +++ b/retrace/glws_cocoa.mm @@ -75,8 +75,8 @@ public: NSWindow *window; NSOpenGLContext *currentContext; - CocoaDrawable(const Visual *vis, int w, int h) : - Drawable(vis, w, h), + CocoaDrawable(const Visual *vis, int w, int h, bool pbuffer) : + Drawable(vis, w, h, pbuffer), currentContext(nil) { NSOpenGLPixelFormat *pixelFormat = static_cast(visual)->pixelFormat; @@ -215,9 +215,9 @@ createVisual(bool doubleBuffer, Profile profile) { } Drawable * -createDrawable(const Visual *visual, int width, int height) +createDrawable(const Visual *visual, int width, int height, bool pbuffer) { - return new CocoaDrawable(visual, width, height); + return new CocoaDrawable(visual, width, height, pbuffer); } Context * diff --git a/retrace/glws_egl_xlib.cpp b/retrace/glws_egl_xlib.cpp index 58824c2..5aacdfe 100644 --- a/retrace/glws_egl_xlib.cpp +++ b/retrace/glws_egl_xlib.cpp @@ -92,8 +92,9 @@ public: EGLSurface surface; EGLint api; - EglDrawable(const Visual *vis, int w, int h) : - Drawable(vis, w, h), api(EGL_OPENGL_ES_API) + EglDrawable(const Visual *vis, int w, int h, bool pbuffer) : + Drawable(vis, w, h, pbuffer), + api(EGL_OPENGL_ES_API) { XVisualInfo *visinfo = static_cast(visual)->visinfo; @@ -393,9 +394,9 @@ createVisual(bool doubleBuffer, Profile profile) { } Drawable * -createDrawable(const Visual *visual, int width, int height) +createDrawable(const Visual *visual, int width, int height, bool pbuffer) { - return new EglDrawable(visual, width, height); + return new EglDrawable(visual, width, height, pbuffer); } Context * diff --git a/retrace/glws_glx.cpp b/retrace/glws_glx.cpp index 575776e..b617530 100644 --- a/retrace/glws_glx.cpp +++ b/retrace/glws_glx.cpp @@ -104,8 +104,8 @@ class GlxDrawable : public Drawable public: Window window; - GlxDrawable(const Visual *vis, int w, int h) : - Drawable(vis, w, h) + GlxDrawable(const Visual *vis, int w, int h, bool pbuffer) : + Drawable(vis, w, h, pbuffer) { XVisualInfo *visinfo = static_cast(visual)->visinfo; @@ -313,9 +313,9 @@ createVisual(bool doubleBuffer, Profile profile) { } Drawable * -createDrawable(const Visual *visual, int width, int height) +createDrawable(const Visual *visual, int width, int height, bool pbuffer) { - return new GlxDrawable(visual, width, height); + return new GlxDrawable(visual, width, height, pbuffer); } Context * diff --git a/retrace/glws_wgl.cpp b/retrace/glws_wgl.cpp index c6e4a3f..b4fd922 100644 --- a/retrace/glws_wgl.cpp +++ b/retrace/glws_wgl.cpp @@ -100,8 +100,8 @@ public: PIXELFORMATDESCRIPTOR pfd; int iPixelFormat; - WglDrawable(const Visual *vis, int width, int height) : - Drawable(vis, width, height) + WglDrawable(const Visual *vis, int width, int height, bool pbuffer) : + Drawable(vis, width, height, pbuffer) { static bool first = TRUE; RECT rect; @@ -287,9 +287,9 @@ createVisual(bool doubleBuffer, Profile profile) { } Drawable * -createDrawable(const Visual *visual, int width, int height) +createDrawable(const Visual *visual, int width, int height, bool pbuffer) { - return new WglDrawable(visual, width, height); + return new WglDrawable(visual, width, height, pbuffer); } Context * -- 2.43.0