| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (c) 2008-2010, 2015 Travis Geiselbrecht | 2 * Copyright (c) 2008-2010, 2015 Travis Geiselbrecht |
| 3 * | 3 * |
| 4 * Permission is hereby granted, free of charge, to any person obtaining | 4 * Permission is hereby granted, free of charge, to any person obtaining |
| 5 * a copy of this software and associated documentation files | 5 * a copy of this software and associated documentation files |
| 6 * (the "Software"), to deal in the Software without restriction, | 6 * (the "Software"), to deal in the Software without restriction, |
| 7 * including without limitation the rights to use, copy, modify, merge, | 7 * including without limitation the rights to use, copy, modify, merge, |
| 8 * publish, distribute, sublicense, and/or sell copies of the Software, | 8 * publish, distribute, sublicense, and/or sell copies of the Software, |
| 9 * and to permit persons to whom the Software is furnished to do so, | 9 * and to permit persons to whom the Software is furnished to do so, |
| 10 * subject to the following conditions: | 10 * subject to the following conditions: |
| (...skipping 639 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 650 surface->free_on_destroy = true; | 650 surface->free_on_destroy = true; |
| 651 } | 651 } |
| 652 surface->ptr = ptr; | 652 surface->ptr = ptr; |
| 653 | 653 |
| 654 return surface; | 654 return surface; |
| 655 } | 655 } |
| 656 | 656 |
| 657 /** | 657 /** |
| 658 * @brief Create a new graphics surface object from a display | 658 * @brief Create a new graphics surface object from a display |
| 659 */ | 659 */ |
| 660 gfx_surface *gfx_create_surface_from_display(struct display_info *info) | 660 gfx_surface *gfx_create_surface_from_display(struct display_framebuffer *fb) |
| 661 { | 661 { |
| 662 DEBUG_ASSERT(fb); |
| 662 gfx_surface *surface; | 663 gfx_surface *surface; |
| 663 gfx_format format; | 664 gfx_format format; |
| 664 switch (info->format) { | 665 switch (fb->image.format) { |
| 665 case DISPLAY_FORMAT_RGB_565: | 666 case IMAGE_FORMAT_RGB_565: |
| 666 format = GFX_FORMAT_RGB_565; | 667 format = GFX_FORMAT_RGB_565; |
| 667 break; | 668 break; |
| 668 case DISPLAY_FORMAT_RGB_332: | 669 case IMAGE_FORMAT_RGB_332: |
| 669 format = GFX_FORMAT_RGB_332; | 670 format = GFX_FORMAT_RGB_332; |
| 670 break; | 671 break; |
| 671 case DISPLAY_FORMAT_RGB_2220: | 672 case IMAGE_FORMAT_RGB_2220: |
| 672 format = GFX_FORMAT_RGB_2220; | 673 format = GFX_FORMAT_RGB_2220; |
| 673 break; | 674 break; |
| 674 case DISPLAY_FORMAT_ARGB_8888: | 675 case IMAGE_FORMAT_ARGB_8888: |
| 675 format = GFX_FORMAT_ARGB_8888; | 676 format = GFX_FORMAT_ARGB_8888; |
| 676 break; | 677 break; |
| 677 case DISPLAY_FORMAT_RGB_x888: | 678 case IMAGE_FORMAT_RGB_x888: |
| 678 format = GFX_FORMAT_RGB_x888; | 679 format = GFX_FORMAT_RGB_x888; |
| 679 break; | 680 break; |
| 680 case DISPLAY_FORMAT_MONO_8: | 681 case IMAGE_FORMAT_MONO_8: |
| 681 format = GFX_FORMAT_MONO; | 682 format = GFX_FORMAT_MONO; |
| 682 break; | 683 break; |
| 683 default: | 684 default: |
| 684 dprintf(INFO, "invalid graphics format)"); | 685 dprintf(INFO, "invalid graphics format)"); |
| 685 DEBUG_ASSERT(0); | 686 DEBUG_ASSERT(0); |
| 686 return NULL; | 687 return NULL; |
| 687 } | 688 } |
| 688 | 689 |
| 689 surface = gfx_create_surface(info->framebuffer, info->width, info->height, i
nfo->stride, format); | 690 surface = gfx_create_surface(fb->image.pixels, fb->image.width, fb->image.he
ight, fb->image.stride, format); |
| 690 | 691 |
| 691 surface->flush = info->flush; | 692 surface->flush = fb->flush; |
| 692 | 693 |
| 693 return surface; | 694 return surface; |
| 694 } | 695 } |
| 695 | 696 |
| 696 /** | 697 /** |
| 697 * @brief Destroy a graphics surface and free all resources allocated to it. | 698 * @brief Destroy a graphics surface and free all resources allocated to it. |
| 698 * | 699 * |
| 699 * @param surface Surface to destroy. This pointer is no longer valid after | 700 * @param surface Surface to destroy. This pointer is no longer valid after |
| 700 * this call. | 701 * this call. |
| 701 */ | 702 */ |
| 702 void gfx_surface_destroy(struct gfx_surface *surface) | 703 void gfx_surface_destroy(struct gfx_surface *surface) |
| 703 { | 704 { |
| 704 if (surface->free_on_destroy) | 705 if (surface->free_on_destroy) |
| 705 free(surface->ptr); | 706 free(surface->ptr); |
| 706 free(surface); | 707 free(surface); |
| 707 } | 708 } |
| 708 | 709 |
| 709 /** | 710 /** |
| 710 * @brief Write a test pattern to the default display. | 711 * @brief Write a test pattern to the default display. |
| 711 */ | 712 */ |
| 712 void gfx_draw_pattern(void) | 713 void gfx_draw_pattern(void) |
| 713 { | 714 { |
| 714 struct display_info info; | 715 struct display_framebuffer fb; |
| 715 if (display_get_info(&info) < 0) | 716 if (display_get_framebuffer(&fb) < 0) |
| 716 return; | 717 return; |
| 717 | 718 |
| 718 gfx_surface *surface = gfx_create_surface_from_display(&info); | 719 gfx_surface *surface = gfx_create_surface_from_display(&fb); |
| 719 | 720 |
| 720 uint x, y; | 721 uint x, y; |
| 721 for (y = 0; y < surface->height; y++) { | 722 for (y = 0; y < surface->height; y++) { |
| 722 for (x = 0; x < surface->width; x++) { | 723 for (x = 0; x < surface->width; x++) { |
| 723 uint scaledx; | 724 uint scaledx; |
| 724 uint scaledy; | 725 uint scaledy; |
| 725 | 726 |
| 726 scaledx = x * 256 / surface->width; | 727 scaledx = x * 256 / surface->width; |
| 727 scaledy = y * 256 / surface->height; | 728 scaledy = y * 256 / surface->height; |
| 728 | 729 |
| 729 gfx_putpixel(surface, x, y, (0xff << 24) | (scaledx * scaledy) << 16
| (scaledx >> 1) << 8 | scaledy >> 1); | 730 gfx_putpixel(surface, x, y, (0xff << 24) | (scaledx * scaledy) << 16
| (scaledx >> 1) << 8 | scaledy >> 1); |
| 730 } | 731 } |
| 731 } | 732 } |
| 732 | 733 |
| 733 gfx_flush(surface); | 734 gfx_flush(surface); |
| 734 | 735 |
| 735 gfx_surface_destroy(surface); | 736 gfx_surface_destroy(surface); |
| 736 } | 737 } |
| 737 | 738 |
| 738 /** | 739 /** |
| 739 * @brief Fill default display with white | 740 * @brief Fill default display with white |
| 740 */ | 741 */ |
| 741 void gfx_draw_pattern_white(void) | 742 void gfx_draw_pattern_white(void) |
| 742 { | 743 { |
| 743 struct display_info info; | 744 struct display_framebuffer fb; |
| 744 if (display_get_info(&info) < 0) | 745 if (display_get_framebuffer(&fb) < 0) |
| 745 return; | 746 return; |
| 746 | 747 |
| 747 gfx_surface *surface = gfx_create_surface_from_display(&info); | 748 gfx_surface *surface = gfx_create_surface_from_display(&fb); |
| 748 | 749 |
| 749 uint x, y; | 750 uint x, y; |
| 750 for (y = 0; y < surface->height; y++) { | 751 for (y = 0; y < surface->height; y++) { |
| 751 for (x = 0; x < surface->width; x++) { | 752 for (x = 0; x < surface->width; x++) { |
| 752 gfx_putpixel(surface, x, y, 0xFFFFFFFF); | 753 gfx_putpixel(surface, x, y, 0xFFFFFFFF); |
| 753 } | 754 } |
| 754 } | 755 } |
| 755 | 756 |
| 756 gfx_flush(surface); | 757 gfx_flush(surface); |
| 757 | 758 |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 802 if (argc < 2) { | 803 if (argc < 2) { |
| 803 printf("not enough arguments:\n"); | 804 printf("not enough arguments:\n"); |
| 804 printf("%s display_info : output information bout the current display\n"
, argv[0].str); | 805 printf("%s display_info : output information bout the current display\n"
, argv[0].str); |
| 805 printf("%s rgb_bars : Fill frame buffer with rgb bars\n", argv[0].str)
; | 806 printf("%s rgb_bars : Fill frame buffer with rgb bars\n", argv[0].str)
; |
| 806 printf("%s test_pattern : Fill frame with test pattern\n", argv[0].str); | 807 printf("%s test_pattern : Fill frame with test pattern\n", argv[0].str); |
| 807 printf("%s fill r g b : Fill frame buffer with RGB888 value and force
update\n", argv[0].str); | 808 printf("%s fill r g b : Fill frame buffer with RGB888 value and force
update\n", argv[0].str); |
| 808 | 809 |
| 809 return -1; | 810 return -1; |
| 810 } | 811 } |
| 811 | 812 |
| 812 struct display_info info; | 813 struct display_framebuffer fb; |
| 813 if (display_get_info(&info) < 0) { | 814 if (display_get_framebuffer(&fb) < 0) { |
| 814 printf("no display to draw on!\n"); | 815 printf("no display to draw on!\n"); |
| 815 return -1; | 816 return -1; |
| 816 } | 817 } |
| 817 | 818 |
| 818 gfx_surface *surface = gfx_create_surface_from_display(&info); | 819 gfx_surface *surface = gfx_create_surface_from_display(&fb); |
| 819 | 820 |
| 820 if (!strcmp(argv[1].str, "display_info")) { | 821 if (!strcmp(argv[1].str, "display_info")) { |
| 821 printf("display:\n"); | 822 printf("display:\n"); |
| 822 printf("\tframebuffer %p\n", info.framebuffer); | 823 printf("\tframebuffer %p\n", fb.image.pixels); |
| 823 printf("\twidth %u height %u stride %u\n", info.width, info.height, info
.stride); | 824 printf("\twidth %u height %u stride %u\n", fb.image.width, fb.image.heig
ht, fb.image.stride); |
| 824 printf("\tformat %u\n", info.format); | 825 printf("\tformat %u\n", fb.image.format); |
| 825 } else if (!strcmp(argv[1].str, "rgb_bars")) { | 826 } else if (!strcmp(argv[1].str, "rgb_bars")) { |
| 826 gfx_draw_rgb_bars(surface); | 827 gfx_draw_rgb_bars(surface); |
| 827 } else if (!strcmp(argv[1].str, "test_pattern")) { | 828 } else if (!strcmp(argv[1].str, "test_pattern")) { |
| 828 gfx_draw_pattern(); | 829 gfx_draw_pattern(); |
| 829 } else if (!strcmp(argv[1].str, "fill")) { | 830 } else if (!strcmp(argv[1].str, "fill")) { |
| 830 uint x, y; | 831 uint x, y; |
| 831 | 832 |
| 832 for (y = 0; y < surface->height; y++) { | 833 for (y = 0; y < surface->height; y++) { |
| 833 for (x = 0; x < surface->width; x++) { | 834 for (x = 0; x < surface->width; x++) { |
| 834 /* write pixel to frame buffer */ | 835 /* write pixel to frame buffer */ |
| 835 gfx_putpixel(surface, x, y, (0xff << 24) | (argv[2].i << 16) | (
argv[3].i << 8) | argv[4].i); | 836 gfx_putpixel(surface, x, y, (0xff << 24) | (argv[2].i << 16) | (
argv[3].i << 8) | argv[4].i); |
| 836 } | 837 } |
| 837 } | 838 } |
| 838 } | 839 } |
| 839 | 840 |
| 840 gfx_flush(surface); | 841 gfx_flush(surface); |
| 841 | 842 |
| 842 gfx_surface_destroy(surface); | 843 gfx_surface_destroy(surface); |
| 843 | 844 |
| 844 return 0; | 845 return 0; |
| 845 } | 846 } |
| 846 | 847 |
| 847 #endif | 848 #endif |
| 848 #endif | 849 #endif |
| OLD | NEW |