346 |
346 |
347 glEnd() |
347 glEnd() |
348 end; |
348 end; |
349 |
349 |
350 procedure DrawTexture(X, Y: LongInt; Texture: PTexture); |
350 procedure DrawTexture(X, Y: LongInt; Texture: PTexture); |
351 var VertexBuffer, TextureBuffer: array [0..3] of TVertex2f; |
|
352 begin |
351 begin |
353 glPushMatrix; |
352 glPushMatrix; |
354 glTranslatef(X, Y, 0); |
353 glTranslatef(X, Y, 0); |
355 |
354 |
356 glBindTexture(GL_TEXTURE_2D, Texture^.id); |
355 glBindTexture(GL_TEXTURE_2D, Texture^.id); |
357 |
356 |
358 VertexBuffer[0].X:= 0; |
|
359 VertexBuffer[0].Y:= 0; |
|
360 VertexBuffer[1].X:= Texture^.w; |
|
361 VertexBuffer[1].Y:= 0; |
|
362 VertexBuffer[2].X:= Texture^.w; |
|
363 VertexBuffer[2].Y:= Texture^.h; |
|
364 VertexBuffer[3].X:= 0; |
|
365 VertexBuffer[3].Y:= Texture^.h; |
|
366 |
|
367 TextureBuffer[0].X:= 0; |
|
368 TextureBuffer[0].Y:= 0; |
|
369 TextureBuffer[1].X:= Texture^.rx; |
|
370 TextureBuffer[1].Y:= 0; |
|
371 TextureBuffer[2].X:= Texture^.rx; |
|
372 TextureBuffer[2].Y:= Texture^.ry; |
|
373 TextureBuffer[3].X:= 0; |
|
374 TextureBuffer[3].Y:= Texture^.ry; |
|
375 |
|
376 glEnableClientState(GL_VERTEX_ARRAY); |
357 glEnableClientState(GL_VERTEX_ARRAY); |
377 glEnableClientState(GL_TEXTURE_COORD_ARRAY); |
358 glEnableClientState(GL_TEXTURE_COORD_ARRAY); |
378 |
359 |
379 glVertexPointer(2, GL_FLOAT, 0, @VertexBuffer[0]); |
360 glVertexPointer(2, GL_FLOAT, 0, @Texture^.vb); |
380 glTexCoordPointer(2, GL_FLOAT, 0, @TextureBuffer[0]); |
361 glTexCoordPointer(2, GL_FLOAT, 0, @Texture^.tb); |
381 glDrawArrays(GL_TRIANGLE_FAN, 0, Length(VertexBuffer)); |
362 glDrawArrays(GL_TRIANGLE_FAN, 0, Length(Texture^.vb)); |
382 |
363 |
383 glDisableClientState(GL_TEXTURE_COORD_ARRAY); |
364 glDisableClientState(GL_TEXTURE_COORD_ARRAY); |
384 glDisableClientState(GL_VERTEX_ARRAY); |
365 glDisableClientState(GL_VERTEX_ARRAY); |
385 |
366 |
386 glPopMatrix |
367 glPopMatrix |