142 glVertexPointer(2, GL_FLOAT, 0, @VertexBuffer[0]); |
142 glVertexPointer(2, GL_FLOAT, 0, @VertexBuffer[0]); |
143 glTexCoordPointer(2, GL_FLOAT, 0, @TextureBuffer[0]); |
143 glTexCoordPointer(2, GL_FLOAT, 0, @TextureBuffer[0]); |
144 glDrawArrays(GL_TRIANGLE_FAN, 0, High(VertexBuffer) - Low(VertexBuffer) + 1); |
144 glDrawArrays(GL_TRIANGLE_FAN, 0, High(VertexBuffer) - Low(VertexBuffer) + 1); |
145 end; |
145 end; |
146 |
146 |
147 |
|
148 procedure DrawTextureFromRectDir(X, Y, W, H: LongInt; r: PSDL_Rect; SourceTexture: PTexture); |
|
149 var |
|
150 rr: TSDL_Rect; |
|
151 VertexBuffer, TextureBuffer: array [0..3] of TVertex2f; |
|
152 //VertexBuffer, TextureBuffer: TVertexRect; |
|
153 _l, _r, _t, _b: GLfloat; |
|
154 begin |
|
155 if (SourceTexture^.h = 0) or (SourceTexture^.w = 0) then |
|
156 exit; |
|
157 |
|
158 // do not draw anything outside the visible screen space (first check fixes some sprite drawing, e.g. hedgehogs) |
|
159 if (abs(X) > W) and ((abs(X + W / 2) - W / 2) > cScreenWidth / cScaleFactor) then |
|
160 exit; |
|
161 if (abs(Y) > H) and ((abs(Y + H / 2 - (0.5 * cScreenHeight)) - H / 2) > cScreenHeight / cScaleFactor) then |
|
162 exit; |
|
163 |
|
164 rr.x:= X; |
|
165 rr.y:= Y; |
|
166 rr.w:= W; |
|
167 rr.h:= H; |
|
168 |
|
169 _l:= r^.x / SourceTexture^.w * SourceTexture^.rx; |
|
170 _r:= (r^.x + r^.w) / SourceTexture^.w * SourceTexture^.rx; |
|
171 _t:= r^.y / SourceTexture^.h * SourceTexture^.ry; |
|
172 _b:= (r^.y + r^.h) / SourceTexture^.h * SourceTexture^.ry; |
|
173 |
|
174 glBindTexture(GL_TEXTURE_2D, SourceTexture^.id); |
|
175 |
|
176 VertexBuffer[0].X:= X; |
|
177 VertexBuffer[0].Y:= Y; |
|
178 VertexBuffer[1].X:= rr.w + X; |
|
179 VertexBuffer[1].Y:= Y; |
|
180 VertexBuffer[2].X:= rr.w + X; |
|
181 VertexBuffer[2].Y:= rr.h + Y; |
|
182 VertexBuffer[3].X:= X; |
|
183 VertexBuffer[3].Y:= rr.h + Y; |
|
184 |
|
185 TextureBuffer[0].X:= _l; |
|
186 TextureBuffer[0].Y:= _t; |
|
187 TextureBuffer[1].X:= _r; |
|
188 TextureBuffer[1].Y:= _t; |
|
189 TextureBuffer[2].X:= _r; |
|
190 TextureBuffer[2].Y:= _b; |
|
191 TextureBuffer[3].X:= _l; |
|
192 TextureBuffer[3].Y:= _b; |
|
193 |
|
194 SetVertexPointer(@VertexBuffer[0], Length(VertexBuffer)); |
|
195 SetTexCoordPointer(@TextureBuffer[0], Length(VertexBuffer)); |
|
196 |
|
197 {$IFDEF GL2} |
|
198 UpdateModelviewProjection; |
|
199 {$ENDIF} |
|
200 |
|
201 glDrawArrays(GL_TRIANGLE_FAN, 0, Length(VertexBuffer)); |
|
202 end; |
|
203 |
|
204 procedure DrawTexture(X, Y: LongInt; Texture: PTexture); inline; |
147 procedure DrawTexture(X, Y: LongInt; Texture: PTexture); inline; |
205 begin |
148 begin |
206 DrawTexture(X, Y, Texture, 1.0); |
149 DrawTexture(X, Y, Texture, 1.0); |
207 end; |
150 end; |
208 |
151 |