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; |