| 785 | |
| 786 | |
| 787 | static bool init_pixel_formats(void) |
| 788 | { |
| 789 | bool ret = false; |
| 790 | CGLRendererInfoObj renderer_info; |
| 791 | GLint rendererCount; |
| 792 | CGLError err; |
| 793 | CFMutableSetRef pixel_format_set; |
| 794 | CFMutableArrayRef pixel_format_array; |
| 795 | int i; |
| 796 | CFRange range; |
| 797 | |
| 798 | err = CGLQueryRendererInfo(CGDisplayIDToOpenGLDisplayMask(CGMainDisplayID()), &renderer_info, &rendererCount); |
| 799 | if (err) { |
| 800 | kwarn_fmt("CGLQueryRendererInfo failed (%d) %s", err, CGLErrorString(err)); |
| 801 | return false; |
| 802 | } |
| 803 | |
| 804 | pixel_format_set = CFSetCreateMutable(NULL, 0, &kCFTypeSetCallBacks); |
| 805 | if (!pixel_format_set) { |
| 806 | kwarn("CFSetCreateMutable failed"); |
| 807 | CGLDestroyRendererInfo(renderer_info); |
| 808 | return false; |
| 809 | } |
| 810 | |
| 811 | pixel_format_array = CFArrayCreateMutable(NULL, 0, &kCFTypeArrayCallBacks); |
| 812 | if (!pixel_format_array) { |
| 813 | kwarn("CFArrayCreateMutable failed"); |
| 814 | CFRelease(pixel_format_set); |
| 815 | CGLDestroyRendererInfo(renderer_info); |
| 816 | return false; |
| 817 | } |
| 818 | |
| 819 | for (i = 0; i < rendererCount; i++) { |
| 820 | renderer_properties renderer; |
| 821 | |
| 822 | get_renderer_properties(renderer_info, i, &renderer); |
| 823 | enum_renderer_pixel_formats(renderer, pixel_format_array, pixel_format_set); |
| 824 | } |
| 825 | |
| 826 | CFRelease(pixel_format_set); |
| 827 | CGLDestroyRendererInfo(renderer_info); |
| 828 | |
| 829 | range = CFRangeMake(0, CFArrayGetCount(pixel_format_array)); |
| 830 | if (range.length) { |
| 831 | pixel_formats = new pixel_format[range.length]; |
| 832 | if (pixel_formats) { |
| 833 | CFArraySortValues(pixel_format_array, range, pixel_format_comparator, NULL); |
| 834 | for (i = 0; i < range.length; i++) { |
| 835 | CFNumberRef number = (CFNumberRef)CFArrayGetValueAtIndex(pixel_format_array, i); |
| 836 | UInt64 code; |
| 837 | |
| 838 | CFNumberGetValue(number, kCFNumberLongLongType, &code); |
| 839 | pixel_formats[i] = pixel_format_for_code(code); |
| 840 | if (pixel_formats[i].window) |
| 841 | nb_displayable_formats++; |
| 842 | } |
| 843 | |
| 844 | nb_formats = (int)range.length; |
no test coverage detected