diff --git a/xbanan/ExtGLX.cpp b/xbanan/ExtGLX.cpp index 5cf94ec..60d1958 100644 --- a/xbanan/ExtGLX.cpp +++ b/xbanan/ExtGLX.cpp @@ -401,6 +401,40 @@ BAN::ErrorOr extension_glx(Client& client_info, BAN::ConstByteSpan packet) break; } + case X_GLXCreateContextAttribsARB: + { + auto request = decode(packet).value(); + + dprintln("GLXCreateContextAttribsARB"); + dprintln(" context: {}", request.context); + dprintln(" fbconfig: {}", request.fbconfig); + dprintln(" screen: {}", request.screen); + dprintln(" shareList: {}", request.shareList); + dprintln(" isDirect: {}", request.isDirect); + dprintln(" numAttribs: {}", request.numAttribs); + + auto* object = new MyGLXContext({ + .fbconfig = request.fbconfig, + .is_direct = request.isDirect, + }); + ASSERT(object); + + TRY(client_info.objects.insert(request.context)); + TRY(g_objects.insert( + request.context, + TRY(BAN::UniqPtr::create(Object { + .type = Object::Type::Extension, + .object = Object::Extension { + .type_major = s_glx_major_opcode, + .type_minor = GLXBadContext, + .c_private = object, + .destructor = [](Object::Extension& ext) { delete static_cast(ext.c_private); }, + }, + })) + )); + + break; + } default: dwarnln("unsupported glx minor opcode {}", packet[1]); break;