19 ноября 2012

Новый NDK 8c. Проблемы.

Новый, невероятно классный NDK для android от Google с поддержкой clang3.1 оказался не без изъяна. Что очень меня опечалило. Но к счастью это Open Source и большинство проблем можно поправить в уже установленном NDK.

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

Все исходники постоянно компилируются: решение было найдено тут.

Патч изменяет единственную строчку 289 в build/core/definitions.mk с

$1: $$(__ndk_file_dir)

на 

$1: | $$(__ndk_file_dir)

Команда ndk-build выдает странную ошибку:

Invalid attribute name: android:name
/home/plambir/.android/android-ndk/build/gmsl/__gmsl:512: *** non-numeric second
 argument to `wordlist' function: ''.  Stop.
Решение простое, нужно переместить строчку <uses-sdk android:minSdkVersion="8"/> в AndroidManifest.xml в самое начало манифеста (сделать первым вложенным тегом, тега manifest).

При использование clang компилятор ругается на `-funswitch-loops`: решение было найдено тут. И то, что оно из себя представляет лучше посмотреть по этому диффу

Вроде бы все. Несмотря на все сложности с переездом на новый NDK, это того стоит, clang классный. Да и другие изменения тоже не хуже.

10 августа 2012

Pipeline, shell и функции

Иногда очень хочется упростить себе жизнь и написать какой-нибудь shell-скрипт что бы он что-то делал за тебя. Часто без функций в скрипте не обойтись, как и без использования pipeline.

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

10 июля 2012

Следи за мной, компилятор!

Привет. Вот такой небольшой хинт который работает на последних версиях GCC и Clang точно.

Хинт этот касается статических ассертов, и проверки типов, которая обычно компилятором не проводиться. Все это актуально для Cи++.

Герои дня: __is_pod.

15 мая 2012

Оптимизация как необходимость

Писать программы сложно, писать хорошие программы еще сложнее, писать хорошие оптимизированные программы почти невозможно. И дело тут не в том что это физически затруднительно, просто не всегда это нужно. Ну согласитесь глупо пытаться сделать быстрее цикл который вызывается один раз за всю работу программы. Глупо? А если он выполняется час? А все остальное выполняется за минуту?

01 мая 2012

Android: Hello world!

Привет. Вот и пришло время первого очень простого приложения для android. Это на самом деле не так легко как может показаться на первый взгляд. Ведь мало сделать Hello world!, нужно сделать его правильно.

Телефон это не компьютер. Смартфоны нынче могут похвастаться большим количеством оперативной памяти, мощными CPU и GPU, но это все равно не компьютер. Не желая вдаваться в долгие рассуждения об отличиях, сразу вывод.

  1. Игры должны работать быстро - только нативный код.
  2. Нативный код - только оптимизированный.
  3. Оптимизированный код - потребляет мало памяти и работает быстро.
  4. Работает быстро - DOD (Data Oriented Design) и простота во всем.

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

19 февраля 2012

Android: установка SDK и NDK

Привет. Так случилось что у меня в распоряжении оказалось небольшое android устройство. А так как android это почти GNU/Linux, то почему бы и не попробовать написать для него небольшую игру. Уж очень хочется изучить что-то новое.

Начну я с простого. Небольшая памятка для себя как установить и настроить SDK и NDK. Еще конечно нужно что-нибудь собрать и запустить на устройстве или эмуляторе. Думаю какой-нибудь пример из NDK. Для начала думаю хватит.

05 февраля 2012

OpenGL и SVG

Привет. Мне очень нравятся старые игры, и не потому что я на них вырос, а потому что они интересные. Не будем вдаваться в подробности почему старые игры лучше чем новые с навороченной графикой. Поговорим о том, что меня расстраивало в них. Это то что в старых играх очень низкое разрешение текстур. Круто бы было, если бы на более мощных видео картах можно было бы использовать текстуры с большим разрешением.

К тому же пользовательские интерфейсы, как правило при увеличении разрешения либо уменьшались, либо становились более размытыми. Проблема тут в том что растровое изображение нельзя маштабировать без потерь.

Так о чем я? Я о том что использовать SVG для текстур, особенно когда предполагается не фото реалистичный рендеринг, идея очень классная.

18 января 2012

Cppcheck как еще один шаг к светлому будущему

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

Статических анализаторов кода множество. Если верить википедии то первый из множество вышел на большую сцену в 1979 и звался Lint. И как скорее всего понятно из заголовка данного поста, речь пойдет об Cppcheck. Молодом и до сих пор активно разрабатывающемся статическом анализаторе кода C/C++.

16 января 2012

Clang и разработка на Си

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

13 января 2012

QuesoGLC

Привет. Я хочу рассказать о такой библиотеке как QuesoGLC. Это свободная реализация OpenGL Character Renderer (GLC). Библиотека основана на Free Type и поддерживает unicode. Если совсем коротко, то это то что очень облегчает жизнь при выводе текста в OpenGL.

Вывод текста в OpenGL всегда было самым тормозящим для меня событием когда я начинал что-то делать с ним. Обычно все начиналось каждый раз с чистого листа. Почему? Потому что писать велосипеды очень полезно в образовательных целях. Хотя конечно велосипеды это зло. Вот потому я и рад, что есть QuesoGLC.