Search
Write a publication
Pull to refresh
54
0

Пользователь

Send message

От int main() до BeginPlay: как происходит инициализация Unreal Engine под капотом

Reading time16 min
Views20K

Одна из самых простых и базовых концепций в программировании игр — это идея игрового цикла. При запуске вашего проекта происходит его инициализация, после чего игровой цикл действует до тех пор, пока игрок хочет продолжать игру: каждый кадр вы обрабатываете ввод, обновляете состояние игрового мира и выводите результат на экран. Когда игрок закрывает игру, происходит очистка данных, и на этом все заканчивается. 

Но когда вы пишете игровой код на Unreal Engine, вы не имеете дело с игровым циклом напрямую. Вы не начинаете работать сразу с основной функцией — сначала вы определяете подкласс GameMode и переопределяете функцию под названием InitGame. Или пишете одноразовые классы Actor и Component и переопределяете их функции BeginPlay или Tick для добавления собственной логики. Это самый минимум того, что вам нужно сделать: обо всем остальном движок позаботится за вас.

Unreal Engine также предлагает вам как программисту мощный и гибкий инструментарий: конечно, он имеет открытый исходный код, но также возможно и расширение несколькими другими способами. Даже если вы только начинаете работать с этим движком, было бы не лишним получить представление о его GameFramework: о таких классах, как GameMode, GameState, PlayerController, Pawn и PlayerState.

И один из лучших способов ближе познакомиться с движком — это заглянуть в его исходный код и посмотреть на то, как он загружает вашу игру.

Читать далее

Windows Kernel Drivers — Стандартные ошибки – IRQL

Reading time4 min
Views7.1K

Данная статья нацелена на тех, кто только недавно начал разрабатывать kernel-драйвера под ОС Windows. В 100-ый раз видишь ненавистную надпись IRQL_NOT_LESS_OR_EQUAL и этот грустный смайлик? Тогда прошу вас пройти под кат.

Читать далее

HEX-дешифратор для 2-значного 7-сегментного LED-индикатора на одном(!) GAL16V8

Reading time14 min
Views22K

Те, кто увлекается ретрокомпьютингом в области самостоятельной сборки компьютеров на базе 8-битных процессоров (i8080/i8085/z80/z180/6502/6809 и т.п.) или микроконтроллеров обычно сталкиваются с необходимостью отображения в процессе отладки и/или "эксплуатации" какой-либо информации (содержимого шин адреса, данных и др.) на 7-сегментных индикаторах в шестнадцатеричном представлении.

В принципе, задача отображения двух шестнадцатеричных разрядов с лёгкостью решается парой «умных» индикаторов TIL311. Эти хорошо известные индикаторы, разработанные компанией Texas Instruments задолго до того, как вымерли динозавры, ещё производятся и их можно найти на Aliexpress.

Несмотря на удобство использования, эти индикаторы имеют и существенные недостатки, а именно:

Читать далее

Делаем блок SPI to AVALON_MM для USB-устройства на базе FX3

Reading time18 min
Views2.7K
В предыдущей статье мы научились подавать Vendor команды в устройство USB3.0 на базе контроллера FX3 и реализовали программную шину SPI. Сегодня мы продолжим начатое и сделаем компонент SPI to Avalon_MM. Может возникнуть вопрос: мы же уже умеем работать с шиной Avalon_MM через JTAG средствами TCL-скриптов, зачем нам что-то ещё?

Дело в том, что когда мы работаем на чистом TCL, как делали это здесь и здесь, всё замечательно. Но для задач, гоняющих десятки или даже сотни мегабайт, этот вариант слишком медленный. Поэтому мы вынуждены добавить программу на С++, работающую через USB 3.0.

Вариант с TCL-сервером, к которому обращается плюсовая программа, рассмотренный в этой статье, требует сложной ручной подготовки при каждом запуске. Надо обязательно запустить среду исполнения (для Windows и Linux они разные), запустить серверный скрипт, а затем – в программе синхронизировать работу с данными по USB и с командами через TCP. Не люблю такие сложности. Оставим те варианты под случаи, когда они не создают трудностей. Здесь же у нас есть USB-устройство, мы всё равно с ним работаем, вот и будем обращаться к шине AVALON_MM через него. Приступаем.


Читать дальше →

Что означает RISC и CISC?

Reading time21 min
Views179K

Многие говорят, что разница между RISC и CISC стала несущественной. Так ли это? И если нет, то в чем разница между современными RISC и CISC процессорами?

Компания Apple выпустила процессор Apple Silicon M1, который произвел фурор. Теперь вы можете задаться вопросом, чем он отличается от процессоров Intel и AMD? Вероятно, вы слышали, что M1 — процессор с архитектурой ARM, а ARM — это RISC, в отличие от Intel и AMD.

Если вы читали про разницу между микропроцессорами RISC и CISC, то вы знаете, что множество людей утверждают об отсутствии практической разницы между ними в современном мире. Но так ли это на самом деле?
Читать дальше →

Сам себе пейджинговый оператор

Reading time2 min
Views92K

Привет, в этом посте я хочу рассказать как я загорелся одной больной идеей, и создал свою пейджинговую сеть в 2021 году.

В ноябре 2020 на Авито я наткнулся на объявление о продаже пейджера Motorolla Advisor всего за 100 рублей и рядом со мной. По гуглив подобные объявления, я понял что этот раритет отдается даром. Спустя всего час в руках у меня было чудо техники из 90х. И волна ностальгии, по школьным годам нахлынула на меня, с таким прибором я ходил еще в 1-3 классе. Пейджер был в идеальном состоянии почти ни царапинки. И тут в моей голове забегали тараканы, и я захотел отправить на него сообщение любым способом .

Читать далее

RS485 — стандарт промышленных сетей. Какими особенностями обладает микросхема приемопередатчика?

Reading time9 min
Views106K

При построении сети для общения между большим количеством устройств, можно задуматься: а какой интерфейс выбрать? У каждого интерфейса есть свои плюсы и минусы, которые определяют их применение: CAN – автомобилестроение, RS485/RS232 – промышленность, Ethernet – потребительская электроника/сервера. Какие “фичи” микросхемы приёмопередатчика помогают обезопаситься от множества проблем при монтаже и эксплуатации? Как происходит процесс измерений и исследования микросхем приемопередатчиков? Новая микросхема RS485 готова к выходу на рынок!
Читать дальше →

Кодирование Рида-Соломона для чайников

Reading time14 min
Views32K

Есть способ передавать данные, теряя часть по пути, но так, чтобы потерянное можно было вернуть по прибытии. Это третья, завершающая часть моего простого изложения алгоритма избыточного кодирования по Риду-Соломону. Реализовать это в коде не прочитав первую, или хотя бы вторую часть на эту тему будет проблематично, но чтобы понять для себя что можно сделать с использованием кодировки Рида-Соломона, можно ограничиться прочтением

этой статьи

Радости экспериментов с ISA и PCI

Reading time8 min
Views21K
С момента появления домашних компьютеров существует возможность расширять их функционал путём установки большего количества RAM, более ёмких накопителей, дополнительных комплектующих. Но только с появлением IBM PC привычной стала идея о полностью открытой модульной компьютерной системе. А именно, концепция карт расширения позволила пользователям компьютеров не зависеть от конфигураций систем, предлагаемых производителями. Подобные конфигурации можно было, в ограниченных пределах, расширять комплектующими, рассчитанными исключительно на эти системы. Благодаря универсальным картам расширения появились целые отрасли промышленности, они стали и причиной возникновения большого рынка любительских устройств, которые можно было подключать к компьютерам.



В первом IBM PC было пять 8-битных слотов расширения, подключённых прямо к процессору 8088. Компьютер IBM PC/AT был основан на процессоре 80286, в результате слоты стали 16-битными. С помощью слотов расширения к компьютеру можно было подключать практически всё что угодно: графические и сетевые карты, дополнительную память, какие-то особые платы. Хотя для этих слотов расширения и не существовало официального наименования, во времена PC/AT их называли, соответственно, PC-шинами и AT-шинами. А название Industry Standard Architecture (ISA) — это ретроним, который придумали создатели клонов PC.

Такая открытость ISA означала то, что можно было достаточно легко и дёшево создавать собственные ISA-карты. То же касалось и шины PCI, которая появилась после ISA и была такой же открытой. В результате до сих пор существует полная жизни экосистема, в которой есть место и любительским звуковым картам, рассчитанным на слоты PCI или ISA, и картам расширения, позволяющим оснастить IBM PC 1981-го года поддержкой USB, и много чему ещё.

С чего начать тому, кто в наши дни хочет заняться работой с ISA- и PCI-картами?
Читать дальше →

Как «Ревущий Котёнок» с Reddit заработал 28.500% на акциях GameStop: объясняю простым языком

Reading time9 min
Views158K

Все обсуждают безумно красивую историю про то, как пацаны с Reddit смогли одолеть зазнавшиеся хедж-фонды, но далеко не все понимают, что именно происходило на рынках. В этой статье я объясняю простым языком, что конкретно привело к текущей ситуации.

Читать далее

Боремся с таймаутами при использовании USB 3.0 через контроллер FX3, возникающими при определенных условиях

Reading time11 min
Views3.3K
Итак, в блоке из предыдущих трёх статей, мы рассмотрели, как можно изменить идеологию, принятую в первой версии комплекса Redd, заменив двухпроходную прокачку потоковых данных (сначала в буферное динамическое ОЗУ, а уже затем – в PC через интерфейс USB 2.0) на однопроходную (сразу в PC через интерфейс USB 3.0). Всё было замечательно, все тесты проходили на ура… И тут я решил проверить систему при поведении источника, отличном от того, в котором работали инженеры Cypress. И сразу нарвался на проблему, которая чуть было не похоронила все мои задумки. Как я к этому пришёл, и как прорвался – будет описано в данной внеплановой небольшой статье. Девизом её я бы сделал фразу, что не всегда хорошие показатели являются признаком полностью работающей системы.


Читать дальше →

Заметки о Unix: система управления заданиями и использование SIGCHLD в (BSD) Unix

Reading time3 min
Views3.9K
Недавно мы опубликовали перевод статьи о конвейерах в Unix, у автора которой есть ещё немало подобных материалов. В той публикации мы устроили опрос о целесообразности перевода других статей того же автора. Большинство принявших участие в опросе эту идею поддержало. Поэтому сегодня мы предлагаем вашему вниманию перевод ещё одного материала о Unix, который посвящён SIGCHLD.


Читать дальше →

Что нового в SOLIDWORKS 2021

Reading time7 min
Views14K

Новая версия SOLIDWORKS 2021 опять радует пользователей новыми функциями и улучшениями в привычных командах — все для того, чтобы помочь инженерам разрабатывать продукцию не только быстрее, но и эффективнее. На этот раз разработчики поставили перед собой задачу оптимизировать стандартные рабочие процессы, улучшить быстродействие программы и надежность проектных процедур. Рассмотрим подробнее, где произошли изменения.

Читать далее

Разбираем ресурсы Twisted Metal 4 (PSX) в Ghidra. Часть 1

Reading time9 min
Views3.8K


Всем привет,


В данной статье я расскажу о реверс-инжиниринге ресурсов игры Twisted Metal 4 для первой Playstation. В качестве основного инструмента я буду использовать Ghidra.


Наверняка вы слышали об игровой серии Twisted Metal. А кому-то, наверное, довелось и поиграть (мне нет). По словам тех, кто играл в четвёртую часть, в игре имеются некоторые неприятные баги. Так вот, реверс-инжиниринг должен помочь исправить их. Поехали…

Читать дальше →

Трюки с виртуальной памятью

Reading time14 min
Views18K

Я уже довольно давно хотел написать пост о работе с виртуальной памятью. И когда @jimsagevid в ответ на мой твит написал о ней, я понял, что время пришло.

Виртуальная память — очень интересная штука. Как программисты, мы прекрасно знаем, что она есть (по крайней мере, во всех современных процессорах и операционных системах), но часто забываем о ней. Возможно, из-за того, что в популярных языках программирования она не присутствует в явном виде. Хотя иногда и вспоминаем, когда наш софт начинает тормозить (а не падать) из-за нехватки физической оперативной памяти.

Но, оказывается, с помощью виртуальной памяти можно делать довольно интересные вещи.

Читать далее

Начинаем опыты с интерфейсом USB 3.0 через контроллер семейства FX3 фирмы Cypress

Reading time14 min
Views14K
В целом, основной цикл статей про работу с комплексом Redd можно считать завершённым. Мы познакомились с методиками доступа к основным компонентам комплекса, научились писать и отлаживать на нём программы для центрального процессора, при этом локально используя хоть Linux, хоть Windows. Мы научились разрабатывать «прошивки» для ПЛИС, а также начерно освоили типовой цикл их разработки (написание кода моделирование, запуск в железе). Вроде, всё.

Но тут мне пришлось освоить работу с шиной USB 3.0 через контроллер семейства FX3 фирмы Cypress. Пока свежи воспоминания, я решил задокументировать детали процесса, так как сделав всё по фирменным описаниям, можно либо не получить ничего, либо получить не совсем оптимальную систему. И снова вышел целый блок статей. В первой из них, мы рассмотрим, где взять «прошивку» для самого контроллера, как её собрать и залить в него. Также сделаем базовую «прошивку» для ПЛИС.


Читать дальше →

Дорабатываем прошивку USB 3.0, используя анализатор SignalTap, встроенный в среду разработки Quartus

Reading time9 min
Views4.4K
В прошлой статье мы сделали черновые прошивки для контроллера FX3 и ПЛИС, чтобы начать работу с шиной USB 3.0. Статья так разрослась, что проверку работоспособности системы мы отложили на потом. Сегодня мы проведём эту проверку (а как выяснится по ходу работ – ещё и оптимизацию «прошивки» для вывода работы на максимальную скорость).

Чтобы повысить полезность статьи, проверку мы будем производить при помощи логического анализатора SignalTap, встроенного в среду разработку Quartus Prime. Он позволит нам снимать временные диаграммы, не подключая никаких щупов к системе и не покупая никакого дополнительного оборудования.


Читать дальше →

Учимся работать с USB-устройством и испытываем систему, сделанную на базе контроллера FX3

Reading time20 min
Views38K
В двух предыдущих статьях мы сделали USB 3.0 систему на базе контроллера FX3. Пришла пора научиться работать с нею из своих программ для PC. Ну, и попутно понять, насколько получившаяся система пригодна для практического применения. Действительно ли ширины канала хватает на весь поток? И не теряются ли единичные байты из потока? Кто хоть немного поработал тестировщиком, не поверит в то, что если система в принципе работает, значит, работает и в деталях. А я на этой должности проработал лет пять, не меньше, поэтому привык проверять всё на практике. В общем, приступаем.


Читать дальше →

Препарируем Compound File Binary format (CFB), или начинаем парсить DOC

Reading time5 min
Views8.1K
Compound File – это довольно сложный универсальный бинарный формат файлов, лежащий в основе форматов офисных документов до MS Office 2007 (doc, xls, ppt, msg, …), отчасти MS Office 2007+ (например vbaProject.bin внутри xlsm) и других.

Под катом краткое описание как Compound File устроен внутри, которое, надеюсь, будет полезно как ликбез и поможет читателю лучше понимать что делают утилиты или про что пишут в статьях про CFB файлы.


Читать дальше →

Внутренности вордовских файлов: просто ужас

Reading time9 min
Views57K
О сложности и жуткости вордовских файлов давно ходили легенды. Известно было, что формат этот крайне запутанный, а к тому же еще и полностью засекреченный, так что о половине тамошних полей можно было только догадываться.

Не скрою, что и меня эти файлы интересовали, но дальше первой страницы описания я так продвинуться и не смог. Однако незакрытый гештальт остался.

А теперь вот жизнь заставила (или подкинула возможность) все-таки разобраться во внутренностях всем хорошо известных документов, тем более, что в Штирлица теперь играть не обязательно, достаточно скачать с сайта «Майкрософта» официальные спецификации.

Что тут можно сказать? Невольно вспоминается старый пошлый анекдот: ну ужас. Ну просто ужас, но ведь не ужас-ужас-ужас.
Читать дальше →

Information

Rating
Does not participate
Date of birth
Registered
Activity