http://bugs.winehq.org/show_bug.cgi?id=2398
------- Additional Comments From d.oosterveld@wanadoo.nl 2006-23-02 07:18 -------
I'm using these applications on a laptop with not much such 3d muscle as a desktop card. I really need these applications to work. I've been poking the 0.9.2 sources to get Luxology Modo to work somewhat properly.
I managed to get the interface and opengl to draw at the same time by simply disabling the double buffering. This ends up to be pretty cheap solution. The only problem is positioning the opengl viewports because I don't have the insight in the x11drv yet to implement:
- Reposition the viewport on every call to glViewport(). - Call glScissor to clip the viewport so it won't overdraw the interface. - Adapt glClear to stay inside the scissored area.
And you should be done, giving a cheap and easy fix of the problem on cards/drivers without a funky gl extension ;)
The second (and sane) solution is to use separate X child windows for each openGL viewport. This can be done when the device context is attached, then you can make an special exception for child windows with openGL attached. Most programs use separate X (child) windows to position the openGL viewport because it's so easy to do. The contents of these openGL subwindows is never draw by GDI. X applications use the the same solution. But you probably now this ;)
Trying to blit a openGL viewport inside a window means reimplementing part of the X window system and all driver specific trouble with it making the implementation unreliable. The first implementation of the WM was very sweet for this situation and lets X windows handle the complexity of clipping the viewport and double buffering it.
I'd really like to have the first solution implemented as a switch as a temporary solution even if it isn't double buffered. This would at least give us somewhat usable applications.
Thanks.