Странно, потому что разрабатывалось в основном как раз на встроенной Intel. Если не трудно — скиньте лог, который появляется рядом с ехе. Можно в личку скопировать, он небольшой
Да, симптомы один в один, как у конкурсантов. И явно дело в многоразовом использовании буфера, частицы рисуются в отдельном буфере и за один раз. Я постараюсь на днях собрать новый билд (или несколько), ничего если отправлю его (их) вам, не сильно затруднит?
«А в моем случае один буфер используется несколько раз за кадр.» Да, это вы зря, с таким подходом может быть масса проблем. Лучший вариант конечно делать один Draw на кадр если вершинная декларация позволяет и использовать один большой буфер в который в конец дописывать свои вершины.
Классно, но не понял, почему шрифт занимает так много? На скрине картинка 256*128 = 32768 пикселей, в режиме 1 бит на пиксель это всего 4 килобайта.
Когда делал в школе игры под дос, точно так же поступал — писал виндовую утилиту для генерации растровых шрифтов. Только хранил символы 8х16 пикселей отдельно, а не целой картинкой.
Пишется полноценный битмап в rgba, соответственно 4 байта на пиксель, RGB — всегда ffffff, альфа варьируется. Очень нерационально, верно. Как минимум, надо отрезать RGB, оставлять только альфу. Утилиту планируется научить всяким эффектам, в том числе цветовым, поэтому изначально писалось с полным хранением RGB. Переписывать под конкурс не было времени.
И как я отметил в посте, намного меньше по размеру была бы генерация на лету. Может быть даже меньше чем хранение битовой маски.
Ох, на меня нахлынула лютая ностальгия в комплекте с дежавю :)
Когда-то в 2008 году писал похожую игру на конкурс, проводимый mirgames.ru, только ограничение там было более жесткое — не более 64 кб. В итоге у меня родился Crimsonland-подобный топдаун-шутер с итоговым весом сжатого бинарника в 49 кб. Вкратце: жестко заточенный под конкретную эту игру «фреймворк», юзающий OpenGL для графики, DirectSound для звука, и WinAPI для генерации текстур шрифтов и всего остального. Также в игре присутствует полноценная пиксельная графика, честно украденная из древней DOS-игры (+часть графики генерируется при старте) и звуки. Звуки в итоге и занимают большую часть места, без них и без звукового движка игра весила бы по крайней мере в 2 раза меньше. Использовался Delphi 2007, в качестве упаковщика — 20to4 + UPack. В общем-то, приложив некоторое количество усилий, игру можно было бы еще уменьшить по крайней мере раза 2, но смысла возиться с этим я не видел — игра и так влезала в 64кб с большим запасом.
Позже еще добавил трекерную музыку в XM через MiniFMOD, сжатый бинарник стал весить 110 кб (.xm с музыкой был довольно жирный — 99кб).
Игру также постигла аналогичная вашей проблема — на половине видеокарт от ATI игра упорно падала при старте сурвайвала. Как оказалось, render-to-texture на ATI тогда работал очень хреново, потому я в срочном порядке заменил рендеринг в текстуру на тупой glReadPixels, и все стало работать везде, но… часть голосов я из-за этого тогда тоже недополучил. Но 2 место таки взял %)
Ну и если кому интересно:
Архив с исходниками+бинарниками: www.dropbox.com/s/q87s3rq8r2g8wm3/extinction.zip?dl=0
(К сожалению, исходников последней версии c музыкой не нашел, сохранился только бинарник. Но вроде бы разница только в отсутствии в исходниках поддержки музыки.)
115кб? Когда-то люди Элиту в 48кб запихивали, а тут 115! А если серьёзно — молодец! Я уже очень давно ушел из программирования, оценить качество работы не могу. Но сам факт старания и стремления… Большинство кодеров давно уже забыли, что такое килобайты, оптимизация и скорость.
Спасибо! Стремление к минимизации пришло от просмотра товарища XProger. Хотя мне до его трехмерного шутера void в 27 килобайт все еще очень далеко :) Который, кстати, на Delphi.
На будущее, для подобных проектов: есть метод для получения сверхкомпактных .exe (от 1 кб) для Windows, предложенный Максом Феоктистовым (автором Small HTTP Server) на основе компилятора DJGPP, заточенного для генерации .exe, и собственного PE-линкера для Windows. Всё это опубликовано у него на сайте.
Мне удалось прикрутить генерацию .exe данным способом к мультитаргетной среде разработки XDev. Вот пример сверхкомпактной оконной программы с исходниками на языке Оберон-2 (для 32 и 64 бит соответственно):
Раз предпочитаете Дельфи, а не Си, то, возможно, стоит попробовать для разработки компактных игр паскалеподобный Оберон. Если решитесь осваивать — потребует времени на примеривание, разработку биндингов. Но потраченные усилия обязательно окупятся — ведь на XDev можно делать программы не только для Win32/64, но и для Linux, Java microedition и ретро-платформ — DOS, MSX, ZX Spectrum. Если интересно, приходите на форум, будем общаться. :)
Сейчас портирую на Оберон некоторые игры с ZX Spectrum и DOS, например:
Кто-то игры делает, кто-то портирует. Смысл моей работы по портированию — прояснить алгоритмы, вывести их из малопонятного сильно заточенного под платформу или среду разработки вида в сторону мультиплатформенности. Конечный размер игр (их версий для Спектрума) не может превышать 42 кб даже без упаковки — этот лимит продиктован адресным пространством Спектрума (16 кб занято ПЗУ + 6 кб экранная память; страницами 128 кб-моделей я не пользуюсь). Для Windows (методом Феоктистова) — размер ненамного больше (а с UPX — значительно меньше), просто я сейчас использую для вывода графики библиотеку SDL, а разработка графического движка на WinAPI — только в проекте. uFMOD — отличная библиотека, спасибо за наводку! :)
В методе Макса Феоктистова DJGPP занимает ключевую роль. Я использую его для получения сверхмалого размера EXE, но сам Макс писал мне что разработал свой линкер исключительно для производства виндовых приложений в то время когда GCC ещё не умел их генерировать (а MINGW ещё не было), и сегодня Макс советует использовать вместо DJGPP и его линкера CygWin или MINGW. Я ещё использую tcc (Tiny C), который умеет генерировать 32- и 64-битный код для Windows и Linux: для небольших приложений код получается достаточно компактным, но конечно не настолько, как по методу Макса. Для бОльших приложений MINGW выигрывает и по размеру кода, и по быстродействию.
DJGPP является программой для DOS, поэтому и не работает под x64. Если хотите, можно попробовать написать батник, который будет вызывать его с помощью DOSBox. У меня в XDev/DosDev подобным образом вызывается Turbo C:
Или же используйте виртуальную 32-битную Windows внутри 64-битной.
Вам могут понадобиться заголовочные файлы DJGPP для WinAPI. Можно взять из MINGW (правда, их придётся модифицировать, всё-таки DJGPP 2.95 это старая версия GCC). Или воспользуйтесь этим:
У меня тоже стоит цель получения сверхмалого ЕХЕ. Сейчас собираю с помощью mingw, после UPX размер 30к. Только TCC мне не помогает. Увидел от него профит только на маленьких приложениях, которые используют stdlib. У меня же чистый WinAPI (-nostdlib, -nostartfiles), так что на ТСС получается и жирнее и медленнее.
Значит, скорее всего какого-то значительного уменьшения ЕХЕ-файла при использовании DJGPP мне можно не ждать?
Приложенный в архиве файл MoveWindow.exe занимает, как видите, 3 кб. Что он умеет делать — смотрите в исходнике MoveWindow.Mod и сопоставляйте со своими нуждами. Как по мне — добиться меньшего размера EXE, чем с помощью метода Макса Феоктистова, просто невозможно. Если знаете как — напишите, интересно.
Я бы планировал обязательное уменьшение вашего EXE-шника при переходе от MINGW к DJGPP килобайта на 4 (минимум) до 10-16 (максимум). В пожатом UPX виде разница конечно будет не столь значительная.
Также на простую пересборку вашего кода DJGPP я бы не расчитывал. Скорее всего придётся допиливать и биндинги к API, и код.
Не, наверное есть ещё способ добиться сверхмалого размера EXE с помощью Sphinx C-- (Michael Sheker), но это будет не Си, а Си-минус-минус, к которому переходить от готового кода на Си смысла мало, лучше писать сразу на минусах.
Принцип генерации и упаковки шрифта в растр практически у всех движков един, отсюда видимо и схожесть интерфейса. Тут сложно придумать что-то новое.
И мой фреймворк, и ZenGL написаны на Free Pascal + Lazarus. Оба рендерят через OpenGL. На этом сходства заканчиваются. Так что в какой-то степени, Да, основаны на одном и том же
Разработка игры в 115 кб — хаки, баги и досада