graficka knihovna SDL

Založil fridlik, 05. 05. 2011, 18:19:27

Předchozí téma - Další téma

fridlik

zdravim
potrebuju napsat semestralni praci pomoci teto knihovny, mam ale problem se spustenim. Kdyz program po kompilaci spustim, tak to vypise chybu Unable to open a console terminal. To jsem zjistil, ze se da odstranit kdyz program spustim jako root.
Pak se ale objevi dalsi chyba, ktera je uz spojena s vykreslovanim. Kdyz inicializuju SDL_Surface tak me problikne jen obrazovka jako kdyby to hned spadlo a vyhodi to chybu Couldn't set console screen info. Zkousel jsem vsechno mozny jak to spustit az jsem zjistil, ze se to spusti jen kdyz zadam rozliseni stejny jako mam displej. Jenze ja bohuzel nemuzu mit takhle velkou obrazovku. Nenapada nekoho jak to resit? Dik moc za pomoc.


#include <stdio.h>
#include <SDL/SDL.h>

int main(int argc, char *argv[])
{
printf("Hello, SDL!\n");
printf("Press ESC key to quit.\n");

// Inicializuje se pouze SDL video
if(SDL_Init(SDL_INIT_VIDEO) == -1) //zde to pada kdyz to nespustim pod rootem
{
fprintf(stderr, "Unable to initialize SDL: %s\n",
SDL_GetError());
SDL_Quit();
return 1;
}

// Vytvori okno 1366x768 s implicitni barevnou hloubkou, kdyz skusim treba 640x480 tak to nejede
SDL_Surface *screen;
screen = SDL_SetVideoMode(1366, 768, 32,SDL_HWSURFACE| SDL_FULLSCREEN );
if(screen == NULL)
{
fprintf(stderr, "Unable to set 640x480 video: %s\n",
SDL_GetError());
SDL_Quit();
return 2;
}
// Titulek okna
SDL_WM_SetCaption("Hello, SDL!", NULL);

int done = 0;
SDL_Event event;

// Hlavni smycka programu
while(done == 0)
{
// Smycka na zpracovani udalosti
while(SDL_PollEvent(&event))
{
// Vetvi podle typu udalosti
switch(event.type)
{
// Udalost klavesnice
case SDL_KEYDOWN:
// Vetvi podle klavesy
switch(event.key.keysym.sym)
{
// Klavesa ESC */
case SDLK_ESCAPE:
done = 1;
break;

default:
break;
}
break;
// Zprava s pozadavkem na ukonceni
case SDL_QUIT:
done = 1;
break;
default:
break;
}
}
// TODO: Tady by se vykreslovalo
}
// Deinicializace SDL a konec
SDL_Quit();
return 0;
}


koljin

V SDL nedělám, takže těžko budu zjišťovat, jestli nemáš v tom programu něco blbě, nebo neni něco blbě s tvojí SDL.

Ale nemáš nvidii a proprietární ovladač? Tam bych možná měl nápad, co zkusit

fridlik

#2
mam nvidii :D
mam notebook ve kterem jsou 2 graficke karty, nvidia 310M a intelacka na cipu procesoru. Ty graficky karty by se mely prepinat automaticky podle zateze. To bohuzel nefunguje. Nevim ale, na ktere karte to jede.
Nevim co je proprietarni ovladac, ale zkousel jsem nainstalovat ovladac primo ze stranek NVidie, to jsem si ale pekne rozhasil a graficky prostredi nenajelo, musel jsem to vratit do puvodniho stavu.
Jinak kod je spravne, je to z tutorialu z webu a je overeny ze to funguje.
Pokud te tedy neco napada, budu rad za cokoliv.

koljin

#3
Jo to automatický přepínání karet na linuxu neběží a podle nvidie asi ani nepoběží :( Dokonce některý stroje s touhle technologií maj problém, aby vůbec šlo rozchodit integrovanou grafiku a ta nvidiácká se v linuxu vůbec nedá použít... celkem smutný no :/

Proprietární ovladač je právě ten od nvidie, druhá varianta je open source ovladač nouveau.

Nevim, jakej je správnej způsob, jak zjistit, která karta se momentálně používá a s kterym ovladačem, ale nějaký informace by moh dát výstup tohohle příkazu (program glxinfo je součástí balíčku mesa-utils)

glxinfo |egrep -i "vendor|version|direct"

Já mám nvidii a proprietární ovladač, a tam jsem si právě už od začátku používání všimnul problému s fullscreen rozlišením u her a jinejch opengl aplikací - vždycky šlo nastavit jenom plný rozlišení desktopu, jiný módy se nenabízely nebo nenaběhly a nebo šly jenom v okně (plus eště nějaký další potíže spojený s tim, že mam víc monitrů).

Vyřešil sem to poměrně nedávno tak, že sem ty módy, na který můžu chtít případně přepnout, přímo vypsal v xorg.conf (viz Option "metamodes" v manuálu). A od tý doby na ně jde přepínat ve fullscreenu :) Ale nevim, jak to je např. s ovladačem nouveau.