У меня есть зрелое приложение MFC C++, которое отображается на экране и печатает с использованием оберток CDC на Win32 GDI. Несмотря на то, что он был оптимизирован на протяжении многих лет, я хотел бы заменить его чем-то более быстрым. Графика включала визуализированные модели треугольной поверхности, сложные полилинии и многоугольники, а также много текста. Он должен соответствовать следующим критериям;
Количество отображаемых векторов, вероятно, будет очень большим. Например, треугольник с одной поверхностью, вероятно, будет генерировать числовые линии и сплошные заливки при визуализации. В настоящее время эта информация нигде не хранится, она генерируется и выводится на лету. SDK должен поддерживать ограничение на общее количество буферизованных векторов, иначе может возникнуть нехватка памяти.
SDK должен иметь возможность отображать в любом производном классе CWnd, включая классы CView и ScrollView.
SDK должен поддерживать печать на любом устройстве печати Windows,
SDK должен быть достаточно низким, чтобы сделать перенос вызовов CDC / GDI на низком уровне относительно простым.
Открытый исходный код всегда хорош, но разовая стоимость, скажем, до 2 тысяч долларов, с дополнительными обновлениями / поддержкой тоже подойдет. Стоимость лицензии на пользователя неприемлема,
Доступ к исходному коду был бы большим бонусом, особенно с идеей запуска частей SDK на Windows CE / Mobile.
В настоящее время я занимаюсь управлением собственными 3D и 2D окнами просмотра. Если достойный SDK низкого уровня недоступен, SDK более высокого уровня должен хорошо обрабатывать 3D и работать с миллионами треугольников, многоугольников и текстовых объектов на 32-битной платформе Windows.
Какие-либо предложения? Мы будем очень признательны за перечисление конкретных плюсов и минусов в предложенном вами предложении.





Думаю, DirectX или SDL вам подойдут. Они предназначены для 3D, но работают и для 2D. Оба поддерживают Windows CE / Mobile, а SDL также доступен для ряда ОС сторонних производителей.
К сожалению, прямая совместимость с GDI в библиотеках не поддерживается. Но вы можете сделать это, создав класс конвертера, который будет принимать всю выходную графику из ваших классов приложений, разработанных GDI, и преобразовывать формат в соответствии с потребностями классов DirectX или SDL (в зависимости от того, что вы хотите использовать).
Лично я однажды сделал такой преобразователь класса. У меня была игра, написанная для Pocket PC с использованием SDL, и мне нужно было перенести ее на устройство Palm. Там мне пришлось использовать другую графическую библиотеку (сейчас я не помню имя библиотеки), но мне удалось перенести вывод всех функций SDL в формат, необходимый для другой библиотеки. Мне нужно было изменить свое приложение для вызова функций конвертера (оболочки), которые перенаправляют вызов в библиотеку Palm или Pocket PC, в зависимости от того, на каком устройстве оно запущено в данный момент. Поэтому я думаю, что вы можете сделать то же самое для преобразования GDI -> DirectX или GDI -> SDL.
Однажды я оценил FastGraph (http://www.fastgraph.com) для проекта. Мне понравилось в небольших тестовых программах, которые я написал, это было очень быстро. В итоге мы не использовали его по внешним причинам (не имеющим отношения к библиотекам, которые я оценивал), поэтому у меня нет более практического опыта.
Спасибо за ссылку. Я использовал FastGraph для DOS много лет назад, и тогда он мне понравился. Не думал, что он все еще где-то поблизости.