Re: Switch OSMesa/implementation at runtime

Brian Paul <[email protected]>
Newsgroups gmane.comp.video.mesa3d.user
Message-ID <[email protected]>
On 10/06/2013 04:34 AM, Ardillas del Monte wrote:
> Hi,
>
> I'm planning a system which would need to use the (non-Mesa) system
> implementation at some times, and OSMesa at other times (by "system
> implementation" I mean whatever -commercial- system driver has the user
> installed as provided by the hardware vendor of their graphics hardware).
>
> The reason for this is that I need to render with floating point color
> (in software) sometimes, while rendering the same scene at lower quality
> and the fastest hardware-accelerated performance at other times.
>
> I've thought some possibilities for doing this. The one I thought as
> most realistic would be to put the Mesa implementation inside a C++
> namespace, and render OpenGL through a C++ object: if you select the
> OSMesa object, commands are sent to the Mesa namespace, and if you
> select the system object, commands are sent raw, with no namespace, to
> the system OpenGL driver.
>
> However, I don't know if there would be some approach more practical
> than this, and moreover, maybe I'm ignoring some problem or issue I
> might face with the namespace idea.
>
> This software would need to run on OSX, Linux, and Windows, so I need
> either an approach which would work on all these OSs, or a different
> approach for each OS.
>
> I'll appreciate any ideas or suggestions you might have.
>

Other people have done this.  I think the usual approach is to build 
Mesa/OSMesa with name "mangling" then add a layer to your app to choose 
between the normal "glFoo" function and the mangled "mglFoo" functions 
at runtime.

Basically, if you build mesa with --enable-mangling all the GL 
entrypoints with "mgl" prefixes instead of "gl".  You'll also want 
--enable-osmesa or --enable-gallium-osmesa

-Brian
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.