Pereiti prie turinio

Programuojam raspberry pi


Rekomenduojami pranešimai

Sveiki, bandau parašyti programą raspberriui, bet nelabai gaunasi rasti tikslingos informacijos.

Noriu padaryti, kad raspberry skaitytų .svg failą ir atvaizduotų jį fullscreen režimu.

Kaip suprantu tai nėra labai sudėtinga, bet kaip sakiau nerandu informacijos (c++ kalba).

Pirmą kartą susidūrus su linux'ais, dar sunku suprasti kaip ten kas.

Gal esate kas susidūrę su panašių programų rašymų ir galite padėti? Ačiū!

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Gali bandyti naudotis SDL bibliotekomis. SDL turi labai daug naudingų funkcijų, labai patogiai galima žaidimukus programuoti, nes turi gerą sąryšį su OpenGL. Šiuo atveju tau užteks SDL rendererio manau, jei gerai pamenu galima tiesiogiai įkrauti .svg failus.

 

Yra tik vienas labai rimtas niuansas su grafika ant RPi: X desktope nėra hardware acceleration, nes X neveikia per EGL, o RPi GPU tik per EGL ir gali, todėl reikia atitinkamai programuoti per specialias bibliotekas, kad ekraną sukurti. Todėl paprastai per SDL padarius gali neveikti tiesiog, o aš pats niekad nebandžiau RPi desktope SDL rendereri naudot, tai nieko pasakyt tuo atveju negaliu. Tuomet gali tekti OpenGL naudoti, bet tada tai sudėtinga labai bus rašyti.

 

Kadangi nesusidūręs su linuxais pasigooglink mano naudojamus pavadinumus bibliotekų ir programų, visko nepaaiškinsiu. Įkeliu darbo su RPi GPU lentelę, paprasčiau bus suprasti kaip ten visi tie API veikia. http://www.recantha.co.uk/blog/wp-content/uploads/2012/10/Architecture-and-Source-266x300.png

 

Buvo klausimas kaip perkėlinėti failus į RPi. Galima per usb, galima per interneta (mano naudojamas variantas darbui). Darbui per internetą (tuo pačiu ir failų perkėlimui) galima naudoti remote desktop ir ssh. Ant RPi reikia įsirašyti xrdp ir is kito kompo galesi su juo dirbti. Kadangi ir kitam mano kompe yra linuxai (Debian), tai as naudoju programa Remmina, galiu naudoti ten atskirus kanalus file transfer, ssh, ir remote desktop. Dėl windows nieko patart negaliu, neteko naudot remote desktop ten.

 

EDIT:

 

Gali pasinagrinėti mano bandymą OpenGl pasirašyt varikliuką, gal kadanors daugiau parašysiu jo, dabar tiesiog nėra kada, egzai ant nosies. Mano nedidlelė svajonė padaryti tai neblogu open source projektu :).

 

Gali atsisiųsti per svn: https://xp-dev.com/svn/Engine_RPi/trunk

 

Jei neleidžia siūstis tai parašyk man AŽ arba atsakyk temoje, gal nustatymuose kažką blogai būsiu padaręs.

Redagavo DevBlox
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Dėkui už išsamų atsakymą. Gal kur matėte kokių tutorial'ų panašia temą, kad būtų už ko užsikabinti?

 

Pamislijau kiek ir manau jog geriausia būtų naudoti OpenMAX kartu su OpenGL ES (arba dar geriau su OpenVG, bet su juo neteko susidurti tai ir informacijos jokios nedrįstu pateikti), pavaizduotą lentelėje. Paguglinęs radau keletą šaltinių kuriais naudotis galėtum.

 

Apie OpenMAX: http://ccppcoding.blogspot.com/2012/09/openmax.html

Taip pat tame puslapyje daug naudingos info apie Linux galima rasti, visai naudingas puslapis.

 

Dekodavimo tutorial: http://www.raspberrypi.org/forums/viewtopic.php?f=33&t=57721

Tau tektų atlikti dekodavimą, paversti .svg į tekstūrą ir per OpenGl ES ant ekrano nupiešti, tai manau į temą čia, tik pats kodo to neskaičiau žinoma, tau teks pasinagrinėti ;)

 

Apie OpenGL: http://www.opengl-tutorial.org/

Tik čia ne OpenGL ES, kuris RPi ir mobiliose platformose yra naudojamas, taigi gana sunku perprasti skirtumus yra, čia yra panašiausios funkcijos į tai ką OpenGL ES naudotum, daugiausia tutorialų kuriuos buvau radęs buvo ne c++ arba nepakankamai detalūs. Nepamiršk ir niuansų su hardware acceleration.

 

Kaip sukurti fullscreen langą gali rasti mano varikliuko void Renderer_EGL_GLESv2::init_egl_context() metode, kuris yra src/Renderer_EGL_GLESv2.cpp

 

Ištrauka tau svarbaus kodo:

	static EGL_DISPMANX_WINDOW_T native_window;

DISPMANX_ELEMENT_HANDLE_T dispman_element;
DISPMANX_DISPLAY_HANDLE_T dispman_display;
DISPMANX_UPDATE_HANDLE_T dispman_update;
VC_RECT_T dst_rect, src_rect;

dst_rect.x = 0;
dst_rect.y = 0;
dst_rect.width = screen_w;
dst_rect.height = screen_h;

src_rect.x = 0;
src_rect.y = 0;
src_rect.width = screen_w << 16;
src_rect.height = screen_h << 16;

dispman_display = vc_dispmanx_display_open(0);
dispman_update = vc_dispmanx_update_start(0);

dispman_element = vc_dispmanx_element_add(dispman_update, dispman_display, 0, &dst_rect, 0, &src_rect, DISPMANX_PROTECTION_NONE, 0 , 0, DISPMANX_NO_ROTATE);

native_window.element = dispman_element;
native_window.width = screen_w;
native_window.height = screen_h;
vc_dispmanx_update_submit_sync(dispman_update);

egl_surface = eglCreateWindowSurface(egl_display, config, &native_window, NULL);
if (egl_surface == EGL_NO_SURFACE)
	except->error("eglCreateWindowSurface");

if (eglMakeCurrent(egl_display, egl_surface, egl_surface, context) == EGL_FALSE)
	except->error("eglMakeCurrent");

if (eglSwapInterval(egl_display, true));

 

 

 

Na o daugiau gali arba dar tutorialą kokį rasti arba/ir dokumentacija naudotis :).

Redagavo DevBlox
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

×
×
  • Pasirinkite naujai kuriamo turinio tipą...