520 TextureBuffer[2].X:= _r; |
520 TextureBuffer[2].X:= _r; |
521 TextureBuffer[2].Y:= _b; |
521 TextureBuffer[2].Y:= _b; |
522 TextureBuffer[3].X:= _l; |
522 TextureBuffer[3].X:= _l; |
523 TextureBuffer[3].Y:= _b; |
523 TextureBuffer[3].Y:= _b; |
524 |
524 |
525 glEnableClientState(GL_VERTEX_ARRAY); |
|
526 glEnableClientState(GL_TEXTURE_COORD_ARRAY); |
|
527 |
525 |
528 glVertexPointer(2, GL_FLOAT, 0, @VertexBuffer[0]); |
526 glVertexPointer(2, GL_FLOAT, 0, @VertexBuffer[0]); |
529 glTexCoordPointer(2, GL_FLOAT, 0, @TextureBuffer[0]); |
527 glTexCoordPointer(2, GL_FLOAT, 0, @TextureBuffer[0]); |
530 glDrawArrays(GL_TRIANGLE_FAN, 0, Length(VertexBuffer)); |
528 glDrawArrays(GL_TRIANGLE_FAN, 0, Length(VertexBuffer)); |
531 |
|
532 glDisableClientState(GL_TEXTURE_COORD_ARRAY); |
|
533 glDisableClientState(GL_VERTEX_ARRAY) |
|
534 end; |
529 end; |
535 |
530 |
536 procedure DrawTexture(X, Y: LongInt; Texture: PTexture; Scale: GLfloat); |
531 procedure DrawTexture(X, Y: LongInt; Texture: PTexture; Scale: GLfloat); |
537 begin |
532 begin |
538 glPushMatrix; |
533 glPushMatrix; |
539 glTranslatef(X, Y, 0); |
534 glTranslatef(X, Y, 0); |
540 glScalef(Scale, Scale, 1); |
535 glScalef(Scale, Scale, 1); |
541 |
536 |
542 glBindTexture(GL_TEXTURE_2D, Texture^.id); |
537 glBindTexture(GL_TEXTURE_2D, Texture^.id); |
543 |
538 |
544 glEnableClientState(GL_VERTEX_ARRAY); |
|
545 glEnableClientState(GL_TEXTURE_COORD_ARRAY); |
|
546 |
|
547 glVertexPointer(2, GL_FLOAT, 0, @Texture^.vb); |
539 glVertexPointer(2, GL_FLOAT, 0, @Texture^.vb); |
548 glTexCoordPointer(2, GL_FLOAT, 0, @Texture^.tb); |
540 glTexCoordPointer(2, GL_FLOAT, 0, @Texture^.tb); |
549 glDrawArrays(GL_TRIANGLE_FAN, 0, Length(Texture^.vb)); |
541 glDrawArrays(GL_TRIANGLE_FAN, 0, Length(Texture^.vb)); |
550 |
|
551 glDisableClientState(GL_TEXTURE_COORD_ARRAY); |
|
552 glDisableClientState(GL_VERTEX_ARRAY); |
|
553 |
542 |
554 glPopMatrix |
543 glPopMatrix |
555 end; |
544 end; |
556 |
545 |
557 procedure DrawTextureF(Texture: PTexture; Scale: GLfloat; X, Y, Frame, Dir, w, h: LongInt); |
546 procedure DrawTextureF(Texture: PTexture; Scale: GLfloat; X, Y, Frame, Dir, w, h: LongInt); |
609 TextureBuffer[2].X:= fr; |
598 TextureBuffer[2].X:= fr; |
610 TextureBuffer[2].Y:= fb; |
599 TextureBuffer[2].Y:= fb; |
611 TextureBuffer[3].X:= fl; |
600 TextureBuffer[3].X:= fl; |
612 TextureBuffer[3].Y:= fb; |
601 TextureBuffer[3].Y:= fb; |
613 |
602 |
614 glEnableClientState(GL_VERTEX_ARRAY); |
|
615 glEnableClientState(GL_TEXTURE_COORD_ARRAY); |
|
616 |
|
617 glVertexPointer(2, GL_FLOAT, 0, @VertexBuffer[0]); |
603 glVertexPointer(2, GL_FLOAT, 0, @VertexBuffer[0]); |
618 glTexCoordPointer(2, GL_FLOAT, 0, @TextureBuffer[0]); |
604 glTexCoordPointer(2, GL_FLOAT, 0, @TextureBuffer[0]); |
619 glDrawArrays(GL_TRIANGLE_FAN, 0, Length(VertexBuffer)); |
605 glDrawArrays(GL_TRIANGLE_FAN, 0, Length(VertexBuffer)); |
620 |
|
621 glDisableClientState(GL_TEXTURE_COORD_ARRAY); |
|
622 glDisableClientState(GL_VERTEX_ARRAY); |
|
623 |
|
624 |
606 |
625 glPopMatrix |
607 glPopMatrix |
626 end; |
608 end; |
627 |
609 |
628 procedure DrawRotated(Sprite: TSprite; X, Y, Dir: LongInt; Angle: real); |
610 procedure DrawRotated(Sprite: TSprite; X, Y, Dir: LongInt; Angle: real); |
672 VertexBuffer[2].X:= hw; |
654 VertexBuffer[2].X:= hw; |
673 VertexBuffer[2].Y:= hh; |
655 VertexBuffer[2].Y:= hh; |
674 VertexBuffer[3].X:= -hw; |
656 VertexBuffer[3].X:= -hw; |
675 VertexBuffer[3].Y:= hh; |
657 VertexBuffer[3].Y:= hh; |
676 |
658 |
677 glEnableClientState(GL_VERTEX_ARRAY); |
|
678 glEnableClientState(GL_TEXTURE_COORD_ARRAY); |
|
679 |
|
680 glVertexPointer(2, GL_FLOAT, 0, @VertexBuffer[0]); |
659 glVertexPointer(2, GL_FLOAT, 0, @VertexBuffer[0]); |
681 glTexCoordPointer(2, GL_FLOAT, 0, @Tex^.tb); |
660 glTexCoordPointer(2, GL_FLOAT, 0, @Tex^.tb); |
682 glDrawArrays(GL_TRIANGLE_FAN, 0, Length(VertexBuffer)); |
661 glDrawArrays(GL_TRIANGLE_FAN, 0, Length(VertexBuffer)); |
683 |
|
684 glDisableClientState(GL_TEXTURE_COORD_ARRAY); |
|
685 glDisableClientState(GL_VERTEX_ARRAY); |
|
686 |
662 |
687 glPopMatrix |
663 glPopMatrix |
688 end; |
664 end; |
689 |
665 |
690 procedure DrawSpriteFromRect(Sprite: TSprite; r: TSDL_Rect; X, Y, Height, Position: LongInt); |
666 procedure DrawSpriteFromRect(Sprite: TSprite; r: TSDL_Rect; X, Y, Height, Position: LongInt); |
779 TextureBuffer[2].X:= r; |
755 TextureBuffer[2].X:= r; |
780 TextureBuffer[2].Y:= b; |
756 TextureBuffer[2].Y:= b; |
781 TextureBuffer[3].X:= l; |
757 TextureBuffer[3].X:= l; |
782 TextureBuffer[3].Y:= b; |
758 TextureBuffer[3].Y:= b; |
783 |
759 |
784 glEnableClientState(GL_VERTEX_ARRAY); |
|
785 glEnableClientState(GL_TEXTURE_COORD_ARRAY); |
|
786 |
|
787 glVertexPointer(2, GL_FLOAT, 0, @VertexBuffer[0]); |
760 glVertexPointer(2, GL_FLOAT, 0, @VertexBuffer[0]); |
788 glTexCoordPointer(2, GL_FLOAT, 0, @TextureBuffer[0]); |
761 glTexCoordPointer(2, GL_FLOAT, 0, @TextureBuffer[0]); |
789 glDrawArrays(GL_TRIANGLE_FAN, 0, Length(VertexBuffer)); |
762 glDrawArrays(GL_TRIANGLE_FAN, 0, Length(VertexBuffer)); |
790 |
|
791 glDisableClientState(GL_TEXTURE_COORD_ARRAY); |
|
792 glDisableClientState(GL_VERTEX_ARRAY); |
|
793 |
763 |
794 glPopMatrix |
764 glPopMatrix |
795 end; |
765 end; |
796 |
766 |
797 procedure DrawFillRect(r: TSDL_Rect); |
767 procedure DrawFillRect(r: TSDL_Rect); |
808 VertexBuffer[2].X:= r.x + r.w; |
778 VertexBuffer[2].X:= r.x + r.w; |
809 VertexBuffer[2].Y:= r.y + r.h; |
779 VertexBuffer[2].Y:= r.y + r.h; |
810 VertexBuffer[3].X:= r.x; |
780 VertexBuffer[3].X:= r.x; |
811 VertexBuffer[3].Y:= r.y + r.h; |
781 VertexBuffer[3].Y:= r.y + r.h; |
812 |
782 |
813 glEnableClientState(GL_VERTEX_ARRAY); |
|
814 glVertexPointer(2, GL_FLOAT, 0, @VertexBuffer[0]); |
783 glVertexPointer(2, GL_FLOAT, 0, @VertexBuffer[0]); |
815 glDrawArrays(GL_TRIANGLE_FAN, 0, Length(VertexBuffer)); |
784 glDrawArrays(GL_TRIANGLE_FAN, 0, Length(VertexBuffer)); |
816 glDisableClientState(GL_VERTEX_ARRAY); |
|
817 |
785 |
818 Tint($FF, $FF, $FF, $FF); |
786 Tint($FF, $FF, $FF, $FF); |
819 glEnable(GL_TEXTURE_2D) |
787 glEnable(GL_TEXTURE_2D) |
820 end; |
788 end; |
821 |
789 |
1239 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); |
1207 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); |
1240 // disable/lower perspective correction (won't need it anyway) |
1208 // disable/lower perspective correction (won't need it anyway) |
1241 glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST); |
1209 glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST); |
1242 // disable dithering |
1210 // disable dithering |
1243 glDisable(GL_DITHER); |
1211 glDisable(GL_DITHER); |
1244 // enable 2d textures by default |
1212 // enable common states by default as they save a lot |
1245 glEnable(GL_TEXTURE_2D); |
1213 glEnable(GL_TEXTURE_2D); |
|
1214 glEnableClientState(GL_VERTEX_ARRAY); |
|
1215 glEnableClientState(GL_TEXTURE_COORD_ARRAY); |
1246 end; |
1216 end; |
1247 |
1217 |
1248 procedure SetScale(f: GLfloat); |
1218 procedure SetScale(f: GLfloat); |
1249 begin |
1219 begin |
1250 // leave immediately if scale factor did not change |
1220 // leave immediately if scale factor did not change |