DFPSR
Современная библиотека программного рендеринга для C ++ 14 с использованием SSE/NEON, созданного Дэвидом Форсгреном Пиува. Если вы ищете последнюю мощность, посмотрите в другом месте. Это библиотека для качественного программного обеспечения, предназначенного для разработки в течение нескольких десятилетий, и пережить ваших внуков с минимальным обслуживанием. Точно так же, как вырезать ваше наследие на камень, требуется больше усилий, чтобы овладеть навыком, но дает более надежный результат, не полагаясь на далекую библиотеку. Максимальный пользовательский опыт и минимальная системная зависимость.
Фон Творца
Мировой рекорд DXOMARK в цифровой стабилизации видео от мобильной индустрии. Работал с критическим роботизированным роботизированным видом управления движением в аэропорту гражданского населения. Проверяли лекции по оптимизации в разных компаниях в мобильной, медицинской и игровой отрасли. Работал с оптимизацией на графическом процессоре, процессоре, DSP, ISP, FPGA и ASIC.
Оптимизация нуждается в хороших инструментах, чтобы сэкономить время
Наиболее важной частью оптимизации кода является понимание как высоких алгоритмов, так и низких ограничений оборудования, потому что вы не можете позволить ученому спроектировать алгоритм и оптимизировать программист без возможностей для изменений в рукописном ассемблере (самая распространенная ошибка). Дизайн алгоритма не выполняется, пока у вас не будет хорошего компромисса между качеством и производительностью со всеми оптимизациями. Экономия времени за счет качества в одном месте может быть компенсирована повышением качества при более низких затратах где -то еще, чтобы увеличить как скорость, так и качество. Чем быстрее вы можете создать почти оптимальную векторизацию алгоритма, тем быстрее вы можете идентифицировать процесс проектирования. Подумайте о том, что вы действительно приближаете. Ваша цель - нарисовать как можно больше совершенно прямых многоугольников, или является целью аппроксимировать сложную форму реального мира, используя какую -либо технику?
Официальный веб -сайт: dawoodoz.com
Каковы ваши игры могут выглядеть использование изометрического процессора

Динамический свет в реальном времени с листовыми тени на основе глубины и нормальным отображением со скоростью 453 кадров в секунду в 800x600 пикселях, работающих на процессоре. Более высокие решения сломают стиль ретро и на самом деле выглядят хуже, но осталось много времени для игровой логики и дополнительных эффектов. Благодаря предварительно-трансферы 3D-модели для диффузных, нормальных и высоких изображений, чтение данных гораздо более эффективно кэш на современных процессорах, чем использование свободной перспективы. Это также позволяет иметь больше треугольников, чем пиксели на экране, и делать пассивные обновления статической геометрии. 3D-модели с низким содержанием подготовки используются для смены динамических тени.
Традиционный 3D -рендеринг с многоугольниками также поддерживается

3D-рендеринг не так быстро, как 2D или изометрический рендеринг на процессоре, но часто достигает 60 Гц в 1920X1080 пикселях для графики с низким содержанием. Для более высокого уровня детализации и большего количества функций рекомендуется скопировать и изменить конвейер рендеринга, чтобы сделать его жестким кодированием только для тех функций, которые вы хотите, а затем упростить математику для вашего конкретного двигателя рендеринга, как это сделано для примера песчаной коробки, где только цвета вершины необходимы для крошечных треугольников без перспективы, так что цвета можно рассчитать по увеличению цветов, а не интерполяция, не взаимодействующие координаты.
Зачем использовать программный рендерин с открытым исходным кодом, когда графические процессоры так быстры?
- Надежность с использованием программного рендеринга, вероятно, не разрушит вашу систему при ошибке, в отличие от API-интерфейсов графики для GPU, которые подвержены синим экранам.
- Детерминизм, если он работает на одном компьютере, он, вероятно, будет работать одинаково на другом компьютере с незначительными различиями между операционными системами. OpenGL, однако, имеет нулевые функции, оставшиеся, если вы удалите все, что имеет ошибку в любой реализации драйвера.
- Низкие накладные расходы , когда вы хотите низкое разрешение для визуального стиля или роботизированного зрения, вы также можете сохранить его минимальным с помощью статически связанного программного рендеринга, когда графический процессор будет медленнее.
- Легкая отладка, когда все данные обрабатываются в программном рендерере, гораздо легче увидеть, что пошло не так во время отладки.
- Легко изменить, нет никаких аппаратных ограничений, кроме циклов ЦП и памяти, поэтому вы можете изменить весь конвейер рендеринга, копируя и вставая код.
- Pixel Exact 2D Вместо того, чтобы делать странные обходные пути над многоугольниками, программный рендеринг позволяет вам работать с целыми пикселями с самого начала.
Зачем использовать этот программный рендеринг?
- Минимальные системные зависимости Все, что связано с конкретным системным API, помещается в отдельный модуль обертки, интегрирующий минимум основных функций, которые должны быть легко интегрировать в будущие операционные системы. В отличие от других программных рендеристов, это не требует каких-либо графических драйверов, потому что вы можете получить одинаковую производительность, используя многопоточную загрузку, загрузив холст в фоновый поток, когда большинство сердечников в любом случае.
- Нет двоичных файлов, вся библиотека автоматически собирается из исходного кода. Даже система сборки компиляется перед созданием вашего проекта. Это гарантирует, что никто в будущем не сможет обратить всплеск инженерного века старого века при попытке создать свою программу, а также делает ее намного более безопасным от вредоносных программ, когда все можно проверить в читаемом коде.
- Статическое связывание всей библиотеки статически связана с вашей программой, как если бы вы написали код самостоятельно. Только API -интерфейсы системных систем, которые выжили в течение десятилетий, опираются как зависимости, без драйверов графических процессоров, нет внешних слоев носителя. Все, от того, как кодировать символы Unicode и отображать шрифты до того, как полигон будет расти в отношении глубинного буфера, будет существовать в вашей скомпилированной программе C ++ для максимальной надежности и детерминизма. Система сборки позволяет статически связывать стандартные библиотеки C ++, когда это возможно.
- Создайте свое устаревшее программное обеспечение, чтобы будущие поколения могли бы переносить, компилировать и работать изначально без необходимости эмуляторов или обратной инженерии проприетарных графических драйверов.
Функции в этой библиотеке
- Полностью автоматическая система сборки C ++ не более длинных списков исходных файлов в вашем проекте. Включенная система сборки найдет включенные заголовки и их по имени, соответствующие исходным файлам автоматически. Просто скажите, чтобы он ползти из Main и дайте ему автоматически выяснить остальные. Различные бэкэнды для библиотек обрабатываются путем включения заголовка проекта библиотеки, сообщая, какой бэкэнд использовать для каждой платформы. Контрольные суммы используются только для создания того, что изменилось, поэтому нет необходимости создавать статическую библиотеку для частей вашего кода.
- 2D рисунок пиксель точный стандартный рисунок вызовы для линий, прямоугольников, сплошной копии изображения, чертежа альфа -фильтрованного изображения, глубинного чертежа и чертаж трафарета.
- 3D-рендеринг, примерно эквивалентный Direct3D 7, с двулинейной выборкой текстуры, MIPMAPPING, LIGHTMAP и альфа-фильтрацией при использовании из коробки, но может быть изменено, чтобы быть более похожими на прямой 3D 9, если вы применяете затенение на текстуры (можете использовать SIMD с многопоточным и планировать на основе расстояния просмотра).
- Система окклюзии Коллекция задач рендеринга для мультиподбота также содержит окклюзионную сетку, где можно нарисовать формы окклюзии, чтобы пропустить чертеж треугольников, объекта или целых групп, если ваш двигатель реализует широкую фазу для испытаний на отбор и окклюзии. Эта полностью динамическая окклюзия может быть объединена со статическими оптимизациями для конкретных игр, используя информацию о том, какие области можно увидеть в каждом месте камеры.
- Необязательно отдаленная обрезка. Поскольку этот графический API использует только буферы с глубиной с плавающей точкой для перспективы, нет необходимости нормализовать значения глубины для любого представления на основе целого числа. Это позволяет выбрать бесконечное расстояние дальнего зажима при создании вашей камеры, если вы можете позволить себе рендеринг всей сцены одновременно.
- Медиа-слой кроссплатформенный медиа-слой, предназначенный для надежности. ALSA и Winmm Sound Backens для полного контроля над смешиванием звука, не называя ничего конкретного системы. Управление окнами использует многопоточную загрузку для загрузки холста, так что вам не нужны графические драйверы графического процессора и тяжелые зависимости, чтобы загрузить результат. Использует окно без границы для полноэкранного режима, чтобы вы могли легко получить доступ к другим программам, если вы получите важное электронное письмо или мгновенное сообщение в фоновом режиме. Выполнение выполняется в процессоре для работы с каким -либо разрешением экрана, не полагаясь на графические драйверы, которые могут дать пикселям неправильную интерполяцию или даже не существует. Старые носители, предназначенные для дисплеев CTR, могут привести к ошибкам в диапазоне, когда не установлены графические драйверы, и дисплей не принимает произвольный выбор разрешения. Использует невидимый значок курсора, чтобы скрыть мышь, так что сбоя программы не заберут курсор при попытке убить процесс.
- Графический интерфейс пользователя Загрузите визуальный интерфейс в окно, используя одну строку кода, чтение файла макета или строки. Получите общие ручки для компонентов, используя имена или комбинацию имени и индекса. Добавьте события, подключив функции Lambda к компонентам и обратным вызовам окон.
- Таймеры получают двойные точные секунды с момента первого звонка к таймеру, так что вам не придется беспокоиться о полуночных ошибках, когда время дня сбрасывается.
- SIMD Abstraction Layer использует SIMD.H для автоматического генерации высокоэффективных внутренней внутренней внутренней системы SSE, AVX и NEON из полностью читаемого математического синтаксиса. Ваш векторизованный код будет выглядеть как справочная реализация, а компиляция для неизвестной целевой архитектуры будет генерировать скалярные операции, которые все еще могут привести к повышению производительности, написав ваш алгоритм с основными операциями, которые чаще всего поддерживаются непосредственно в оборудовании CPU, доступ к памяти, выровненную с линии кеша, сохраняя окно инструкции, а также то, что он очень простым в комполизовании, в том, что в чем-то по-видимому в чем-то в чем-то есть что-то в чем-то, что в чем-то в том, что в чем-то в чем-то в том, что в чем-то в чем-то в чем-то в чем-то в том, что в чем-то в том, что в чем-то в том, что в чем-то в том, что в том, что в чем-то в том, что в чем-то в том, что вызывает что-то в чем-то по сравнению с чем-то по-другому.
- Безопасные указатели используют safepointer.h, чтобы поймать больше ошибок, сообщив вашему указателю, какую часть распределения он может работать. Не оставляет накладных расходов в версии релиза, чтобы вы всегда могли заменить свой необработанный указатель SafePointer и знать, что вы получите информативное сообщение об ошибке с именем указателя и подробной информацией, когда произойдет что -то плохое.
- Строки используют UTF-32 для хранения символов в памяти, чтобы убедиться, что все алгоритмы работают с нелатиновыми символами (совместимыми с u »« Строковые литералы). Сохранение в файлах по умолчанию в UTF-8 (Compact Storage) с BOM (явно говорит, какой формат используется) и CR LF Line Condings (так что текстовые файлы, кодируемые в любом месте, можно было прочитать везде). Использует общие буферы памяти автоматически, чтобы разрешить разделение на список строк без затопления кучи небольшими распределениями.
- Буферы все файлы сохраняются и загружаются через буферные объекты. Это гарантирует, что все форматы файлов, которые вы проектируете, должны беспокоиться только о том, как кодировать байты, регрессионные тесты будут просты, не включая внешние побочные эффекты из файловой системы, и любой файл может быть связан с вашим собственным, используя буферный эквивалент функции сохранения.
- Управление файлами примерно эквивалентно std :: fileystem от c ++ 17, но работает с C ++ 14, использует одну и ту же строку и типы ReadableString на всех платформах и может автоматически исправлять сепараторы папок между / (posix) и (MS-Windows).
- Управление процессами может запустить другие приложения и отслеживать их статус, чтобы вы могли вызвать приложение, например, функцию, записывающую результат в файлы.
Резюме лицензий
Эта библиотека в основном использует лицензию с открытым исходным кодом Zlib, но также включает библиотеку изображений STB для сохранения и загрузки изображений, которая имеет разрешающую двойную лицензию (MIT / Unlence). Поскольку библиотека изображений STB может использоваться в качестве общественного домена, она не имеет никакого юридического влияния на использование библиотеки в целом по лицензии Zlib с открытым исходным кодом. Все включали исходный код со всеми их лицензиями разрешает как коммерческое, так и некоммерческое использование, включая нераскрытую модификацию исходного кода. Если вы не перераспределяете исходный код, вам не нужно никому говорить, что вы используете эту библиотеку, потому что неискреннее одобрение не имеет значения.
Все еще публичная бета
Тема, графический интерфейс, шрифт и звуковые API все еще находятся в активной разработке и могут иметь значительные изменения до того, как стабильная версия 1.0 будет готова, потому что какой -то код является просто примитивным заполнителем, пока расширенная реализация не сможет заменить ее, и нужно попытаться фактически использовать библиотеку, прежде чем проблемы использования использования станут очевидными. Буфер, файл, изображение, рисование, фильтр, строка и временные API, однако, уже довольно стабильны. Вы можете выбрать придерживаться определенной версии для каждого нового проекта, продолжать обновляться с последними изменениями или ждать стабильной версии 1.0.
Как вы можете помочь
- Порт в Макинтош или Уэйленд с использованием тех же принципов минимальной зависимости.
- Проверьте эту бета -версию и дайте отзыв о дизайне до выпуска версии 1.0.
- Создайте различные типы игровых двигателей с помощью инструментов с открытым исходным кодом.
Поддерживается аппаратное обеспечение процессора:
- Intel/AMD с использованием внутренней и дополнительной расширений SSE2 .
- Рука использует неоновую внутреннюю.
- Неизвестные архитектуры процессора, без векторизации SIMD в качестве резервного решения.
Платформы:
- Linux , протестированный на Mint, Mate, Manjaro, Ubuntu, Raspberrypi OS, Raspbian (Buster или позже). Mint Linux нуждается в заголовках компилятора и X11, поэтому запустите «Sudo Apt Install G ++» и «Sudo Apt установить libx11-dev» перед компиляцией. В настоящее время поддержка X11 и Wayland планируется для будущих версий.
- Microsoft Windows , но медленнее, чем на Linux, потому что Windows имеет много фоновых процессов, более медленных потоков и управления памятью.
Может также работать над:
- У BSD и Solaris есть код, нацеленные на платформы на fileApi.cpp для получения папки приложения, но, вероятно, отсутствуют некоторые приложения для запуска сценария сборки. В будущих системах Posix Systems должно быть только несколько причуд, чтобы разобраться, если у него есть сервер x11.
- Биг-эндиан поддерживается в теории, если включает в себя макрос DSR_BIG_ENDIAN во всем мире, но это никогда не было проверено из-за трудностей с нацеливанием такой старой системы с современными компиляторами.
Еще не перенесено на:
- Macintosh больше не использует x11, поэтому для этого потребуется некоторые усилия по портированию. Macintosh не имеет символической ссылки на двоичный файл процесса работы, поэтому он будет возвращаться к текущему каталогу при запросе папки приложения.
Не будет нацелены:
- Мобильные телефоны. Поскольку постоянные изменения, нарушающие назад совместимость на мобильных платформах, победит цель использования долгосрочного времени. Мобильные платформы требуют пользовательских компиляторов C ++, доступа к процессорам сигналов, вращению экрана, сохранению аккумуляторов, знания, когда отображать виртуальную клавиатуру, разрешения на безопасность, принудительные полноэкранные ... попытка сделать оба в то же время в конечном итоге с компромиссами дизайна, таких как Microsoft Windows 8 или Unity Lock Ecrecle Ubuntu, так что это лучше взять на библиотеки, построенные на различные библиотеки.
- Веб -фронта. Такая обертка над этой библиотекой не сможет получить силу внутренней системы SIMD для определения ваших собственных фильтров изображения, поэтому вам было бы лучше нацелить язык затенения графического процессора из браузера, который больше подходит для динамического сценария.