среда, 30 августа 2017 г.

SDL2 on Raspberry Pi 1

Short memo - how to build SDL2 on Raspberry Pi OS Raspbian GNU/Linux 8.0 (jessie) since there are some troubles to get it work properly on this system. Note that I will use the way where we don't need the X11 for the sake of performance. And I'll not install the SDL libs and includes to the system directories so main environment will not be affected. This is just my own decision, you can make it your own way there is nothing special in it.

I'll skip the installation of build-essentials and other stuff. Just SDL2.

SDL2 source download link: https://www.libsdl.org/download-2.0.php

Unpack the sources and enter the root project directory. For example, I've put the source to the directory
/home/pi/src/SDL2-2.0.5

Configuring the build script


In the root project directory run the following command to create makefile:
./configure --prefix=$PWD/rpi-sdl2-installed --disable-pulseaudio --disable-esd --disable-video-mir --disable-video-wayland --disable-video-x11 --disable-video-opengl CPPFLAGS=-I/opt/vc/include --host=armv6l-raspberry-linux-gnueabihf

Where

--prefix=$PWD/rpi-sdl2-installed

Path where SDL2 headers/libraries and other stuff will be installed after make install command. Don't use it if you want to install to the default path (usually it's the /usr/local dir)

--disable-pulseaudio --disable-esd --disable-video-mir --disable-video-wayland --disable-video-x11 --disable-video-opengl

We need to disable unneeded drivers and components to run GL application directly in the display avoiding X11 usage

CPPFLAGS=-I/opt/vc/include

Add path to the RPI graphics driver headers

--host=armv6l-raspberry-linux-gnueabihf

Override host name reported by the system. If we don't - the RPI video driver will not be used and no SDL will report that there are no graphic devices found.

Build and install


Just run
make && make install
and wait while the libraries will be built and installed. Resulting

Test applications


SDL2 package contains a bunch of test applications you may build and run just to get sure that all running properly. They are contained in the directory called test. You'll need to configure build script for the test apps. You will need to set the path to the installed SDL package first in order to configure script will understand the current SDL configuration.
export SDL_CONFIG=/home/pi/src/SDL2-2.0.5/rpi-sdl2-installed/bin/sdl2-config
./configure --host=armv6l-raspberry-linux-gnueabihf CPPFLAGS=-I/opt/vc/include
The parameters means the same as I've described above.

For unknown reason the resulting script will not know the paths to the RPI display driver headers and libs so you'll need to add it manually to the makefile. So open the makefile and add the paths.

Add
-I/opt/vc/include
to the var CFLAGS and add
-L/opt/vc/lib
to the var LIBS

My vars looks like this

CFLAGS  = -g -O2 -I/home/pi/src/SDL2-2.0.5/rpi-sdl2-installed/include/SDL2 -I/opt/vc/include -I/opt/vc/include/interface/vcos/pthreads -I/opt/vc/include/interface/vmcs_host/linux -D_REENTRANT -DHAVE_OPENGLES -DHAVE_OPENGLES2 -DHAVE_OPENGL -g


LIBS =  -lSDL2_test -L/home/pi/src/SDL2-2.0.5/rpi-sdl2-installed/lib -Wl,-rpath,/home/pi/src/SDL2-2.0.5/rpi-sdl2-installed/lib -Wl,--enable-new-dtags -lSDL2 -L/opt/vc/lib

Then just run make command and wait for the build process. Not all tests will be built properly. This is OK since we have no OpenGL (not ES) and X11 support and some tests require it.

Here is the result I've got on my TV connected to the RPi via HDMI. I've run the ./testscale application. Most other tests like testgamecontroller (with my Logitech Rumblepad attached) and testmultiaudio are OK too.




Hope this will help somebody some day.

Happy coding!

среда, 9 ноября 2011 г.

Я просто оставлю это здесь:

http://molecularmusings.wordpress.com/2011/11/03/adventures-in-data-oriented-design-part-1-mesh-data-3/
http://www.asawicki.info/news_1422_data-oriented_design_-_links_and_thoughts.html
http://gamesfromwithin.com/data-oriented-design

пятница, 5 марта 2010 г.

Препарирование StarCraft II.

Вот уже третью неделю идёт закрытый бета-тест StarCraft 2. Ясный хрен, что ключ мне не дали, тем не менее, те, кто следит за темой - в курсе, что есть методы поиграть в оффлайне, безо всяких ключей. Но пост собственно не об этом.


Пост о том, как я препарировал SC2 тулзой, которая идёт в поставке DirectX SDK - PIX. Этот вот PIX умело рассказывает нам о количестве и качестве разных вызовов DirectX. Вот поэтому я взял PIX, взял StarCraft 2 и какой-то реплей с игрой четверых счастливых обладателей ключа от беты. Для первой части - немного тупой статистики.
Сцена с окружением, без юнитов и зданий, просто природа, стены, ландшафт, деревья.
Число вызовов DrawIndexedPrimitive - ~900-1000.
Сцена с отстроенной теранской базой и некоторой кучкой юнитов ~1800-2000 вызовов, здоровый бой протоссы vs тераны ~2500 вызовов. Все абсолютно вызовы - TriangleList'ы, никаких Triangle Strips нет и в помине. Абсолютно на каждый вызов DIP идёт установка VertexDeclaration. Причём почти всегда одного и того же. Число треугольников в каждом вызове как правило мало. Много вызовов с небольшим числом треугольников (100-200), меньше средних (500-700), больших - мало (1500-2000 треугольников).  На фрейм происходит очень много установок Render Targets - ~200 вызовов. Так же на фрейм приходится ~400 SetPixelShader и ~300 SetVertexShader.


Отдельного внимания заслуживает непонятки с отсечением невидимых объектов. Вышедшие из-за экрана и ушедшие через пару секунд в другую сторону ~25 протосовских юнитов не изменили число вызовов DIP, то есть, когда они были где-то за экраном, они всё равно отправлялись на отрисовку.


Первое впечатление - на бета-тестирование выкинули неоптимизированную игру. Будем следить за обновлениями.


Пока на этом всё, далее буду более детально разбирать конкретные вызовы и собирать более точную статистику, а так же выслеживать использование ресурсов.

UPD: На дальнейшее препарирование меня не хватило, извиняйте, если кто хотел. (=