Под 24-битным отображением глубины цвета (как у моего MacBookPro13,3 с 24-битным цветом Radeon Pro 460 (ARGB8888)) я нахожу, что рисование wxBitmap на DC очень медленное. Я использую wxWidgets 3.1.2 с помощью wxAutoBufferedPaintDC и просто вызываю dc.DrawBitmap (myBitmap, sizeX, sizeY, true);
Профилирование по инструментам, я вижу следующий вывод:
6.56 s 56.3% 2.00 ms myThing::OnPaint(wxPaintEvent&)
5.83 s 50.0% 0 s wxGCDCImpl::DoDrawBitmap(wxBitmap const&, int, int, bool)
5.83 s 50.0% 0 s wxMacCoreGraphicsContext::DrawBitmap(wxBitmap const&, double, double, double, double)
5.83 s 50.0% 0 s wxOSXDrawNSImage(CGContext*, CGRect const*, NSImage*)
5.83 s 50.0% 0 s -[NSImage drawInRect:fromRect:operation:fraction:]
5.83 s 50.0% 0 s -[NSImage drawInRect:fromRect:operation:fraction:respectFlipped:hints:]
5.83 s 50.0% 0 s -[NSImage _usingBestRepresentationForRect:context:hints:body:]
5.83 s 50.0% 0 s __71-[NSImage drawInRect:fromRect:operation:fraction:respectFlipped:hints:]_block_invoke.1317
5.83 s 50.0% 0 s -[NSImageRep drawInRect:fromRect:operation:fraction:respectFlipped:hints:]
5.83 s 50.0% 0 s __74-[NSImageRep drawInRect:fromRect:operation:fraction:respectFlipped:hints:]_block_invoke
5.83 s 50.0% 0 s CGContextDrawImage
5.83 s 50.0% 0 s CGContextDrawImageWithOptions
5.83 s 50.0% 0 s CGContextDelegateDrawImage
5.83 s 50.0% 0 s backing_store_DrawImage.llvm.1028279097235270472
5.83 s 50.0% 0 s backing_store_delegate
5.83 s 49.9% 0 s __backing_store_DrawImage_block_invoke
5.83 s 49.9% 0 s CGContextDelegateDrawImage
5.83 s 49.9% 0 s ripc_DrawImage
5.82 s 49.9% 0 s ripc_RenderImage
5.82 s 49.9% 0 s RIPLayerBltImage
5.82 s 49.9% 0 s ripl_Mark
5.82 s 49.9% 0 s RGBAf16_image
5.82 s 49.9% 778.00 ms RGBAf16_image_mark(BltDepth const*, BltOp const*, _ImgOp*, MODE)
5.04 s 43.2% 5.04 s RGBAf16_sample_RGBAf_inner(_ImgOp const*, long, long, int)
Просматривая код в src / osx / core / bitmap.cpp, кажется, что wxBitmap в macOS всегда 32-битный. Кажется, это заставляет медленно преобразовывать пиксельные данные, вместо того, чтобы просто сделать memcpy для цели, я думаю ???
Рисование этого растрового изображения под моим 32-битным дисплеем на моем стареющем MacBookPro9,1,1 с запущенным Sierra 2012 (Я думал, что это была Высокая Сьерра, но, очевидно, нет!) У меня вообще нет проблем со скоростью, и она суперскоростная.
Что я могу сделать, чтобы действительно создатьwxBitmap под собственной глубиной отображения системы в macOS?
Я задавал этот вопрос на форуме wxWidgets, но подумал, что и здесь я бы попросил охватить потенциально более широкую аудиторию.
РЕДАКТИРОВАТЬ: Примечание! Следуя совету на форуме wxWidgets, я открыл это как ошибку https://trac.wxwidgets.org/ticket/18516, но в то же время приветствую любые предложения здесь.