cleanup some lingering junk from earlier in gdi+ display method

This commit is contained in:
zeromus 2015-07-25 21:06:43 -05:00
parent db1130a8a3
commit b78f5802a3
2 changed files with 25 additions and 52 deletions

View File

@ -166,42 +166,21 @@ namespace BizHawk.Bizware.BizwareGL.Drivers.GdiPlus
var tw = Gdi.TextureWrapperForTexture(tex); var tw = Gdi.TextureWrapperForTexture(tex);
var g = Gdi.GetCurrentGraphics(); var g = Gdi.GetCurrentGraphics();
PrepDraw(g, tw); PrepDraw(g, tw);
SetupMatrix(g);
float x0 = u0 * tex.Width; float x0 = u0 * tex.Width;
float y0 = v0 * tex.Height; float y0 = v0 * tex.Height;
float x1 = u1 * tex.Width; float x1 = u1 * tex.Width;
float y1 = v1 * tex.Height; float y1 = v1 * tex.Height;
//==========HACKY COPYPASTE=============
//first we need to make a transform that will change us from the default GDI+ transformation (a top left identity transformation) to an opengl-styled one
//(this is necessary because a 'GuiProjectionMatrix' call doesnt have any sense of the size of the destination viewport it's meant for)
var vcb = g.VisibleClipBounds;
float vw = vcb.Width;
float vh = vcb.Height;
Matrix4 fixmat = Matrix4.CreateTranslation(vw / 2, -vh / 2, 0);
fixmat *= Matrix4.CreateScale(vw / 2, -vh / 2, 1);
//------------------
//( reminder: this is just an experiment: we need to turn this into a transform on the GraphicsDevice )
//------------------
Matrix4 mat = Projection.Top * Modelview.Top * fixmat;
var tl = new Vector3(x, y, 0);
var tr = new Vector3(x + w, y, 0);
var bl = new Vector3(x, y + h, 0);
tl = Vector3.Transform(tl, mat);
tr = Vector3.Transform(tr, mat);
bl = Vector3.Transform(bl, mat);
//=======================================
sd.PointF[] destPoints = new sd.PointF[] { sd.PointF[] destPoints = new sd.PointF[] {
tl.ToSDPointf(), new sd.PointF(x,y),
tr.ToSDPointf(), new sd.PointF(x+w,y),
bl.ToSDPointf(), new sd.PointF(x,y+h),
}; };
g.DrawImage(tw.SDBitmap, destPoints, new sd.RectangleF(x0, y0, x1 - x0, y1 - y0), sd.GraphicsUnit.Pixel, CurrentImageAttributes); g.DrawImage(tw.SDBitmap, destPoints, new sd.RectangleF(x0, y0, x1 - x0, y1 - y0), sd.GraphicsUnit.Pixel, CurrentImageAttributes);
//g.DrawImage(tw.SDBitmap, 0, 0); //test g.Transform = new sd.Drawing2D.Matrix(); //.Reset() doesnt work ? ?
} }
@ -252,43 +231,37 @@ namespace BizHawk.Bizware.BizwareGL.Drivers.GdiPlus
} }
unsafe void DrawInternal(Texture2d tex, float x, float y, float w, float h) private void SetupMatrix(sd.Graphics g)
{ {
var tw = Gdi.TextureWrapperForTexture(tex);
var g = Gdi.GetCurrentGraphics();
PrepDraw(g, tw);
//first we need to make a transform that will change us from the default GDI+ transformation (a top left identity transformation) to an opengl-styled one //first we need to make a transform that will change us from the default GDI+ transformation (a top left identity transformation) to an opengl-styled one
//(this is necessary because a 'GuiProjectionMatrix' call doesnt have any sense of the size of the destination viewport it's meant for) //(this is necessary because a 'GuiProjectionMatrix' etc. call doesnt have any sense of the size of the destination viewport it's meant for)
var vcb = g.VisibleClipBounds; var vcb = g.VisibleClipBounds;
float vw = vcb.Width; float vw = vcb.Width;
float vh = vcb.Height; float vh = vcb.Height;
Matrix4 fixmat = Matrix4.CreateTranslation(vw / 2, -vh / 2, 0); Matrix4 fixmat = Matrix4.CreateTranslation(vw / 2, -vh / 2, 0);
fixmat *= Matrix4.CreateScale(vw / 2, -vh / 2, 1); fixmat *= Matrix4.CreateScale(vw / 2, -vh / 2, 1);
//------------------
//( reminder: this is just an experiment: we need to turn this into a transform on the GraphicsDevice )
//------------------
Matrix4 mat = Projection.Top * Modelview.Top * fixmat; Matrix4 mat = Projection.Top * Modelview.Top * fixmat;
var tl = new Vector3(x, y, 0); g.Transform = new sd.Drawing2D.Matrix(mat.M11, mat.M12, mat.M21, mat.M22, mat.M41, mat.M42);
var tr = new Vector3(x + w, y, 0); }
var bl = new Vector3(x, y + h, 0);
tl = Vector3.Transform(tl, mat); unsafe void DrawInternal(Texture2d tex, float x, float y, float w, float h)
tr = Vector3.Transform(tr, mat); {
bl = Vector3.Transform(bl, mat); var tw = Gdi.TextureWrapperForTexture(tex);
var g = Gdi.GetCurrentGraphics();
PrepDraw(g, tw);
SetupMatrix(g);
//a little bit of a fastpath.. I think it's safe
//SO WHY DIDNT IT WORK?
//anyway, it would interfere with the transforming
//if (w == tex.Width && h == tex.Height && x == (int)x && y == (int)y)
// g.DrawImageUnscaled(tw.SDBitmap, (int)x, (int)y);
sd.PointF[] destPoints = new sd.PointF[] { sd.PointF[] destPoints = new sd.PointF[] {
tl.ToSDPointf(), new sd.PointF(x,y),
tr.ToSDPointf(), new sd.PointF(x+w,y),
bl.ToSDPointf(), new sd.PointF(x,y+h),
}; };
g.PixelOffsetMode = sd.Drawing2D.PixelOffsetMode.Half;
g.DrawImage(tw.SDBitmap, destPoints, new sd.RectangleF(0, 0, tex.Width, tex.Height), sd.GraphicsUnit.Pixel, CurrentImageAttributes); g.DrawImage(tw.SDBitmap, destPoints, new sd.RectangleF(0, 0, tex.Width, tex.Height), sd.GraphicsUnit.Pixel, CurrentImageAttributes);
g.Transform = new sd.Drawing2D.Matrix(); //.Reset() doesnt work ? ?
} }
unsafe void DrawInternal(Art art, float x, float y, float w, float h, bool fx, bool fy) unsafe void DrawInternal(Art art, float x, float y, float w, float h, bool fx, bool fy)

View File

@ -296,8 +296,8 @@ namespace BizHawk.Bizware.BizwareGL.Drivers.GdiPlus
{ {
Matrix4 ret = Matrix4.Identity; Matrix4 ret = Matrix4.Identity;
ret.M22 = -1.0f; ret.M22 = -1.0f;
ret.M41 = -(float)dims.Width * 0.5f; // -0.5f; ret.M41 = -(float)dims.Width * 0.5f;
ret.M42 = (float)dims.Height * 0.5f; // +0.5f; ret.M42 = (float)dims.Height * 0.5f;
return ret; return ret;
} }