Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

C++ - Grafika 2D na sprzęcie "embedded", Allegro i SFML za wolne - co

wjpl 21 Lut 2015 21:56 579 4
  • #1 21 Lut 2015 21:56
    wjpl
    Poziom 9  

    Cześć, udało mi się już nieco opanować C po zabawie z mikrokontrolerami, teraz chciałbym napisać program w C++, który wyświetlałby kilkanaście różnych obracających się tarcz oraz wskazówek wyświetlających różne wartości.

    Udało mi się to już zrobić korzystając z Visual C++ 2008 oraz biblioteki SFML, wczytywałem obrazki w formacie PNG i wszystko fajnie działa, ale tylko na w miarę nowoczesnym sprzęcie. Próba mojego programu pod Pentium 3 dała odświeżanie tylko kilka razy na sekundę. Próbowałem również biblioteki Allegro, też za mało wydajna.

    A ja chciałbym wykorzystać np. terminale HP Thinclient, które można kupić za mniej niż 100 zł, mające procesor 800 MHz i 256 MB RAM i Windows XP Embedded i stworzyć zabudowany system z jakimś monitorem, wyświetlający wartości przychodzące z sieci. Ewentualnie mógłbym wykorzystać linuksa, w ostateczności razem z WINE (przynajmniej programy z SFML działają tak samo wydajnie jak pod czystym windowsem).

    Czy ktoś zna jakieś gotowe biblioteki, które lepiej sobie poradzą z tym zadaniem? Na pewno dałoby radę całość napisać w Assemblerze albo jeszcze inaczej i by działało szybko, ale nie mam takich umiejętności i raczej nie będę ich nabywał, gdyż potrzebuję tylko podstawowej wiedzy która mi umożliwia wizualizację pewnych koncepcji. Może istnieje jakaś prosta biblioteka która pozwoliłaby np. wczytywać wektorowe obrazy SVG i nimi manipulować, być może byłoby to szybsze niż bitmapy. Za wszelkie porady byłbym wdzięczny.

    0 4
  • #2 21 Lut 2015 22:11
    -psiak-
    Poziom 32  

    Wyeliminuj niepotrzebne oraz wielokrotnie powtarzające się działania a będzie działać znacznie szybciej.

    0
  • #3 21 Lut 2015 22:19
    wjpl
    Poziom 9  

    Cóż, póki co program chyba najprostszy, jaki może być.

    Zamieszczam wycinek tego, co dzieje się w pętli, tutaj dla uproszczenia dałem po 1 tarczy i wskazówce, w programie testowym zrobiłem ich 8 wyświetlanych jednocześnie.

    Na i7 obracają się tak szybko, że prawie "znikają", a na laptopie P3 500 MHz tylko kilka razy na sekundę się odświeża obraz i jest 100 procent zużycia CPU. Gdy włączę limit FPS na laptopie dalej się zacina.


    Kod: cpp
    Zaloguj się, aby zobaczyć kod




    //EDIT: już trochę uprościłem kod, jest lepiej po wyrzuceniu z pętli niepotrzebnych rzeczy, ale wyświetlanie tylko 2 wskaźników ciągle nie osiąga pełnej płynności na starym sprzęcie, a potrzebuję ich sporo więcej.


    Kod: cpp
    Zaloguj się, aby zobaczyć kod

    0
  • #4 21 Lut 2015 23:30
    -psiak-
    Poziom 32  

    No to zwiększ prędkość kosztem pamięci.
    Przygotuj 360 obrazków już odpowiednio obróconych tak aby w głównej pętli nie było polecenia setRotation()
    tylko:

    Kod: cpp
    Zaloguj się, aby zobaczyć kod

    0