Module: wine Branch: master Commit: 7414ebc97596d0fe9b3042bee8ec44260a31aa4e URL: http://source.winehq.org/git/wine.git/?a=commit;h=7414ebc97596d0fe9b3042bee8...
Author: Henri Verbeet hverbeet@codeweavers.com Date: Fri Oct 29 12:25:18 2010 +0200
wined3d: Don't flip the coordinate system in set_blit_dimension().
---
dlls/wined3d/arb_program_shader.c | 7 +++-- dlls/wined3d/context.c | 2 +- dlls/wined3d/surface.c | 46 +++++++++++++++--------------------- 3 files changed, 24 insertions(+), 31 deletions(-)
diff --git a/dlls/wined3d/arb_program_shader.c b/dlls/wined3d/arb_program_shader.c index 660f60b..f182a8f 100644 --- a/dlls/wined3d/arb_program_shader.c +++ b/dlls/wined3d/arb_program_shader.c @@ -7168,10 +7168,11 @@ HRESULT arbfp_blit_surface(IWineD3DDeviceImpl *device, IWineD3DSurfaceImpl *src_ * whereas the real gl drawable size is the size of the window. */ dst_swapchain = dst_surface->container.type == WINED3D_CONTAINER_SWAPCHAIN ? dst_surface->container.u.swapchain : NULL; - if (dst_swapchain && dst_surface == dst_swapchain->front_buffer) - surface_translate_frontbuffer_coords(dst_surface, context->win_handle, &dst_rect); - else if (surface_is_offscreen(dst_surface)) + if (!surface_is_offscreen(dst_surface)) { + if (dst_swapchain && dst_surface == dst_swapchain->front_buffer) + surface_translate_frontbuffer_coords(dst_surface, context->win_handle, &dst_rect); + dst_rect.top = dst_surface->currentDesc.Height - dst_rect.top; dst_rect.bottom = dst_surface->currentDesc.Height - dst_rect.bottom; } diff --git a/dlls/wined3d/context.c b/dlls/wined3d/context.c index 00b6031..618ccd4 100644 --- a/dlls/wined3d/context.c +++ b/dlls/wined3d/context.c @@ -1622,7 +1622,7 @@ static inline void set_blit_dimension(UINT width, UINT height) { checkGLcall("glMatrixMode(GL_PROJECTION)"); glLoadIdentity(); checkGLcall("glLoadIdentity()"); - glOrtho(0, width, height, 0, 0.0, -1.0); + glOrtho(0, width, 0, height, 0.0, -1.0); checkGLcall("glOrtho"); glViewport(0, 0, width, height); checkGLcall("glViewport"); diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c index b24a6de..3f08155 100644 --- a/dlls/wined3d/surface.c +++ b/dlls/wined3d/surface.c @@ -1767,8 +1767,6 @@ static void flush_to_framebuffer_drawpixels(IWineD3DSurfaceImpl *This, GLenum fm checkGLcall("glGetIntegerv"); glGetIntegerv(GL_CURRENT_RASTER_POSITION, &prev_rasterpos[0]); checkGLcall("glGetIntegerv"); - glPixelZoom(1.0f, -1.0f); - checkGLcall("glPixelZoom");
/* If not fullscreen, we need to skip a number of bytes to find the next row of data */ glGetIntegerv(GL_UNPACK_ROW_LENGTH, &skipBytes); @@ -1817,9 +1815,6 @@ static void flush_to_framebuffer_drawpixels(IWineD3DSurfaceImpl *This, GLenum fm checkGLcall("glBindBufferARB"); }
- glPixelZoom(1.0f, 1.0f); - checkGLcall("glPixelZoom"); - glRasterPos3iv(&prev_rasterpos[0]); checkGLcall("glRasterPos3iv");
@@ -3053,7 +3048,7 @@ static void fb_copy_to_texture_hwstretch(IWineD3DSurfaceImpl *dst_surface, IWine left = src_rect->left; right = src_rect->right;
- if (upsidedown) + if (!upsidedown) { top = src_surface->currentDesc.Height - src_rect->top; bottom = src_surface->currentDesc.Height - src_rect->bottom; @@ -3082,19 +3077,19 @@ static void fb_copy_to_texture_hwstretch(IWineD3DSurfaceImpl *dst_surface, IWine glBegin(GL_QUADS); /* bottom left */ glTexCoord2f(left, bottom); - glVertex2i(0, fbheight); + glVertex2i(0, 0);
/* top left */ glTexCoord2f(left, top); - glVertex2i(0, fbheight - dst_rect.bottom - dst_rect.top); + glVertex2i(0, dst_rect.bottom - dst_rect.top);
/* top right */ glTexCoord2f(right, top); - glVertex2i(dst_rect.right - dst_rect.left, fbheight - dst_rect.bottom - dst_rect.top); + glVertex2i(dst_rect.right - dst_rect.left, dst_rect.bottom - dst_rect.top);
/* bottom right */ glTexCoord2f(right, bottom); - glVertex2i(dst_rect.right - dst_rect.left, fbheight); + glVertex2i(dst_rect.right - dst_rect.left, 0); glEnd(); checkGLcall("glEnd and previous");
@@ -3140,21 +3135,21 @@ static void fb_copy_to_texture_hwstretch(IWineD3DSurfaceImpl *dst_surface, IWine
glBegin(GL_QUADS); /* top left */ - glTexCoord2f(0.0f, (float)fbheight / (float)src_surface->pow2Height); - glVertex2i(0, 0); - - /* bottom left */ glTexCoord2f(0.0f, 0.0f); glVertex2i(0, fbheight);
- /* bottom right */ - glTexCoord2f((float)fbwidth / (float)src_surface->pow2Width, 0.0f); - glVertex2i(fbwidth, src_surface->currentDesc.Height); + /* bottom left */ + glTexCoord2f(0.0f, (float)fbheight / (float)src_surface->pow2Height); + glVertex2i(0, 0);
- /* top right */ + /* bottom right */ glTexCoord2f((float)fbwidth / (float)src_surface->pow2Width, (float)fbheight / (float)src_surface->pow2Height); glVertex2i(fbwidth, 0); + + /* top right */ + glTexCoord2f((float)fbwidth / (float)src_surface->pow2Width, 0.0f); + glVertex2i(fbwidth, fbheight); glEnd(); } glDisable(texture_target); @@ -3368,16 +3363,13 @@ static void surface_blt_to_drawable(IWineD3DDeviceImpl *device, context = context_acquire(device, dst_surface); context_apply_blit_state(context, device);
- /* context_apply_blit_state() sets up a flipped (in GL terms) projection - * matrix. As a result, we need to skip the flip for onscreen surfaces, - * and have to flip for offscreen surfaces instead, to undo the flip done - * by the projection matrix. */ - if (swapchain && dst_surface == swapchain->front_buffer) - { - surface_translate_frontbuffer_coords(dst_surface, context->win_handle, &dst_rect); - } - else if (surface_is_offscreen(dst_surface)) + if (!surface_is_offscreen(dst_surface)) { + if (swapchain && dst_surface == swapchain->front_buffer) + { + surface_translate_frontbuffer_coords(dst_surface, context->win_handle, &dst_rect); + } + dst_rect.top = dst_surface->currentDesc.Height - dst_rect.top; dst_rect.bottom = dst_surface->currentDesc.Height - dst_rect.bottom; }