On Apr 16, 2014 2:01 PM, "Jasper St. Pierre" <[email protected]> wrote: > > > > > On Wed, Apr 16, 2014 at 2:27 PM, Pekka Paalanen <[email protected]> wrote: >> >> Hi, >> >> I'm moving this conversation to where it belongs. >> >> On Wed, 16 Apr 2014 11:25:26 +0000 >> [email protected] wrote: >> >> > https://bugs.freedesktop.org/show_bug.cgi?id=77521 >> > >> > Priority: medium >> > Bug ID: 77521 >> > Assignee: [email protected] >> > Summary: cannot create opengl by dynamically loading wayland >> > symbols from library >> > Severity: blocker >> > Classification: Unclassified >> > OS: All >> > Reporter: [email protected] >> > Hardware: All >> > Status: NEW >> > Version: 1.3.0 >> > Component: wayland >> > Product: Wayland >> > >> > I was trying to implement a window system agnostic library which will be used >> > in creating opengl apps with different windows systems. Lets name that library >> > as WSAL.Now to achieve this WSAL implements window system interfaces which is >> > used in creating native windows etc of specific window system while egl calls >> > are in main WSAL library.Consider wayland and X as examples of such two >> > libraries. As I separate several implementations of wayland and and X from >> > different team members.So to test them efficiently I have to create several >> > function pointers and object pointers that are present in those library >> > implementations and load them with symbols from libraries using dlsym utility >> > so that at compile time I donot have to link with any library. >> > >> > For X I was successfully in creating X backend. >> > For wayland I first got stuck at functions which are inline in >> > wayland_client_protocol.h. For them I cannot do the same.Instead I created a >> > function pointer which these functions actually calls in inline definition. >> > >> > Like when wl_display_get_registry is called wl_proxy_marshal_constructor is >> > ultimately called. >> > >> > The terrible fucntions are wl_proxy_marshal_constructor and wl_proxy_marshal as >> > they are defined with variable arguments.So I declared >> > new_wl_proxy_marshal_constructor a function pointer of same type as >> > wl_proxy_marshal_constructor and loaded the symbol from library using dlsym >> > into new_wl_proxy_marshal_constructor. >> > >> > But faced a fundamental problem of determing argument types as these terrible >> > functions (TFs) don't have constant argument signature i.e it may sometime pass >> > a int as its 4th aguments in one inline expansion while a char * in some other >> > inline function. >> >> Why do you need to know the arguments? >> Why cannot you just use it as is, with variable arguments? >> >> Btw. if the generated inline wrapper functions do not suit you, I >> think you could generate your own from the XML files, that end up >> calling the real functions exported from libwayland-client. That is >> how bindings to other programming languages are supposed work to my >> understanding.
You are more than welcome to write your own protocol parser that dumps out something that uses function pointers. That should be a fine way to do it. However, if you do so, you will want to use the wl_proxy_do_something_array versions such as wl_proxy_marshal_constructor_array. These take an array of things of the type wl_argument instead of variable argument lists. These should dlsym nicely. If you want, you could write nice variable-argument wrappers that internally call your function pointers that call the _array version of the corresponding function. (That's actually what libwayland does sans the function pointers part.) > This won't work with EGL, as EGL expects libwayland-client. It's the same issue with X11: you can't just use XCB because GLX expects Xlib's Display / Window pointers. As long as they're still using libwayland-client and passing around wl_proxy structures and not re-implementing the wire protocol, it should work fine. > >> >> > So I explored this wl_proxy_marshal_constructor which actually calls >> > wl_proxy_marshal_array_constructor after forming a variable arguments to a >> > single argument using some wl_proxy object signature which I have no access to >> > in main wayland interface. >> > >> > dlsym option of using rtld_now doesnot work. >> > >> > How to implement such functionality in wayland or provide a way to create a app >> > with no linking at build time. >> >> Have you looked at SDL2? >> http://hg.libsdl.org/SDL/file/tip/src/video/wayland >> >> To me it seems like it uses dlopen and dlsym equivalents to load >> Wayland libraries. I don't know if it is complete or in use yet, >> there seems to be also a non-dlopen path. Thanks, --Jason Ekstrand
_______________________________________________ wayland-devel mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/wayland-devel
