(gelöst)[OpenGL] Doublebuffer flackert

Für Fragen zu Grafik APIs wie DirectX und OpenGL sowie Shaderprogrammierung.
Antworten
hundvdf
Beiträge: 28
Registriert: 03.10.2002, 13:48
Kontaktdaten:

(gelöst)[OpenGL] Doublebuffer flackert

Beitrag von hundvdf »

Hallo,
ich habe jetzt seit langem wieder angefangen, etwas grafisches zu programmieren. Das hat u.a. auch den Grund, dass ich für mein Studium nen einfachen Raytracer programmieren muss. Dazu nehme ich SDL und für die Anzeige OpenGL (okay, würde bei nem einfachen Raytracer ja auch direkt mit SDL funktionieren, hab mich aber trotzdem für OGL entschieden).
Mit SDL und OGL hab ich bisher relativ wenig gemacht, daher hab ich mir bei http://nehe.gamedev.net/ die Tutorials mal angeschaut. Ich hab den Linux/SDL-Quellcode vom 2. Kapitel genommen, in dem nichts weiter gemacht wird, als per SDL da OGL-Surface zu erstellen und dann ein Dreieck und ein Quadrat zu zeichnen. Soweit so gut, läuft ganz gut. Allerdings hab ich folgendes Problem: wenn ich in der Hauptschleife ein sleep(1) einbaue, dann blitzen die beiden Objekte nur kurz auf und verschwinden dann sofort wieder, wie wenn der Color-Buffer sofort wieder geleert werden würde. Das selbe gilt auch, wenn ich das sleep nicht einbaue, nur dann sind die Objekte im Verhältnis länger da. Da bei dem ganzen der Doublebuffer eingeschaltet ist, sollte das meiner Meinung nach ja auch während dem sleep angezeigt bleiben, oder habe ich da jetzt einen Denkfehler?!

Also nochmal eine kurze Zusammenfassung des Codes:

Code: Alles auswählen

main() {
SDL_Init(SDL_INIT_VIDEO);
videoflags = SDL_OPENGL | SDL_GL_DOUBLEBUFFER |SDL_HWPALETTE | SDL_HWSURFACE | SDL_HWACCEL ;
SDL_SetVideoMode();
initGL();
resizeWindow();
while(!done) {
    while(SDL_PollEvent()) {}

    drawGLScene();

    sleep(1); 
}

initGL() {
glShadeModel(GL_SMOOTH);
glClearColor(0,0,0,0);
glHint(GL_PERSPECTIVE_CORRECTION_HINT,GL_NICEST);
}

resizeWindow(width,height) {
glViewport();
glMatrixMode(GL_PROJECTION);
glLoadIdentitiy();
gluPerspective();
glMatrixMode(GL_MODELVIEW);
glLoadIdentitiy();
}

drawGLScene() {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glBegin(GL_TRIANGLES);
glVertex3f();
glVertex3f();
glVertex3f();
glEnd();

SDL_GL_SwapBuffers();
}
Also wie gesagt, ich hatte bisher noch nicht viel mit SDL und OGL zu tun und kenne mich daher nicht wirklich damit aus, aber ich dachte eigentlich, dass der NEHE-Code eigentlich funktionieren sollte...
Ich hoffe mal, dass hier jemand (m)ein (Denk-)Fehler findet und mir helfen kann.

Danke und Grüße
hundvdf
Zuletzt geändert von hundvdf am 15.02.2011, 10:57, insgesamt 2-mal geändert.
hundvdf
Beiträge: 28
Registriert: 03.10.2002, 13:48
Kontaktdaten:

Re: OpenGL: Doublebuffer flackert

Beitrag von hundvdf »

Ich hab jetzt nochmal etwas herumprobiert, und da ist mir aufgefallen, dass sobald ich die Auflösung Quadratisch setze, alles funktioniert... Aufgefallen ist mir das als ich die SDLGears ausprobiet habe, bei denen Standardmäßig 300x300 eingestellt ist. Sobald ich aber die Auflösung nicht-quadratisch (hab sie normalerweise auf 640x480 zum testen) einstelle, flackert das ganze wieder... Sehr seltsam...
hundvdf
Beiträge: 28
Registriert: 03.10.2002, 13:48
Kontaktdaten:

Re: [OpenGL] Doublebuffer flackert

Beitrag von hundvdf »

:x :oops: :| Problem gelöst: es lag an den Desktop-Effekten unter Ubuntu... Nachdem ich die deaktiviert habe, funktionierts jetzt... Manchmal sind PCs so dämlich... :D
Benutzeravatar
sirnoname
Beiträge: 67
Registriert: 20.06.2010, 11:04

Re: (gelöst)[OpenGL] Doublebuffer flackert

Beitrag von sirnoname »

Ein Surface wird von einem anderen beeinflusst?
Das hört sich nach gröberen Problemen an und nicht nach einer Lösung!
hundvdf
Beiträge: 28
Registriert: 03.10.2002, 13:48
Kontaktdaten:

Re: (gelöst)[OpenGL] Doublebuffer flackert

Beitrag von hundvdf »

Ja, das Problem kenne ich aber auch von anderen Programmen wie z.B. Skype. Da funktioniert der Video-Chat auch nicht, wenn die Effekte aktiv sind. Was ich jetzt auch inzwischen gemerkt habe: das Problem besteht auch nur, wenn ich einen externen Monitor angeschlossen und als erweiterten Desktop eingestellt hab. Wenn ich nur mein Laptop-Monitor aktiv habe, dann funktioniert das Ganze auch mit gleichzeitigen Desktop-Effekten.

Ich vermute aber stark, dass diese Probleme am Ubuntu-Treiber von ATI liegen.
Grüße
hundvdf
glassbear
Establishment
Beiträge: 324
Registriert: 08.04.2003, 18:09
Alter Benutzername: Enrico_
Echter Name: Enrico
Wohnort: San Diego
Kontaktdaten:

Re: (gelöst)[OpenGL] Doublebuffer flackert

Beitrag von glassbear »

hundvdf hat geschrieben:Ich vermute aber stark, dass diese Probleme am Ubuntu-Treiber von ATI liegen.
Nicht ganz. Es liegt an den ... tollen ... ATI-Treibern, nicht an Ubuntu. Zumindest falls du die Binaer-Treiber von ATI verwendest, was Ubuntu macht.


/me ist so froh, dass er wieder ne Nvidia (Quadro) im Laptop hat...
Ein Hoch auf uns Männer... Auf die Frau, die uns HAT ( oder hat, und nicht weiß, dass sie uns hat ) ...auf die Idiotinnen ... besser gesagt VOLLPFOSTINNEN ... die uns hatten und uns verloren haben ... und auf die GLÜCKLICHEN, die das Vergnügen & Glück haben werden uns kennenzulernen!
hundvdf
Beiträge: 28
Registriert: 03.10.2002, 13:48
Kontaktdaten:

Re: (gelöst)[OpenGL] Doublebuffer flackert

Beitrag von hundvdf »

Enrico_ hat geschrieben:Es liegt an den ... tollen ... ATI-Treibern, nicht an Ubuntu.
Ja, genau so meinte ich das auch. Also dass es an den ATI-Treibern liegt, welche in Ubuntu eingebunden sind. Ich hatte mit dem ATI-Treiber schon so manche Probleme, wobei ich auch verschiedene andere ausprobiert habe, und mit den anderen noch mehr Probleme habe.
Also der "original" Ubuntu-ATI-Treiber ist immer noch am besten, damit laufen auch diverse Windows-Spiele (z.B. Die Siedler 5, Doom 3, UT 2k4, Anno 1404), aber dazu muss ich eben auch immer die Desktopeffekte (bzw. Compiz allgemein) deaktivieren.
Antworten