Grafika: GUI, OpenGL

Megjelenítés áthelyezése másik vasra (X11)

Ez egyelőre csak gondolatkísérlet, ezért nem nagyon írok konkrétumokat, de lehet, hogy nemsokára ténylegesen is találkozni fogok egy hasonló problémával.
Adva van egy unixos munkaállomás, erős opengl(kompatibils) képességekkel (pl. SGI Tezro, vagy IBM intellistation 285).
Adott még egy kereskedelmi szoftver x86-Linux alá, ami igényel(ne) komolyabb 3D (opengl) képességeket a vas részéről.
Adot egy x86 vas is, ami viszont nem jól (vagy egyáltalán nem) opengl-képes (pl. egy szerver).

A kérdésem az, hogy megoldható-e a megjelenítés "elválasztása" az x86-os vastól úgy, hogy a kérdéses szoftver az x86 szerveren megy (értelemszerűen), de a megjelenítést, ill. a teljes UI-t a unixos vas adja. Ha jól tudom az X segítségével kiépíthető ilyesmi, de fogalmam sincs, hogy ez így megoldható-e, ill., hogy az opengl megjelenítés miatt mennyire problémás az egész?

-- szerk:

közben találtam egy ilyet:

http://hup.hu/node/33985

Azt írják ment, csak lassan. Mi lehetett a szűk keresztmetszet? Az AIGLX képességei, vagy a hálózat?

GPGPU, matematikai számolások a videókártyával

Sziasztok!

Van valakinek a címben emlitett dolgokkal: GPGPU, Nvidia CUDA, Brook, stb. kapcsolatban tapasztalata?

Egy mátrix-mátrix szorzást szeretnék megcsinálni sűrű mátrixokra.
(BLAS: dgemm). Cuda nemnagyon jön szóba, mert egy Geforce 6800-asom
van.

Ha van bátor jelentkező, akkor majd kérdezek ... :)

UDv:axt

Imlib1 X szerver szinmelyseg lekerdezesi hiba, vagy csak en vagyok a hulye?

A proglemam a kovetkezo lenne:
Adott egy egyszeru, tutorial szintu kepnezegeto program, ami a imlib1-est hasznal.
A lenyeg funkcihivas tekinteteben ennyi lenne:

id=Imlib_init(disp);
im=Imlib_load_image(id,argv[1]);
w=im->rgb_width;h=im->rgb_height; d=id->x.depth;
XCreateWindow(disp,DefaultRootWindow(disp),0,0,w,h,0,d,InputOutput,CopyFromParent,CWBackingStore|CWOverrideRedirect|CWEventMask|CWBorderPixel|CWSaveUnder|CWColormap|CWBackPixel,&attr);
XSelectInput(disp,win,StructureNotifyMask);
Imlib_render(id,im,w,h);
p=Imlib_move_image(id,im);
XSetWindowBackgroundPixmap(disp,win,p);
XMapWindow(disp,win);
XSync(disp,False);

Mint lathato, nem egy agysebeszet, az imlib tutorialok 90%-a is ugyanezt csinalja. Namost a problemam ezzel, hogy a d-ben visszaadott ertek hibas, emiatt a program az ablak letrehozasakor merevre fagy, mert az X szerver eldobja a kapcsolatot.
Pl. Nalam alap X.org fut 24 bites szinmelysegben a d-ben visszaadott ertek 32. Hardcodeolom a d erteket 24-re, akkor a kod siman lefut a kep megjelenik, mindenki boldog. Ha az eredeti kodot xgl alatt futtatom, akkor 32 bitet ad vissza, es gond nelkul lefut.
A dolog erdekessege, hogy mas imlib1-et hasznalo programnal is rafutottam erre a hibara.
Valami otlet?

GTK vagy Qt4

Ott kezdődött a dolog, hogy saját tapasztalat szerzés miatt gondoltam megtanulom a GTK-t is. Linuxos programozás során általában a Qt-t használtam eddig, mivel a cégnél ezt használjuk. És nekem nincs is a Qt-vel semmi bajom.

Amit nem tudok és ebben kérném a véleményeteket: kb. 2 évnyi Gnome-ozás után áttértem KDE-re, majd egy év után vissza Gnome-ra. És ennyi tapasztalat után most úgy gondolom, hogy nekem a Gnome az ideális. Ami a lényeg, hogy nagyon sokat hallom azt, hogy ha valaki Gnome-ot használ, nem érdemes Qt-s (KDE-s) alkalmazásokkal keverni. Miért? Mert ugye én csak ez miatt preferálom saját részre a GTK-s fejlesztést. Aki Qt-vel fejleszt az mind KDE-t használ? Vagy nálatok hogyan megy ez?

Mellékesen: rá lehet venni valahogy a Gnome-ot, hogy a Qt-s alkalmazások is használják a Gnome kinézetét (mappaikonok, szinek stb.)? Ugyanis fordítva ez működik.

Mindentől függetlenül. Mert ha rajtam múlik, akkor Qt-s alkalmazásokat használok Gnome alatt. Van itt egy kis probléma, amit nem igazán értek. Anjutaval létrehoztam egy alap C++ GTK+-os projectet. Szépen lefordul, megjelenik a "Hello World" feliratú ablak. Az eclipsel létrehozott C++ projectemhez (ami egyébként alapból megint csak fordul) hozzáraktam az Anjuta .glade fájlját, majd a main tartalmát bemásoltam az eclipses main-be. Persze ez így nem fordul le, de ezen még meg sem lepődnék (hátha hiányzik neki a tömérdek Anjutás fájl közül valami). De nem, a hibaüzenetek szerint nem találja a fejfájlokat (libglademm/xml.h, gtkmm.h). Itt a forrás:


#include <libglademm/xml.h>
#include <gtkmm.h>
#include <iostream>


#ifdef ENABLE_NLS
#  include <libintl.h>
#endif


/* For testing propose use the local (not installed) glade file */
/* #define GLADE_FILE PACKAGE_DATA_DIR"/gtk-proba/glade/gtk-proba.glade" */
#define GLADE_FILE "gtk-proba.glade"
   
int
main (int argc, char *argv[])
{
	Gtk::Main kit(argc, argv);
	
	//Load the Glade file and instiate its widgets:
	Glib::RefPtr<Gnome::Glade::Xml> refXml;
	try
	{
		refXml = Gnome::Glade::Xml::create(GLADE_FILE);
	}
	catch(const Gnome::Glade::XmlError& ex)
    {
		std::cerr << ex.what() << std::endl;
		return 1;
	}
	Gtk::Window* main_win = 0;
	refXml->get_widget("main_window", main_win);
	if (main_win)
	{
		kit.run(*main_win);
	}
	return 0;

Ezek szerint az eclipse nem látja a gtk-s fejállományokat? Vajon miért? Vagy így akárhogy akarom sehogy se fog működni? Akkor hogyan tudok eclipse-ben GTK-s alkalmazást fejleszteni?

Abszolút kezdő grafika programozásában

Sziasztok. Bár több kisebb progit írogattam már C/C++ -ban, de most lenne az első, amihez grafikus felületet is mesterkednék. Ez nem egyszerű nekem, mert még nem találtam erről részletes magyar leírást.

Tehát, egy nagyon egyszerű(nek tűnő...) progi kéne, amit váznak használnék, mintegy kiindulásnak. A következőt kéne tudnia:

Elindítom, erre megjelenít rögvest egy ablakot, lehetőleg fullscreenben rögtön, ha ez nem lehet akkor valami fixen beírt x-y méretűt (pixelben értve). Az ablak azt tudja, hogy átméretezhető legyen, maximalizálható és bezárható. (Tálcára tevéssel nem kell foglalkozni). Az ablak fejlécére megadható legyen valami szöveg.

A progi ha véget ér, magától zárja be az ablakot.

A progiban kéne egy "kiir" rutin (na ez a legfontosabb...) ami annyit tesz hogy ha meghívják (program indulásakor természetesen meg kell hívni) akkor megtölti "tartalommal" az ablakot. Ez úgy menne hogy van egy

unsigned char *M;

tömb, (tudom, ez csak a mutatója...) és ebben egymás után bájt-tripletek vannak, amik sorra R,G,B színösszetevőket tartalmaznak. Ez az M tömb úgy értelmezendő, mint egy 1024×768-as pontmátrix, mindegyik ponthoz egy ilyen r-g-b triplet tartozik. No és a "kiir" rutin csak annyit tenne, hogy ezen M tömbből kirajzol annyi ilyen pontot a megfelelő színnel az ablakba, amennyi abba belefér. (Tehát az M tömb "balfelső negyedét" rajzolja ki mindig az ablakba, annyit, amennyi odafér, mintha egy TrueColor kép lenne). Ha az ablakot átméretezi a felhasználó, természetesen nő vagy csökken a megmutatott terület nagysága.

Kéne még egy "beolvas" függvény is, ami mindig meghívódna ha valami billentyűt lenyom a kedves felhasználó, s ennek kódját valami változóban e függvény felhasználhatná. Egérkezelés egyelőre hanyagolható. (Tulajdonképpen az ablak átméretezése is ha nagyon bonyolult, feltéve hogy fullscreen-ben tud indulni).

Ehhez már csak annyi kéne, hogy a "kiir" rutint be lehessen állítani úgy, hogy magától rendszeresen végrehajtódjon, másodpercenként Y alkalommal. Y valami extern változó lenne, célszerűen char típusú, mert biztos hogy Y<100 azaz beleférne.

Maga a tulajdonképpeni program e kiegészítő rutinokhoz csak annyiból kell álljon, hogy
int ezabelseje(void) {;}
hogy tudjam, hogy ide kell elhelyeznem a fő dolgokat amik a program lényegét alkotják majd.

Volna valaki olyan kedves hogy ezt megírja nekem, hadd tanuljak belőle, vagy ez túl nagy kérés?

Ó igen, és az is okvetlenül kéne, hogy milyen pontos paranccsal fordítsam le ennek a forrását, mert gondolom kell majd hozzá valami olyan lib hogy GTK, Qt vagy akármi, bár örvendenék ha minél kevesebb függősége volna...

Előre is köszi!

Maya 8.5

Neha kepfrissitesi gondjai vannak, illetve inditaskor a baloldali eszkoztar joval kesobb (2-4 mp) toltodik be mint a gui tobbi resze. Akinek van tapasztalata szeretnem kerdezni, hogy ez igy mennyire egyedi problema? Kosz

GTK Image "lefagy" PLS HELP!!!

Frissítem egy gtk_image tartalmát, teljesen random módon megfagy tőle az egész gtk-s abalak. Nem látszik semmi történés, de működik ugyanúgy gomb, megy a program, stb...

image1 = gtk_image_new_from_file ("null.jpg"); //igy hozom létre a gtk_image-t egy alap képet bele is teszek.

{{{
pixbuf = gdk_pixbuf_new_from_file(filename,NULL); //pixbuf-ba töltöm a következő képet

if ((width == 0) && (height == 0)){ //átméretezés ha kell
width = gdk_pixbuf_get_width (pixbuf);
height = gdk_pixbuf_get_height(pixbuf);
}
pixbuf_scaled = gdk_pixbuf_scale_simple(pixbuf, width, height, GDK_INTERP_TILES);

gtk_image_set_from_pixbuf (GTK_IMAGE(image1), pixbuf_scaled); //beletöltöm az image 1-be
}}}

A {{{ és }}} közötti rész ismétlődik 500ms-enként. Minden ismétléskor egy másik képet tölt be. (vagyis töltene be)
még van egy halom dolog a programban, de sikerült behatárolnom hogy valahol itt lehet a hiba.

Szóval, amikor "megfagy", akkor álatlában azt a képet látom ahol megállt a dolog, esetleg még azt sem, hanem csak a window-ot üresen.

Az ismételgetés, külön szálon megy, a főprogramban van a gtk_main ();
pthread_create (&thread_a, NULL, thread_a_func, NULL);

Nincs valami olyan függvény ami tutira ujrarajzolná a widgetet, esetleg az egész ablakot?
Már mindenféle ujrarajzolási megoldással próbálkoztam, de nem sikerült egyikkel sem.

gtk_widget_show(image1);
gtk_widget_update (image1);
gtk_widget_show_now(image1);
gdk_window_set_back_pixmap (MainWindow->window, NULL, false);
gdk_window_process_updates(MainWindow->window, TRUE);
gtk_widget_queue_draw_area (image1, 0, 0, 320, 240);

egyik sem jött be :(

GTK Image feliratozása

Segítséget kérnék, abban a dologban, hogy:
van 1 GtkImage ami PixBuf-ból kapja a képet, erre a képre szeretnék tenni feliratot.
Hogy oldható meg?
Sejtésem szerint a PixBuf tartalmát kellene megpiszkálni mielött kiteszem, sejtésem van csak épp elakadtam.

Válaszokat előre is köszi.

Lehetőleg méretezhető és akárhová helyezhető legyen a felirat.