Глубина wxBitmap на Mac вызывает медленное рисование - PullRequest
1 голос
/ 30 сентября 2019

Под 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, но в то же время приветствую любые предложения здесь.

...