Hi Alexander,
I had a look at your patches again, and another issue came to my mind: I am not sure how the scissor rectangle and viewport affects ColorFill blits. IDirect3DDevice::Clear is limited by the viewport, the scissor test and the rectangles passed in, but I think that this doesn't apply to ColorFills. If that is true, I think there isn't much point in having a common codepath, and we should just put the glClear() call into COLORFILL itself - Dealing with the differences of those two calls will be more effort than the code shared.
But I think we need a test for this. There is a clear() test in dlls/ddraw/tests/visual.c, but the d3d9 test tests a few more things. It should be possible to add a COLORFILL test to the visual.c clear test in ddraw as well, this will show if Windows honors the scissor and viewport in COLORFILL or not.
Yes, I know... Start fixing one bug, and you'll run into a lot more. Happens to me all the time as well :-)
Stefan
On 20/12/2007, Stefan Dösinger stefandoesinger@gmx.at wrote:
Hi Alexander,
I had a look at your patches again, and another issue came to my mind: I am not sure how the scissor rectangle and viewport affects ColorFill blits. IDirect3DDevice::Clear is limited by the viewport, the scissor test and the rectangles passed in, but I think that this doesn't apply to ColorFills. If that is true, I think there isn't much point in having a common codepath, and we should just put the glClear() call into COLORFILL itself - Dealing with the differences of those two calls will be more effort than the code shared.
But I think we need a test for this. There is a clear() test in dlls/ddraw/tests/visual.c, but the d3d9 test tests a few more things. It should be possible to add a COLORFILL test to the visual.c clear test in ddraw as well, this will show if Windows honors the scissor and viewport in COLORFILL or not.
Yes, I know... Start fixing one bug, and you'll run into a lot more. Happens to me all the time as well :-)
Stefan
Note that while IDirect3DDevice9 also has a ColorFill() method, it uses either the ddraw implementation or the color_fill_fbo() implementation. It's probably worth it to make sure that works as well.