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