We have just finished to develop a RenderToBitmap function that allow a poster sized bitmap to be created by tiling many images obtained from glReadPixel & gluPickMatrix.
Everything works fine BUT a customer is reporting the following issue:
Using standard Windows Print Preview dialog he sees the correct Print Preview on the right monitor while a messed up Print Preview on the left one. Messed up in the sense that all the tiles display a part of the currently displayed OpenGL scene overlapped with the correct one.
Dragging back and forth the Print Preview from one screen to the other you get the correct / wrong Print Preview.
WHY ?!?!? :eek:
The graphics card is a: NVIDIA Quadro FX 550 dual monitor
A screenshot would help greatly to understand what the issue might be.
Sorry if I answered only now but I didn’t get any email notification. I need to check my options.
Humus, unfortuantely we customer is not happy to share his screenshots.
I am asking him to make a new test. After thinking about how we proepare the print preview, basically we generate a big bitmap and use standard GDI calls to paint a printDocument. In my opinion OpenGL here have nothing to do with the issue. I asked the customer to try painting a portrait picture - this is a bitmap like the one we generate with OpenGL - and see if dragging the preview window from one screen to the other the problem still exists or not.
What do you think?
We managed to have some screen shot of the issue:
The first image is relative to: Print Preview when the main program window is in the center of monitor 1 (left monitor)
The second image is relative to: Print Preview when the main program window is maximized in the monitor 1 (left monitor)
The third image is relative to: Print Preview when the main program window is in the monitor 2 (right monitor). The image is the same for maximized or floating window.
What do you think?
If you think OpenGL has nothing to do with it, (possible driver bugs aside => always update the graphics driver) the problem could be in the way you read or handle the GDI bitmap.
If the GDI image you generate contains more errors the more you move it off the screen where it works correctly, there could be a bitmap stride error or somesuch (=> more corrupted and smaller tiles.)
Check if there is any code which is not window relative. (I’m thinking about negative desktop offsets for the left dual-screen monitor if the right-hand one is the primary.)
Does it help to make the primary monitor the left one?
Is there OpenGL acceleration on both monitors?
The dual-screen options on NVIDIA drivers offer multiple modes. The default would be to accelerate both, bot you could also swich that to accelerate only the primary, in that cas you would get no OpenGL rendering on the secondary and readpixels on that area would return garbage.
Thanks for your help. I thought OpenGL was out of the discussion but after seeing the image above I changed my mind.
One one monitor (and on the other hundreds of single monitor enabled customers) everything works fine.
I will ask to the customer to switch primary/secondary monitor to see if something changes.
How can I see (quickly) if the hardware acceleration is present on both the monitors?
I add one more detail:
Trying to draw a jpg image instead of the RenderToBitmap image in the print preview, no anomalies are present.
So it has to be something OpenGL related.