hedgewars/uRender.pas
branchwebgl
changeset 8833 c13ebed437cb
parent 8330 aaefa587e277
parent 8626 cfc44db21d72
child 9127 e350500c4edb
equal deleted inserted replaced
8450:404ddce27b23 8833:c13ebed437cb
    25 
    25 
    26 uses SDLh, uTypes, GLunit, uConsts, uStore, uMatrix;
    26 uses SDLh, uTypes, GLunit, uConsts, uStore, uMatrix;
    27 
    27 
    28 procedure DrawSprite            (Sprite: TSprite; X, Y, Frame: LongInt);
    28 procedure DrawSprite            (Sprite: TSprite; X, Y, Frame: LongInt);
    29 procedure DrawSprite            (Sprite: TSprite; X, Y, FrameX, FrameY: LongInt);
    29 procedure DrawSprite            (Sprite: TSprite; X, Y, FrameX, FrameY: LongInt);
    30 procedure DrawSpriteFromRect    (Sprite: TSprite; r: TSDL_Rect; X, Y, Height, Position: LongInt);
    30 procedure DrawSpriteFromRect    (Sprite: TSprite; r: TSDL_Rect; X, Y, Height, Position: LongInt); inline;
    31 procedure DrawSpriteClipped     (Sprite: TSprite; X, Y, TopY, RightX, BottomY, LeftX: LongInt);
    31 procedure DrawSpriteClipped     (Sprite: TSprite; X, Y, TopY, RightX, BottomY, LeftX: LongInt);
    32 procedure DrawSpriteRotated     (Sprite: TSprite; X, Y, Dir: LongInt; Angle: real);
    32 procedure DrawSpriteRotated     (Sprite: TSprite; X, Y, Dir: LongInt; Angle: real);
    33 procedure DrawSpriteRotatedF    (Sprite: TSprite; X, Y, Frame, Dir: LongInt; Angle: real);
    33 procedure DrawSpriteRotatedF    (Sprite: TSprite; X, Y, Frame, Dir: LongInt; Angle: real);
    34 
    34 
    35 procedure DrawTexture           (X, Y: LongInt; Texture: PTexture); inline;
    35 procedure DrawTexture           (X, Y: LongInt; Texture: PTexture); inline;
    36 procedure DrawTexture           (X, Y: LongInt; Texture: PTexture; Scale: GLfloat);
    36 procedure DrawTexture           (X, Y: LongInt; Texture: PTexture; Scale: GLfloat);
    37 procedure DrawTextureFromRect   (X, Y: LongInt; r: PSDL_Rect; SourceTexture: PTexture);
    37 procedure DrawTextureFromRect   (X, Y: LongInt; r: PSDL_Rect; SourceTexture: PTexture); inline;
    38 procedure DrawTextureFromRect   (X, Y, W, H: LongInt; r: PSDL_Rect; SourceTexture: PTexture);
    38 procedure DrawTextureFromRect   (X, Y, W, H: LongInt; r: PSDL_Rect; SourceTexture: PTexture); inline;
       
    39 procedure DrawTextureFromRectDir(X, Y, W, H: LongInt; r: PSDL_Rect; SourceTexture: PTexture; Dir: LongInt);
    39 procedure DrawTextureCentered   (X, Top: LongInt; Source: PTexture);
    40 procedure DrawTextureCentered   (X, Top: LongInt; Source: PTexture);
    40 procedure DrawTextureF          (Texture: PTexture; Scale: GLfloat; X, Y, Frame, Dir, w, h: LongInt);
    41 procedure DrawTextureF          (Texture: PTexture; Scale: GLfloat; X, Y, Frame, Dir, w, h: LongInt);
    41 procedure DrawTextureRotated    (Texture: PTexture; hw, hh, X, Y, Dir: LongInt; Angle: real);
    42 procedure DrawTextureRotated    (Texture: PTexture; hw, hh, X, Y, Dir: LongInt; Angle: real);
    42 procedure DrawTextureRotatedF   (Texture: PTexture; Scale, OffsetX, OffsetY: GLfloat; X, Y, Frame, Dir, w, h: LongInt; Angle: real);
    43 procedure DrawTextureRotatedF   (Texture: PTexture; Scale, OffsetX, OffsetY: GLfloat; X, Y, Frame, Dir, w, h: LongInt; Angle: real);
    43 
    44 
    61     MOVE_ANIM_TIME = 500;
    62     MOVE_ANIM_TIME = 500;
    62 {$ENDIF}
    63 {$ENDIF}
    63 
    64 
    64 var LastTint: LongWord = 0;
    65 var LastTint: LongWord = 0;
    65 
    66 
    66 procedure DrawSpriteFromRect(Sprite: TSprite; r: TSDL_Rect; X, Y, Height, Position: LongInt);
    67 procedure DrawSpriteFromRect(Sprite: TSprite; r: TSDL_Rect; X, Y, Height, Position: LongInt); inline;
    67 begin
    68 begin
    68 r.y:= r.y + Height * Position;
    69 r.y:= r.y + Height * Position;
    69 r.h:= Height;
    70 r.h:= Height;
    70 DrawTextureFromRect(X, Y, @r, SpritesData[Sprite].Texture)
    71 DrawTextureFromRect(X, Y, @r, SpritesData[Sprite].Texture)
    71 end;
    72 end;
    72 
    73 
    73 procedure DrawTextureFromRect(X, Y: LongInt; r: PSDL_Rect; SourceTexture: PTexture);
    74 procedure DrawTextureFromRect(X, Y: LongInt; r: PSDL_Rect; SourceTexture: PTexture); inline;
    74 begin
    75 begin
    75 DrawTextureFromRect(X, Y, r^.w, r^.h, r, SourceTexture)
    76 DrawTextureFromRectDir(X, Y, r^.w, r^.h, r, SourceTexture, 1)
    76 end;
    77 end;
    77 {
    78 
    78 procedure DrawTextureFromRect(X, Y, W, H: LongInt; r: PSDL_Rect; SourceTexture: PTexture);
    79 procedure DrawTextureFromRect(X, Y, W, H: LongInt; r: PSDL_Rect; SourceTexture: PTexture); inline;
       
    80 begin
       
    81 DrawTextureFromRectDir(X, Y, W, H, r, SourceTexture, 1)
       
    82 end;
       
    83 
       
    84 procedure DrawTextureFromRectDir(X, Y, W, H: LongInt; r: PSDL_Rect; SourceTexture: PTexture; Dir: LongInt);
    79 var rr: TSDL_Rect;
    85 var rr: TSDL_Rect;
    80     _l, _r, _t, _b: real;
    86     _l, _r, _t, _b: real;
    81     VertexBuffer, TextureBuffer: array [0..3] of TVertex2f;
    87     VertexBuffer, TextureBuffer: array [0..3] of TVertex2f;
    82 begin
    88 begin
    83 if (SourceTexture^.h = 0) or (SourceTexture^.w = 0) then
    89 if (SourceTexture^.h = 0) or (SourceTexture^.w = 0) then
    99 _t:= r^.y / SourceTexture^.h * SourceTexture^.ry;
   105 _t:= r^.y / SourceTexture^.h * SourceTexture^.ry;
   100 _b:= (r^.y + r^.h) / SourceTexture^.h * SourceTexture^.ry;
   106 _b:= (r^.y + r^.h) / SourceTexture^.h * SourceTexture^.ry;
   101 
   107 
   102 glBindTexture(GL_TEXTURE_2D, SourceTexture^.id);
   108 glBindTexture(GL_TEXTURE_2D, SourceTexture^.id);
   103 
   109 
   104 VertexBuffer[0].X:= X;
   110 if Dir < 0 then
   105 VertexBuffer[0].Y:= Y;
   111     begin
   106 VertexBuffer[1].X:= rr.w + X;
   112     VertexBuffer[0].X:= X + rr.w/2;
   107 VertexBuffer[1].Y:= Y;
   113     VertexBuffer[0].Y:= Y;
   108 VertexBuffer[2].X:= rr.w + X;
   114     VertexBuffer[1].X:= X - rr.w/2;
   109 VertexBuffer[2].Y:= rr.h + Y;
   115     VertexBuffer[1].Y:= Y;
   110 VertexBuffer[3].X:= X;
   116     VertexBuffer[2].X:= X - rr.w/2;
   111 VertexBuffer[3].Y:= rr.h + Y;
   117     VertexBuffer[2].Y:= rr.h + Y;
       
   118     VertexBuffer[3].X:= X + rr.w/2;
       
   119     VertexBuffer[3].Y:= rr.h + Y;
       
   120     end
       
   121 else
       
   122     begin
       
   123     VertexBuffer[0].X:= X;
       
   124     VertexBuffer[0].Y:= Y;
       
   125     VertexBuffer[1].X:= rr.w + X;
       
   126     VertexBuffer[1].Y:= Y;
       
   127     VertexBuffer[2].X:= rr.w + X;
       
   128     VertexBuffer[2].Y:= rr.h + Y;
       
   129     VertexBuffer[3].X:= X;
       
   130     VertexBuffer[3].Y:= rr.h + Y;
       
   131     end;
   112 
   132 
   113 TextureBuffer[0].X:= _l;
   133 TextureBuffer[0].X:= _l;
   114 TextureBuffer[0].Y:= _t;
   134 TextureBuffer[0].Y:= _t;
   115 TextureBuffer[1].X:= _r;
   135 TextureBuffer[1].X:= _r;
   116 TextureBuffer[1].Y:= _t;
   136 TextureBuffer[1].Y:= _t;
   121 
   141 
   122 glVertexPointer(2, GL_FLOAT, 0, @VertexBuffer[0]);
   142 glVertexPointer(2, GL_FLOAT, 0, @VertexBuffer[0]);
   123 glTexCoordPointer(2, GL_FLOAT, 0, @TextureBuffer[0]);
   143 glTexCoordPointer(2, GL_FLOAT, 0, @TextureBuffer[0]);
   124 glDrawArrays(GL_TRIANGLE_FAN, 0, High(VertexBuffer) - Low(VertexBuffer) + 1);
   144 glDrawArrays(GL_TRIANGLE_FAN, 0, High(VertexBuffer) - Low(VertexBuffer) + 1);
   125 end;
   145 end;
   126 }
   146 
   127 
   147 
   128 procedure DrawTextureFromRect(X, Y, W, H: LongInt; r: PSDL_Rect; SourceTexture: PTexture);
   148 procedure DrawTextureFromRectDir(X, Y, W, H: LongInt; r: PSDL_Rect; SourceTexture: PTexture);
   129 var
   149 var
   130     rr: TSDL_Rect;
   150     rr: TSDL_Rect;
   131     VertexBuffer, TextureBuffer: array [0..3] of TVertex2f;
   151     VertexBuffer, TextureBuffer: array [0..3] of TVertex2f;
   132     //VertexBuffer, TextureBuffer: TVertexRect;
   152     //VertexBuffer, TextureBuffer: TVertexRect;
   133     _l, _r, _t, _b: GLfloat;
   153     _l, _r, _t, _b: GLfloat;