hedgewars/uRender.pas
changeset 7138 f8248bcba8f1
parent 7111 5ba5a92d74fb
child 7188 580cd247511e
equal deleted inserted replaced
7136:6f3c9ec79338 7138:f8248bcba8f1
    22 
    22 
    23 interface
    23 interface
    24 
    24 
    25 uses SDLh, uTypes, GLunit, uConsts, uTextures, math;
    25 uses SDLh, uTypes, GLunit, uConsts, uTextures, math;
    26 
    26 
    27 procedure initModule;
       
    28 
       
    29 procedure DrawSprite            (Sprite: TSprite; X, Y, Frame: LongInt);
    27 procedure DrawSprite            (Sprite: TSprite; X, Y, Frame: LongInt);
    30 procedure DrawSprite            (Sprite: TSprite; X, Y, FrameX, FrameY: LongInt);
    28 procedure DrawSprite            (Sprite: TSprite; X, Y, FrameX, FrameY: LongInt);
    31 procedure DrawSpriteFromRect    (Sprite: TSprite; r: TSDL_Rect; X, Y, Height, Position: LongInt);
    29 procedure DrawSpriteFromRect    (Sprite: TSprite; r: TSDL_Rect; X, Y, Height, Position: LongInt);
    32 procedure DrawSpriteClipped     (Sprite: TSprite; X, Y, TopY, RightX, BottomY, LeftX: LongInt);
    30 procedure DrawSpriteClipped     (Sprite: TSprite; X, Y, TopY, RightX, BottomY, LeftX: LongInt);
    33 procedure DrawSpriteRotated     (Sprite: TSprite; X, Y, Dir: LongInt; Angle: real);
    31 procedure DrawSpriteRotated     (Sprite: TSprite; X, Y, Dir: LongInt; Angle: real);
    59 procedure SetOffset(X, Y: Longint);
    57 procedure SetOffset(X, Y: Longint);
    60 procedure ResetRotation;
    58 procedure ResetRotation;
    61 
    59 
    62 
    60 
    63 implementation
    61 implementation
    64 uses uVariables;
    62 uses uVariables, uStore;
    65 
    63 
    66 var LastTint: LongWord = 0;
    64 var LastTint: LongWord = 0;
    67     Modelview: TMatrix4x4f;
       
    68 
    65 
    69 const DegToRad =  0.01745329252; // 2PI / 360
    66 const DegToRad =  0.01745329252; // 2PI / 360
    70 
    67 
    71 procedure UpdateModelview;
    68 procedure UpdateModelview;
    72 begin
    69 begin
    73 glLoadMatrixf(@Modelview[0,0]);
    70 {$IFDEF GL2}
       
    71     UpdateModelviewProjection;
       
    72 {$ELSE}
       
    73     glLoadMatrixf(@mModelview[0,0]);
       
    74 {$ENDIF}
    74 end;
    75 end;
    75 
    76 
    76 procedure ResetModelview;
    77 procedure ResetModelview;
    77 begin
    78 begin
    78 Modelview[0,0]:= 1.0; Modelview[1,0]:=0.0; Modelview[3,0]:= 0;
    79     mModelview[0,0]:= 1.0; mModelview[1,0]:=0.0; mModelview[3,0]:= 0;
    79 Modelview[0,1]:= 0.0; Modelview[1,1]:=1.0; Modelview[3,1]:= 0;
    80     mModelview[0,1]:= 0.0; mModelview[1,1]:=1.0; mModelview[3,1]:= 0;
    80 UpdateModelview;
    81     UpdateModelview;
    81 end;
    82 end;
    82 
    83 
    83 procedure SetOffset(X, Y: Longint);
    84 procedure SetOffset(X, Y: Longint);
    84 begin
    85 begin
    85 Modelview[3,0]:= X;
    86     mModelview[3,0]:= X;
    86 Modelview[3,1]:= Y;
    87     mModelview[3,1]:= Y;
    87 end;
    88 end;
    88 
    89 
    89 procedure AddOffset(X, Y: GLfloat); // probably want to refactor this to use integers
    90 procedure AddOffset(X, Y: GLfloat); // probably want to refactor this to use integers
    90 begin
    91 begin
    91 Modelview[3,0]:=Modelview[3,0] + Modelview[0,0]*X + Modelview[1,0]*Y;
    92     mModelview[3,0]:=mModelview[3,0] + mModelview[0,0]*X + mModelview[1,0]*Y;
    92 Modelview[3,1]:=Modelview[3,1] + Modelview[0,1]*X + Modelview[1,1]*Y;
    93     mModelview[3,1]:=mModelview[3,1] + mModelview[0,1]*X + mModelview[1,1]*Y;
    93 end;
    94 end;
    94 
    95 
    95 procedure SetScale(Scale: GLfloat);
    96 procedure SetScale(Scale: GLfloat);
    96 begin
    97 begin
    97 Modelview[0,0]:= Scale;
    98     mModelview[0,0]:= Scale;
    98 Modelview[1,1]:= Scale;
    99     mModelview[1,1]:= Scale;
    99 end;
   100 end;
   100 
   101 
   101 procedure AddScale(Scale: GLfloat);
   102 procedure AddScale(Scale: GLfloat);
   102 begin
   103 begin
   103 Modelview[0,0]:= Modelview[0,0]*Scale; Modelview[1,0]:= Modelview[1,0]*Scale;
   104     mModelview[0,0]:= mModelview[0,0]*Scale; mModelview[1,0]:= mModelview[1,0]*Scale;
   104 Modelview[0,1]:= Modelview[0,1]*Scale; Modelview[1,1]:= Modelview[1,1]*Scale;
   105     mModelview[0,1]:= mModelview[0,1]*Scale; mModelview[1,1]:= mModelview[1,1]*Scale;
   105 end;
   106 end;
   106 
   107 
   107 procedure AddScale(X, Y: GLfloat);
   108 procedure AddScale(X, Y: GLfloat);
   108 begin
   109 begin
   109 Modelview[0,0]:= Modelview[0,0]*X; Modelview[1,0]:= Modelview[1,0]*Y;
   110     mModelview[0,0]:= mModelview[0,0]*X; mModelview[1,0]:= mModelview[1,0]*Y;
   110 Modelview[0,1]:= Modelview[0,1]*X; Modelview[1,1]:= Modelview[1,1]*Y;
   111     mModelview[0,1]:= mModelview[0,1]*X; mModelview[1,1]:= mModelview[1,1]*Y;
   111 end;
   112 end;
   112 
   113 
   113 
   114 
   114 procedure SetRotation(Angle, ZAxis: GLfloat);
   115 procedure SetRotation(Angle, ZAxis: GLfloat);
   115 var s, c: Extended;
   116 var s, c: Extended;
   116 begin
   117 begin
   117 SinCos(Angle*DegToRad, s, c);
   118     SinCos(Angle*DegToRad, s, c);
   118 Modelview[0,0]:= c;       Modelview[1,0]:=-s*ZAxis;
   119     mModelview[0,0]:= c;       mModelview[1,0]:=-s*ZAxis;
   119 Modelview[0,1]:= s*ZAxis; Modelview[1,1]:= c;
   120     mModelview[0,1]:= s*ZAxis; mModelview[1,1]:= c;
   120 end;
   121 end;
   121 
   122 
   122 procedure ResetRotation;
   123 procedure ResetRotation;
   123 begin
   124 begin
   124 Modelview[0,0]:= 1.0; Modelview[1,0]:=0.0;
   125     mModelview[0,0]:= 1.0; mModelview[1,0]:=0.0;
   125 Modelview[0,1]:= 0.0; Modelview[1,1]:=1.0;
   126     mModelview[0,1]:= 0.0; mModelview[1,1]:=1.0;
   126 end;
       
   127 
       
   128 procedure LoadIdentity(out Matrix: TMatrix4x4f);
       
   129 begin
       
   130 Matrix[0,0]:= 1.0; Matrix[1,0]:=0.0; Matrix[2,0]:=0.0; Matrix[3,0]:=0.0;
       
   131 Matrix[0,1]:= 0.0; Matrix[1,1]:=1.0; Matrix[2,1]:=0.0; Matrix[3,1]:=0.0;
       
   132 Matrix[0,2]:= 0.0; Matrix[1,2]:=0.0; Matrix[2,2]:=1.0; Matrix[3,2]:=0.0;
       
   133 Matrix[0,3]:= 0.0; Matrix[1,3]:=0.0; Matrix[2,3]:=0.0; Matrix[3,3]:=1.0;
       
   134 end;
   127 end;
   135 
   128 
   136 procedure DrawSpriteFromRect(Sprite: TSprite; r: TSDL_Rect; X, Y, Height, Position: LongInt);
   129 procedure DrawSpriteFromRect(Sprite: TSprite; r: TSDL_Rect; X, Y, Height, Position: LongInt);
   137 begin
   130 begin
   138 r.y:= r.y + Height * Position;
   131 r.y:= r.y + Height * Position;
   578 procedure Tint(c: Longword); inline;
   571 procedure Tint(c: Longword); inline;
   579 begin
   572 begin
   580     Tint(((c shr 24) and $FF), ((c shr 16) and $FF), (c shr 8) and $FF, (c and $FF))
   573     Tint(((c shr 24) and $FF), ((c shr 16) and $FF), (c shr 8) and $FF, (c and $FF))
   581 end;
   574 end;
   582 
   575 
   583 procedure initModule;
       
   584 begin
       
   585 LoadIdentity(Modelview);
       
   586 end;
       
   587 
       
   588 end.
   576 end.