# HG changeset patch # User sheepluva # Date 1402700171 -7200 # Node ID 6a225b469eef08faa6c2946a6fc23daecd3b717d # Parent f70b2fb8acabf026f242a73a8cee26a2a9346557 some rendering tweaks diff -r f70b2fb8acab -r 6a225b469eef hedgewars/uRender.pas --- a/hedgewars/uRender.pas Fri Jun 13 23:43:34 2014 +0200 +++ b/hedgewars/uRender.pas Sat Jun 14 00:56:11 2014 +0200 @@ -330,7 +330,7 @@ procedure DrawTextureRotatedF(Texture: PTexture; Scale, OffsetX, OffsetY: GLfloat; X, Y, Frame, Dir, w, h: LongInt; Angle: real); var ft, fb, fl, fr: GLfloat; - hw, nx, ny: LongInt; + hw, hh, nx, ny: LongInt; VertexBuffer, TextureBuffer: array [0..3] of TVertex2f; begin // do not draw anything outside the visible screen space (first check fixes some sprite drawing, e.g. hedgehogs) @@ -340,22 +340,32 @@ exit; openglPushMatrix; + openglTranslatef(X, Y, 0); if Dir = 0 then Dir:= 1; -openglRotatef(Angle, 0, 0, Dir); +if Angle <> 0 then + openglRotatef(Angle, 0, 0, Dir); -openglTranslatef(Dir*OffsetX, OffsetY, 0); -openglScalef(Scale, Scale, 1); +if (OffsetX <> 0) or (OffsetY <> 0) then + openglTranslatef(Dir*OffsetX, OffsetY, 0); + +if Scale <> 1.0 then + openglScalef(Scale, Scale, 1); // Any reason for this call? And why only in t direction, not s? //glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); -hw:= w div (2 div Dir); +if Dir > 0 then + hw:= w div 2 +else + hw:= -w div 2; -nx:= round(Texture^.w / w); // number of horizontal frames -ny:= round(Texture^.h / h); // number of vertical frames +hh:= h div 2; + +nx:= Texture^.w div w; // number of horizontal frames +ny:= Texture^.h div h; // number of vertical frames ft:= (Frame mod ny) * Texture^.ry / ny; fb:= ((Frame mod ny) + 1) * Texture^.ry / ny; @@ -365,13 +375,13 @@ glBindTexture(GL_TEXTURE_2D, Texture^.id); VertexBuffer[0].X:= -hw; -VertexBuffer[0].Y:= w / -2; -VertexBuffer[1].X:= hw; -VertexBuffer[1].Y:= w / -2; -VertexBuffer[2].X:= hw; -VertexBuffer[2].Y:= w / 2; +VertexBuffer[0].Y:= -hh; +VertexBuffer[1].X:= hw; +VertexBuffer[1].Y:= -hh; +VertexBuffer[2].X:= hw; +VertexBuffer[2].Y:= hh; VertexBuffer[3].X:= -hw; -VertexBuffer[3].Y:= w / 2; +VertexBuffer[3].Y:= hh; TextureBuffer[0].X:= fl; TextureBuffer[0].Y:= ft; diff -r f70b2fb8acab -r 6a225b469eef hedgewars/uVisualGears.pas --- a/hedgewars/uVisualGears.pas Fri Jun 13 23:43:34 2014 +0200 +++ b/hedgewars/uVisualGears.pas Sat Jun 14 00:56:11 2014 +0200 @@ -132,9 +132,9 @@ if Gear^.Tint <> $FFFFFFFF then Tint(Gear^.Tint); case Gear^.Kind of vgtCloud: if SuddenDeathDmg then - DrawTextureF(SpritesData[sprSDCloud].Texture, Gear^.Scale, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 2, SpritesData[sprCloud].Width, SpritesData[sprCloud].Height) + DrawTextureF(SpritesData[sprSDCloud].Texture, Gear^.Scale, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, SpritesData[sprCloud].Width, SpritesData[sprCloud].Height) else - DrawTextureF(SpritesData[sprCloud].Texture, Gear^.Scale, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 2, SpritesData[sprCloud].Width, SpritesData[sprCloud].Height); + DrawTextureF(SpritesData[sprCloud].Texture, Gear^.Scale, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, SpritesData[sprCloud].Width, SpritesData[sprCloud].Height); vgtFlake: if cFlattenFlakes then begin if SuddenDeathDmg then @@ -384,9 +384,9 @@ Tint(Gear^.Tint); case Gear^.Kind of vgtCloud: if SuddenDeathDmg then - DrawTextureF(SpritesData[sprSDCloud].Texture, Gear^.Scale, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 2, SpritesData[sprCloud].Width, SpritesData[sprCloud].Height) + DrawTextureF(SpritesData[sprSDCloud].Texture, Gear^.Scale, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, SpritesData[sprCloud].Width, SpritesData[sprCloud].Height) else - DrawTextureF(SpritesData[sprCloud].Texture, Gear^.Scale, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 2, SpritesData[sprCloud].Width, SpritesData[sprCloud].Height); + DrawTextureF(SpritesData[sprCloud].Texture, Gear^.Scale, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, SpritesData[sprCloud].Width, SpritesData[sprCloud].Height); vgtFlake: if SuddenDeathDmg then if vobSDVelocity = 0 then DrawTextureF(SpritesData[sprSDFlake].Texture, Gear^.Scale, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, SpritesData[sprFlake].Width, SpritesData[sprFlake].Height)