From c58efb0e18f41e8db5522ccbed02f5a6bcca8b51 Mon Sep 17 00:00:00 2001 From: Alexandros Frantzis Date: Mon, 5 Dec 2011 11:35:35 +0200 Subject: [PATCH] Create a Visual for each Profile. MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: José Fonseca --- glretrace.hpp | 2 +- glretrace_cgl.cpp | 4 ++-- glretrace_egl.cpp | 4 ++-- glretrace_glx.cpp | 10 +++++----- glretrace_main.cpp | 14 ++++++++++---- glretrace_wgl.cpp | 8 ++++---- glws.hpp | 1 + glws_egl_xlib.cpp | 2 ++ 8 files changed, 27 insertions(+), 18 deletions(-) diff --git a/glretrace.hpp b/glretrace.hpp index 15035b2..41e2997 100644 --- a/glretrace.hpp +++ b/glretrace.hpp @@ -38,7 +38,7 @@ extern bool double_buffer; extern bool insideGlBeginEnd; extern trace::Parser parser; extern glws::Profile defaultProfile; -extern glws::Visual *visual; +extern glws::Visual *visual[glws::PROFILE_MAX]; extern glws::Drawable *drawable; extern glws::Context *context; diff --git a/glretrace_cgl.cpp b/glretrace_cgl.cpp index 0c5aa73..63b94b4 100644 --- a/glretrace_cgl.cpp +++ b/glretrace_cgl.cpp @@ -53,7 +53,7 @@ getDrawable(unsigned long drawable_id) { DrawableMap::const_iterator it; it = drawable_map.find(drawable_id); if (it == drawable_map.end()) { - return (drawable_map[drawable_id] = glws::createDrawable(visual)); + return (drawable_map[drawable_id] = glws::createDrawable(visual[glretrace::defaultProfile])); } return it->second; @@ -70,7 +70,7 @@ getContext(unsigned long long ctx) { it = context_map.find(ctx); if (it == context_map.end()) { glws::Context *context; - context_map[ctx] = context = glws::createContext(visual, sharedContext, glretrace::defaultProfile); + context_map[ctx] = context = glws::createContext(visual[glretrace::defaultProfile], sharedContext, glretrace::defaultProfile); if (!sharedContext) { sharedContext = context; } diff --git a/glretrace_egl.cpp b/glretrace_egl.cpp index 4e549a3..ce03752 100644 --- a/glretrace_egl.cpp +++ b/glretrace_egl.cpp @@ -78,7 +78,7 @@ getContext(unsigned long long context_ptr) { static void retrace_eglCreateWindowSurface(trace::Call &call) { unsigned long long orig_surface = call.ret->toUIntPtr(); - glws::Drawable *drawable = glws::createDrawable(glretrace::visual); + glws::Drawable *drawable = glws::createDrawable(glretrace::visual[glws::PROFILE_COMPAT]); drawable_map[orig_surface] = drawable; } @@ -126,7 +126,7 @@ static void retrace_eglCreateContext(trace::Call &call) { } - glws::Context *context = glws::createContext(glretrace::visual, share_context, profile); + glws::Context *context = glws::createContext(glretrace::visual[glws::PROFILE_COMPAT], share_context, profile); if (!context) { const char *name; switch (profile) { diff --git a/glretrace_glx.cpp b/glretrace_glx.cpp index 749907a..a3b80f2 100644 --- a/glretrace_glx.cpp +++ b/glretrace_glx.cpp @@ -47,7 +47,7 @@ getDrawable(unsigned long drawable_id) { DrawableMap::const_iterator it; it = drawable_map.find(drawable_id); if (it == drawable_map.end()) { - return (drawable_map[drawable_id] = glws::createDrawable(visual)); + return (drawable_map[drawable_id] = glws::createDrawable(visual[glretrace::defaultProfile])); } return it->second; @@ -62,7 +62,7 @@ getContext(unsigned long long context_ptr) { ContextMap::const_iterator it; it = context_map.find(context_ptr); if (it == context_map.end()) { - return (context_map[context_ptr] = glws::createContext(visual, NULL, glretrace::defaultProfile)); + return (context_map[context_ptr] = glws::createContext(visual[glretrace::defaultProfile], NULL, glretrace::defaultProfile)); } return it->second; @@ -72,7 +72,7 @@ static void retrace_glXCreateContext(trace::Call &call) { unsigned long long orig_context = call.ret->toUIntPtr(); glws::Context *share_context = getContext(call.arg(2).toUIntPtr()); - glws::Context *context = glws::createContext(glretrace::visual, share_context, glretrace::defaultProfile); + glws::Context *context = glws::createContext(glretrace::visual[glretrace::defaultProfile], share_context, glretrace::defaultProfile); context_map[orig_context] = context; } @@ -80,7 +80,7 @@ static void retrace_glXCreateContextAttribsARB(trace::Call &call) { unsigned long long orig_context = call.ret->toUIntPtr(); glws::Context *share_context = getContext(call.arg(2).toUIntPtr()); - glws::Context *context = glws::createContext(glretrace::visual, share_context, glretrace::defaultProfile); + glws::Context *context = glws::createContext(glretrace::visual[glretrace::defaultProfile], share_context, glretrace::defaultProfile); context_map[orig_context] = context; } @@ -134,7 +134,7 @@ static void retrace_glXCreateNewContext(trace::Call &call) { unsigned long long orig_context = call.ret->toUIntPtr(); glws::Context *share_context = getContext(call.arg(3).toUIntPtr()); - glws::Context *context = glws::createContext(glretrace::visual, share_context, glretrace::defaultProfile); + glws::Context *context = glws::createContext(glretrace::visual[glretrace::defaultProfile], share_context, glretrace::defaultProfile); context_map[orig_context] = context; } diff --git a/glretrace_main.cpp b/glretrace_main.cpp index fdc52ab..7c836ba 100644 --- a/glretrace_main.cpp +++ b/glretrace_main.cpp @@ -40,7 +40,7 @@ bool double_buffer = true; bool insideGlBeginEnd = false; trace::Parser parser; glws::Profile defaultProfile = glws::PROFILE_COMPAT; -glws::Visual *visual = NULL; +glws::Visual *visual[glws::PROFILE_MAX]; glws::Drawable *drawable = NULL; glws::Context *context = NULL; @@ -330,7 +330,10 @@ int main(int argc, char **argv) } glws::init(); - visual = glws::createVisual(double_buffer, defaultProfile); + visual[glws::PROFILE_COMPAT] = glws::createVisual(double_buffer, glws::PROFILE_COMPAT); + visual[glws::PROFILE_CORE] = glws::createVisual(double_buffer, glws::PROFILE_CORE); + visual[glws::PROFILE_ES1] = glws::createVisual(double_buffer, glws::PROFILE_ES1); + visual[glws::PROFILE_ES2] = glws::createVisual(double_buffer, glws::PROFILE_ES2); for ( ; i < argc; ++i) { if (!parser.open(argv[i])) { @@ -342,8 +345,11 @@ int main(int argc, char **argv) parser.close(); } - - delete visual; + + for (int n = 0; n < glws::PROFILE_MAX; n++) { + delete visual[n]; + } + glws::cleanup(); return 0; diff --git a/glretrace_wgl.cpp b/glretrace_wgl.cpp index 243dfe0..447d177 100644 --- a/glretrace_wgl.cpp +++ b/glretrace_wgl.cpp @@ -48,7 +48,7 @@ getDrawable(unsigned long long hdc) { DrawableMap::const_iterator it; it = drawable_map.find(hdc); if (it == drawable_map.end()) { - return (drawable_map[hdc] = glws::createDrawable(visual)); + return (drawable_map[hdc] = glws::createDrawable(visual[glretrace::defaultProfile])); } return it->second; @@ -56,7 +56,7 @@ getDrawable(unsigned long long hdc) { static void retrace_wglCreateContext(trace::Call &call) { unsigned long long orig_context = call.ret->toUIntPtr(); - glws::Context *context = glws::createContext(glretrace::visual, NULL, glretrace::defaultProfile); + glws::Context *context = glws::createContext(glretrace::visual[glretrace::defaultProfile], NULL, glretrace::defaultProfile); context_map[orig_context] = context; } @@ -181,7 +181,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 = glws::createDrawable(glretrace::visual); + glws::Drawable *drawable = glws::createDrawable(glretrace::visual[glretrace::defaultProfile]); drawable->resize(iWidth, iHeight); drawable->show(); @@ -223,7 +223,7 @@ static void retrace_wglCreateContextAttribsARB(trace::Call &call) { share_context = context_map[call.arg(1).toUIntPtr()]; } - glws::Context *context = glws::createContext(glretrace::visual, share_context, glretrace::defaultProfile); + glws::Context *context = glws::createContext(glretrace::visual[glretrace::defaultProfile], share_context, glretrace::defaultProfile); context_map[orig_context] = context; } diff --git a/glws.hpp b/glws.hpp index fdc61c0..9afebf4 100644 --- a/glws.hpp +++ b/glws.hpp @@ -42,6 +42,7 @@ enum Profile { PROFILE_CORE, PROFILE_ES1, PROFILE_ES2, + PROFILE_MAX }; diff --git a/glws_egl_xlib.cpp b/glws_egl_xlib.cpp index 4498430..c1cb0d9 100644 --- a/glws_egl_xlib.cpp +++ b/glws_egl_xlib.cpp @@ -384,6 +384,8 @@ createContext(const Visual *_visual, Context *shareContext, Profile profile) eglBindAPI(EGL_OPENGL_ES_API); attribs.add(EGL_CONTEXT_CLIENT_VERSION, 2); break; + default: + return NULL; } attribs.end(EGL_NONE); -- 2.7.4