Module: wine
Branch: refs/heads/master
Commit: 5b8b776431d34ffc18ac02123bb58bd31fc54f9a
URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=5b8b776431d34ffc18ac021…
Author: Stefan Dösinger <stefan(a)codeweavers.com>
Date: Thu May 25 11:40:36 2006 +0200
wined3d: Small rhw vertex fix.
Fix the one pixel displacement and move the glOrtho code in a common
function.
---
dlls/wined3d/drawprim.c | 86 ++++++++++++++++++++--------------------
dlls/wined3d/surface.c | 71 +--------------------------------
dlls/wined3d/wined3d_private.h | 3 -
3 files changed, 47 insertions(+), 113 deletions(-)
diff --git a/dlls/wined3d/drawprim.c b/dlls/wined3d/drawprim.c
index b78e3d6..6e703eb 100644
--- a/dlls/wined3d/drawprim.c
+++ b/dlls/wined3d/drawprim.c
@@ -180,6 +180,49 @@ static GLfloat invymat[16] = {
0.0f, 0.0f, 1.0f, 0.0f,
0.0f, 0.0f, 0.0f, 1.0f};
+void d3ddevice_set_ortho(IWineD3DDeviceImpl *This) {
+ /* If the last draw was transformed as well, no need to reapply all the matrixes */
+ if ( (!This->last_was_rhw) || (This->viewport_changed) ) {
+
+ double X, Y, height, width, minZ, maxZ;
+ This->last_was_rhw = TRUE;
+ This->viewport_changed = FALSE;
+
+ /* Transformed already into viewport coordinates, so we do not need transform
+ matrices. Reset all matrices to identity and leave the default matrix in world
+ mode. */
+ glMatrixMode(GL_MODELVIEW);
+ checkGLcall("glMatrixMode(GL_MODELVIEW)");
+ glLoadIdentity();
+ checkGLcall("glLoadIdentity");
+
+ glMatrixMode(GL_PROJECTION);
+ checkGLcall("glMatrixMode(GL_PROJECTION)");
+ glLoadIdentity();
+ checkGLcall("glLoadIdentity");
+
+ /* Set up the viewport to be full viewport */
+ X = This->stateBlock->viewport.X;
+ Y = This->stateBlock->viewport.Y;
+ height = This->stateBlock->viewport.Height;
+ width = This->stateBlock->viewport.Width;
+ minZ = This->stateBlock->viewport.MinZ;
+ maxZ = This->stateBlock->viewport.MaxZ;
+ TRACE("Calling glOrtho with %f, %f, %f, %f\n", width, height, -minZ, -maxZ);
+ glOrtho(X, X + width, Y + height, Y, -minZ, -maxZ);
+ checkGLcall("glOrtho");
+
+ /* Window Coord 0 is the middle of the first pixel, so translate by half
+ a pixel (See comment above glTranslate below) */
+ glTranslatef(0.375, 0.375, 0);
+ checkGLcall("glTranslatef(0.375, 0.375, 0)");
+ if (This->renderUpsideDown) {
+ glMultMatrixf(invymat);
+ checkGLcall("glMultMatrixf(invymat)");
+ }
+ }
+
+}
/* Setup views - Transformed & lit if RHW, else untransformed.
Only unlit if Normals are supplied
Returns: Whether to restore lighting afterwards */
@@ -198,48 +241,7 @@ static BOOL primitiveInitState(IWineD3DD
}
if (!useVS && vtx_transformed) {
-
- /* If the last draw was transformed as well, no need to reapply all the matrixes */
- if ( (!This->last_was_rhw) || (This->viewport_changed) ) {
-
- double X, Y, height, width, minZ, maxZ;
- This->last_was_rhw = TRUE;
- This->viewport_changed = FALSE;
-
- /* Transformed already into viewport coordinates, so we do not need transform
- matrices. Reset all matrices to identity and leave the default matrix in world
- mode. */
- glMatrixMode(GL_MODELVIEW);
- checkGLcall("glMatrixMode(GL_MODELVIEW)");
- glLoadIdentity();
- checkGLcall("glLoadIdentity");
-
- glMatrixMode(GL_PROJECTION);
- checkGLcall("glMatrixMode(GL_PROJECTION)");
- glLoadIdentity();
- checkGLcall("glLoadIdentity");
-
- /* Set up the viewport to be full viewport */
- X = This->stateBlock->viewport.X;
- Y = This->stateBlock->viewport.Y;
- height = This->stateBlock->viewport.Height;
- width = This->stateBlock->viewport.Width;
- minZ = This->stateBlock->viewport.MinZ;
- maxZ = This->stateBlock->viewport.MaxZ;
- TRACE("Calling glOrtho with %f, %f, %f, %f\n", width, height, -minZ, -maxZ);
- glOrtho(X, X + width, Y + height, Y, -minZ, -maxZ);
- checkGLcall("glOrtho");
-
- /* Window Coord 0 is the middle of the first pixel, so translate by half
- a pixel (See comment above glTranslate below) */
- glTranslatef(0.5, 0.5, 0);
- checkGLcall("glTranslatef(0.5, 0.5, 0)");
- if (This->renderUpsideDown) {
- glMultMatrixf(invymat);
- checkGLcall("glMultMatrixf(invymat)");
- }
- }
-
+ d3ddevice_set_ortho(This);
} else {
/* Untransformed, so relies on the view and projection matrices */
diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
index 301f7df..7932667 100644
--- a/dlls/wined3d/surface.c
+++ b/dlls/wined3d/surface.c
@@ -780,41 +780,7 @@ HRESULT WINAPI IWineD3DSurfaceImpl_Unloc
/* glDrawPixels transforms the raster position as though it was a vertex -
we want to draw at screen position 0,0 - Set up ortho (rhw) mode as
per drawprim (and leave set - it will sort itself out due to last_was_rhw */
- if ( (!myDevice->last_was_rhw) || (myDevice->viewport_changed) ) {
-
- double X, Y, height, width, minZ, maxZ;
- myDevice->last_was_rhw = TRUE;
- myDevice->viewport_changed = FALSE;
-
- /* Transformed already into viewport coordinates, so we do not need transform
- matrices. Reset all matrices to identity and leave the default matrix in world
- mode. */
- glMatrixMode(GL_MODELVIEW);
- checkGLcall("glMatrixMode");
- glLoadIdentity();
- checkGLcall("glLoadIdentity");
-
- glMatrixMode(GL_PROJECTION);
- checkGLcall("glMatrixMode");
- glLoadIdentity();
- checkGLcall("glLoadIdentity");
-
- /* Set up the viewport to be full viewport */
- X = myDevice->stateBlock->viewport.X;
- Y = myDevice->stateBlock->viewport.Y;
- height = myDevice->stateBlock->viewport.Height;
- width = myDevice->stateBlock->viewport.Width;
- minZ = myDevice->stateBlock->viewport.MinZ;
- maxZ = myDevice->stateBlock->viewport.MaxZ;
- TRACE("Calling glOrtho with %f, %f, %f, %f\n", width, height, -minZ, -maxZ);
- glOrtho(X, X + width, Y + height, Y, -minZ, -maxZ);
- checkGLcall("glOrtho");
-
- /* Window Coord 0 is the middle of the first pixel, so translate by half
- a pixel (See comment above glTranslate below) */
- glTranslatef(0.5, 0.5, 0);
- checkGLcall("glTranslatef(0.5, 0.5, 0)");
- }
+ d3ddevice_set_ortho(This->resource.wineD3DDevice);
if (iface == implSwapChain->backBuffer || iface == myDevice->renderTarget) {
glDrawBuffer(GL_BACK);
@@ -2192,40 +2158,7 @@ HRESULT WINAPI IWineD3DSurfaceImpl_BltOv
/* Draw a textured quad
*/
- if ( TRUE ) {
- double X, Y, height, width, minZ, maxZ;
- myDevice->last_was_rhw = FALSE;
- myDevice->viewport_changed = FALSE;
-
- /* Transformed already into viewport coordinates, so we do not need transform
- matrices. Reset all matrices to identity and leave the default matrix in world
- mode. */
- glMatrixMode(GL_MODELVIEW);
- checkGLcall("glMatrixMode");
- glLoadIdentity();
- checkGLcall("glLoadIdentity");
-
- glMatrixMode(GL_PROJECTION);
- checkGLcall("glMatrixMode");
- glLoadIdentity();
- checkGLcall("glLoadIdentity");
-
- /* Set up the viewport to be full viewport */
- X = myDevice->stateBlock->viewport.X;
- Y = myDevice->stateBlock->viewport.Y;
- height = myDevice->stateBlock->viewport.Height;
- width = myDevice->stateBlock->viewport.Width;
- minZ = myDevice->stateBlock->viewport.MinZ;
- maxZ = myDevice->stateBlock->viewport.MaxZ;
- TRACE("Calling glOrtho with %f, %f, %f, %f\n", width, height, -minZ, -maxZ);
- glOrtho(X, X + width, Y + height, Y, -minZ, -maxZ);
- checkGLcall("glOrtho");
-
- /* Window Coord 0 is the middle of the first pixel, so translate by half
- a pixel (See comment above glTranslate below) */
- glTranslatef(0.375, 0.375, 0);
- checkGLcall("glTranslatef(0.375, 0.375, 0)");
- }
+ d3ddevice_set_ortho(This->resource.wineD3DDevice);
glBegin(GL_QUADS);
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index a0a4414..7e53955 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -597,8 +597,7 @@ typedef struct PrivateData
DWORD size;
} PrivateData;
-/* OpenGL ortho matrix setup */
-void d3ddevice_set_ortho(IWineD3DDeviceImpl *This, BOOL dontclip);
+void d3ddevice_set_ortho(IWineD3DDeviceImpl *This);
/*****************************************************************************
* IWineD3DResource implementation structure