comparison src/video/ataricommon/SDL_atarigl.c @ 1005:2ab1cb02a44e

Some Atari OpenGL implementations draw upside down
author Patrice Mandin <patmandin@gmail.com>
date Sat, 04 Dec 2004 20:53:58 +0000
parents ece5ab8acd1c
children 1901fea5edac
comparison
equal deleted inserted replaced
1004:d1cd674b2ecd 1005:2ab1cb02a44e
423 } 423 }
424 424
425 /* Init OpenGL context using OSMesa */ 425 /* Init OpenGL context using OSMesa */
426 gl_convert = ConvertNull; 426 gl_convert = ConvertNull;
427 gl_copyshadow = CopyShadowNull; 427 gl_copyshadow = CopyShadowNull;
428 gl_upsidedown = SDL_FALSE;
428 429
429 pixel_format = current->format; 430 pixel_format = current->format;
430 redmask = pixel_format->Rmask; 431 redmask = pixel_format->Rmask;
431 switch (pixel_format->BitsPerPixel) { 432 switch (pixel_format->BitsPerPixel) {
432 case 15: 433 case 15:
537 } 538 }
538 539
539 /* Init OpenGL context using OSMesa */ 540 /* Init OpenGL context using OSMesa */
540 gl_convert = ConvertNull; 541 gl_convert = ConvertNull;
541 gl_copyshadow = CopyShadowNull; 542 gl_copyshadow = CopyShadowNull;
543 gl_upsidedown = SDL_FALSE;
542 544
543 pixel_format = current->format; 545 pixel_format = current->format;
544 redmask = pixel_format->Rmask; 546 redmask = pixel_format->Rmask;
545 switch (pixel_format->BitsPerPixel) { 547 switch (pixel_format->BitsPerPixel) {
546 case 15: 548 case 15:
554 gl_copyshadow = CopyShadowRGBTo565; 556 gl_copyshadow = CopyShadowRGBTo565;
555 gl_convert = Convert565To555le; 557 gl_convert = Convert565To555le;
556 } 558 }
557 } else { 559 } else {
558 gl_pixelsize = 4; 560 gl_pixelsize = 4;
561 gl_upsidedown = SDL_TRUE;
559 osmesa_format = OSMESA_ARGB; 562 osmesa_format = OSMESA_ARGB;
560 if (redmask == 31<<10) { 563 if (redmask == 31<<10) {
561 gl_copyshadow = CopyShadow8888To555; 564 gl_copyshadow = CopyShadow8888To555;
562 } else { 565 } else {
563 gl_copyshadow = CopyShadow8888To565; 566 gl_copyshadow = CopyShadow8888To565;
575 /* 565, little endian, unsupported */ 578 /* 565, little endian, unsupported */
576 gl_convert = Convert565le; 579 gl_convert = Convert565le;
577 } 580 }
578 } else { 581 } else {
579 gl_pixelsize = 4; 582 gl_pixelsize = 4;
583 gl_upsidedown = SDL_TRUE;
580 osmesa_format = OSMESA_ARGB; 584 osmesa_format = OSMESA_ARGB;
581 gl_copyshadow = CopyShadow8888To565; 585 gl_copyshadow = CopyShadow8888To565;
582 if (redmask != 31<<11) { 586 if (redmask != 31<<11) {
583 /* 565, little endian, unsupported */ 587 /* 565, little endian, unsupported */
584 gl_convert = Convert565le; 588 gl_convert = Convert565le;
593 if (redmask != 255<<16) { 597 if (redmask != 255<<16) {
594 gl_copyshadow = CopyShadowRGBSwap; 598 gl_copyshadow = CopyShadowRGBSwap;
595 } 599 }
596 } else { 600 } else {
597 gl_copyshadow = CopyShadowDirect; 601 gl_copyshadow = CopyShadowDirect;
602 gl_upsidedown = SDL_TRUE;
598 if (redmask == 255<<16) { 603 if (redmask == 255<<16) {
599 osmesa_format = OSMESA_RGB; 604 osmesa_format = OSMESA_RGB;
600 } else { 605 } else {
601 osmesa_format = OSMESA_BGR; 606 osmesa_format = OSMESA_BGR;
602 } 607 }
614 } else if (redmask == 255<<24) { 619 } else if (redmask == 255<<24) {
615 gl_convert = CopyShadowRGBToRGBA; 620 gl_convert = CopyShadowRGBToRGBA;
616 } 621 }
617 } else { 622 } else {
618 gl_pixelsize = 4; 623 gl_pixelsize = 4;
624 gl_upsidedown = SDL_TRUE;
619 gl_copyshadow = CopyShadowDirect; 625 gl_copyshadow = CopyShadowDirect;
620 if (redmask == 255<<16) { 626 if (redmask == 255<<16) {
621 osmesa_format = OSMESA_ARGB; 627 osmesa_format = OSMESA_ARGB;
622 } else if (redmask == 255<<8) { 628 } else if (redmask == 255<<8) {
623 osmesa_format = OSMESA_BGRA; 629 osmesa_format = OSMESA_BGRA;
683 689
684 srcline = gl_shadow; 690 srcline = gl_shadow;
685 srcpitch = surface->w * gl_pixelsize; 691 srcpitch = surface->w * gl_pixelsize;
686 dstline = surface->pixels; 692 dstline = surface->pixels;
687 dstpitch = surface->pitch; 693 dstpitch = surface->pitch;
694 if (gl_upsidedown) {
695 srcline += (surface->h-1)*srcpitch;
696 srcpitch = -srcpitch;
697 }
688 698
689 for (y=0; y<surface->h; y++) { 699 for (y=0; y<surface->h; y++) {
690 memcpy(dstline, srcline, srcpitch); 700 memcpy(dstline, srcline, srcpitch);
691 701
692 srcline += srcpitch; 702 srcline += srcpitch;
702 712
703 srcline = (Uint8 *)gl_shadow; 713 srcline = (Uint8 *)gl_shadow;
704 srcpitch = surface->w * gl_pixelsize; 714 srcpitch = surface->w * gl_pixelsize;
705 dstline = surface->pixels; 715 dstline = surface->pixels;
706 dstpitch = surface->pitch >>1; 716 dstpitch = surface->pitch >>1;
717 if (gl_upsidedown) {
718 srcline += (surface->h-1)*srcpitch;
719 srcpitch = -srcpitch;
720 }
707 721
708 for (y=0; y<surface->h; y++) { 722 for (y=0; y<surface->h; y++) {
709 srccol = srcline; 723 srccol = srcline;
710 dstcol = dstline; 724 dstcol = dstline;
711 for (x=0; x<surface->w; x++) { 725 for (x=0; x<surface->w; x++) {
730 744
731 srcline = (Uint8 *)gl_shadow; 745 srcline = (Uint8 *)gl_shadow;
732 srcpitch = surface->w * gl_pixelsize; 746 srcpitch = surface->w * gl_pixelsize;
733 dstline = surface->pixels; 747 dstline = surface->pixels;
734 dstpitch = surface->pitch >>1; 748 dstpitch = surface->pitch >>1;
749 if (gl_upsidedown) {
750 srcline += (surface->h-1)*srcpitch;
751 srcpitch = -srcpitch;
752 }
735 753
736 for (y=0; y<surface->h; y++) { 754 for (y=0; y<surface->h; y++) {
737 srccol = srcline; 755 srccol = srcline;
738 dstcol = dstline; 756 dstcol = dstline;
739 757
759 777
760 srcline = (Uint8 *)gl_shadow; 778 srcline = (Uint8 *)gl_shadow;
761 srcpitch = surface->w * gl_pixelsize; 779 srcpitch = surface->w * gl_pixelsize;
762 dstline = surface->pixels; 780 dstline = surface->pixels;
763 dstpitch = surface->pitch; 781 dstpitch = surface->pitch;
782 if (gl_upsidedown) {
783 srcline += (surface->h-1)*srcpitch;
784 srcpitch = -srcpitch;
785 }
764 786
765 for (y=0; y<surface->h; y++) { 787 for (y=0; y<surface->h; y++) {
766 srccol = srcline; 788 srccol = srcline;
767 dstcol = dstline; 789 dstcol = dstline;
768 790
786 808
787 srcline = (Uint8 *)gl_shadow; 809 srcline = (Uint8 *)gl_shadow;
788 srcpitch = surface->w * gl_pixelsize; 810 srcpitch = surface->w * gl_pixelsize;
789 dstline = surface->pixels; 811 dstline = surface->pixels;
790 dstpitch = surface->pitch >>2; 812 dstpitch = surface->pitch >>2;
813 if (gl_upsidedown) {
814 srcline += (surface->h-1)*srcpitch;
815 srcpitch = -srcpitch;
816 }
791 817
792 for (y=0; y<surface->h; y++) { 818 for (y=0; y<surface->h; y++) {
793 srccol = srcline; 819 srccol = srcline;
794 dstcol = dstline; 820 dstcol = dstline;
795 821
816 842
817 srcline = (Uint8 *)gl_shadow; 843 srcline = (Uint8 *)gl_shadow;
818 srcpitch = surface->w * gl_pixelsize; 844 srcpitch = surface->w * gl_pixelsize;
819 dstline = surface->pixels; 845 dstline = surface->pixels;
820 dstpitch = surface->pitch >>2; 846 dstpitch = surface->pitch >>2;
847 if (gl_upsidedown) {
848 srcline += (surface->h-1)*srcpitch;
849 srcpitch = -srcpitch;
850 }
821 851
822 for (y=0; y<surface->h; y++) { 852 for (y=0; y<surface->h; y++) {
823 srccol = srcline; 853 srccol = srcline;
824 dstcol = dstline; 854 dstcol = dstline;
825 855
846 876
847 srcline = (Uint8 *)gl_shadow; 877 srcline = (Uint8 *)gl_shadow;
848 srcpitch = surface->w * gl_pixelsize; 878 srcpitch = surface->w * gl_pixelsize;
849 dstline = surface->pixels; 879 dstline = surface->pixels;
850 dstpitch = surface->pitch >>2; 880 dstpitch = surface->pitch >>2;
881 if (gl_upsidedown) {
882 srcline += (surface->h-1)*srcpitch;
883 srcpitch = -srcpitch;
884 }
851 885
852 for (y=0; y<surface->h; y++) { 886 for (y=0; y<surface->h; y++) {
853 srccol = srcline; 887 srccol = srcline;
854 dstcol = dstline; 888 dstcol = dstline;
855 889
876 910
877 srcline = (Uint8 *)gl_shadow; 911 srcline = (Uint8 *)gl_shadow;
878 srcpitch = surface->w * gl_pixelsize; 912 srcpitch = surface->w * gl_pixelsize;
879 dstline = surface->pixels; 913 dstline = surface->pixels;
880 dstpitch = surface->pitch >>2; 914 dstpitch = surface->pitch >>2;
915 if (gl_upsidedown) {
916 srcline += (surface->h-1)*srcpitch;
917 srcpitch = -srcpitch;
918 }
881 919
882 for (y=0; y<surface->h; y++) { 920 for (y=0; y<surface->h; y++) {
883 srccol = srcline; 921 srccol = srcline;
884 dstcol = dstline; 922 dstcol = dstline;
885 923
906 944
907 srcline = (Uint32 *)gl_shadow; 945 srcline = (Uint32 *)gl_shadow;
908 srcpitch = (surface->w * gl_pixelsize) >>2; 946 srcpitch = (surface->w * gl_pixelsize) >>2;
909 dstline = surface->pixels; 947 dstline = surface->pixels;
910 dstpitch = surface->pitch >>1; 948 dstpitch = surface->pitch >>1;
949 if (gl_upsidedown) {
950 srcline += (surface->h-1)*srcpitch;
951 srcpitch = -srcpitch;
952 }
911 953
912 for (y=0; y<surface->h; y++) { 954 for (y=0; y<surface->h; y++) {
913 srccol = srcline; 955 srccol = srcline;
914 dstcol = dstline; 956 dstcol = dstline;
915 for (x=0; x<surface->w; x++) { 957 for (x=0; x<surface->w; x++) {
936 978
937 srcline = (Uint32 *)gl_shadow; 979 srcline = (Uint32 *)gl_shadow;
938 srcpitch = (surface->w * gl_pixelsize) >> 2; 980 srcpitch = (surface->w * gl_pixelsize) >> 2;
939 dstline = surface->pixels; 981 dstline = surface->pixels;
940 dstpitch = surface->pitch >>1; 982 dstpitch = surface->pitch >>1;
983 if (gl_upsidedown) {
984 srcline += (surface->h-1)*srcpitch;
985 srcpitch = -srcpitch;
986 }
941 987
942 for (y=0; y<surface->h; y++) { 988 for (y=0; y<surface->h; y++) {
943 srccol = srcline; 989 srccol = srcline;
944 dstcol = dstline; 990 dstcol = dstline;
945 991