diff -r 30b5fab302f6 -r eda8d563f677 hedgewars/uWorld.pas --- a/hedgewars/uWorld.pas Sun Jun 15 23:48:06 2014 +0200 +++ b/hedgewars/uWorld.pas Mon Jun 16 02:23:37 2014 +0200 @@ -792,9 +792,14 @@ procedure DrawWater(Alpha: byte; OffsetY: LongInt); var VertexBuffer : array [0..3] of TVertex2f; - r : TSDL_Rect; - lw, lh : GLfloat; + topy: LongInt; begin + // Water +topy:= OffsetY + WorldDy + cWaterLine; + +if topy > ViewBottomY then + exit; + if SuddenDeathDmg then begin SDWaterColorArray[0].a := Alpha; @@ -810,41 +815,40 @@ WaterColorArray[3].a := Alpha end; -lw:= cScreenWidth / cScaleFactor; -lh:= trunc(cScreenHeight / cScaleFactor) + cScreenHeight div 2 + 16; - - // Water -r.y:= OffsetY + WorldDy + cWaterLine; -if WorldDy < trunc(cScreenHeight / cScaleFactor) + cScreenHeight div 2 - cWaterLine then - begin - if r.y < 0 then - r.y:= 0; +if topy < 0 then + topy:= 0; - glDisable(GL_TEXTURE_2D); - VertexBuffer[0].X:= -lw; - VertexBuffer[0].Y:= r.y; - VertexBuffer[1].X:= lw; - VertexBuffer[1].Y:= r.y; - VertexBuffer[2].X:= lw; - VertexBuffer[2].Y:= lh; - VertexBuffer[3].X:= -lw; - VertexBuffer[3].Y:= lh; +glDisable(GL_TEXTURE_2D); +VertexBuffer[0].X:= -ViewWidth; +VertexBuffer[0].Y:= topy; +VertexBuffer[1].X:= ViewWidth; +VertexBuffer[1].Y:= topy; +VertexBuffer[2].X:= ViewWidth; +VertexBuffer[2].Y:= ViewBottomY; +VertexBuffer[3].X:= -ViewWidth; +VertexBuffer[3].Y:= ViewBottomY; - DrawWaterBody(@VertexBuffer[0]); +DrawWaterBody(@VertexBuffer[0]); {$IFNDEF GL2} - // must not be Tint() as color array seems to stay active and color reset is required - glColor4ub($FF, $FF, $FF, $FF); +// must not be Tint() as color array seems to stay active and color reset is required +glColor4ub($FF, $FF, $FF, $FF); {$ENDIF} - glEnable(GL_TEXTURE_2D); - end; +glEnable(GL_TEXTURE_2D); end; procedure DrawWaves(Dir, dX, dY: LongInt; tnt: Byte); var VertexBuffer, TextureBuffer: array [0..3] of TVertex2f; lw, waves, shift: GLfloat; sprite: TSprite; + topy: LongInt; begin + +topy:= cWaterLine + WorldDy + dY; + +if topY > ViewBottomY then + exit; + if SuddenDeathDmg then sprite:= sprSDWater else @@ -852,7 +856,7 @@ cWaveWidth:= SpritesData[sprite].Width; -lw:= cScreenWidth / cScaleFactor; +lw:= ViewWidth; waves:= lw * 2 / cWaveWidth; if SuddenDeathDmg then