Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Fr Jul 18, 2025 12:31

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 2 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: glGetError: GL_INVALID_ENUM
BeitragVerfasst: Di Aug 12, 2008 16:01 
Offline
DGL Member

Registriert: Sa Dez 30, 2006 20:52
Beiträge: 43
Programmiersprache: Delphi
Hallo,

irgendwas löst bei OnBoard-GraKa den Fehler GL_INVALID_ENUM aus. Ich hab momentan absolut KEINEN Anhaltspunkt, wo der Fehler ausgelöst wird. Ich habe den entsprechenden User mal mein Spiel im Debug-Mode ausführen lassen. Das Spiel lädt die Texturen, zeigt danach einmal diesen Fehler an und dann nicht mehr. Das Problem dabei ist: Er sieht keine Texturen, den Schatten den ich zeichne ist wohl nur ein schwarzes Viereck (also auch ohne Textur) und auch sonst sei die Darstellung verkehrt.

glGetError ruf ich erst "später" (1 Sekunde nach dem laden der Texturen) im OnIdle auf, nachdem schon das Menü gerendert wurde. Ich vermute irgendwie, dass der Fehler wahrscheinlich also schon früher auftritt, aber eben erst da dann aufgezeichnet wird.

Was auch wichtig sein könnte:
Ein weiterer User, ebenfalls mit OnBoard-GraKa (und diesmal mit 800x600), beklagt sich über mehrere Zugriffsverletzungen beim Start. Wenn ich das Debug-Log betrachte fällt mir auf, dass der Fehler nach dem Resize auf Vollbildmodus und vor dem Laden der Texturen auftritt. Er kriegt keinen GL_INVALID_ENUM-Fehler, nur die ZV. Folgendes passiert zwischen den beiden Sachen:

Code:
  1.   CreateRenderContext;
  2.   FormResize(Self);


Ich hab mal alles auseinandergenommen was da genau passiert und mit einzelnen Schritten versehen und ihm das geschickt. Ergebnis: Keine ZV o_O Sehr merkwürdig das ganze. Da spielen vielleicht einige Dinge zusammen.

Code:
  1.   // CreateRenderConntext
  2.   DC := GetDC(Form1.Handle);
  3.  
  4.   if not InitOpenGL then
  5.     Form1.Close;
  6.  
  7.   RC := CreateRenderingContext(DC, [opDoubleBuffered], 32, 24, 0, 0, 0, 0);
  8.   ActivateRenderingContext(DC, RC);
  9.  
  10.   glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
  11.  
  12.   glEnable(GL_BLEND);
  13.   glEnable(GL_TEXTURE_2D);
  14.  
  15.   glShadeModel(GL_SMOOTH);
  16.   glClearColor(0.0, 0.0, 0.0, 0.5);
  17.   glClearDepth(1.0);
  18.  
  19.   glEnable(GL_DEPTH_TEST);
  20.   glDepthFunc(GL_LEQUAL);
  21.  
  22.   glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
  23.   glEnable(GL_LIGHTING);
  24.  
  25.  
  26.   // Resize
  27.   L := (ClientWidth div 2) - 400;
  28.   T := (ClientHeight div 2) - 300;
  29.  
  30.   glViewport(L, T, 800, 600);
  31.  
  32.   glMatrixMode(GL_PROJECTION);
  33.  
  34.   glLoadIdentity;
  35.  
  36.   glOrtho(0, ClientWidth, ClientHeight, 0, 5, 20);
  37.  
  38.   glMatrixMode(GL_MODELVIEW);
  39.  
  40.   glLoadIdentity;
  41.  
  42.   glClear(GL_COLOR_BUFFER_BIT);


(Achja, wenn grad einer dabei ist, kann er mal gucken ob ich hier was unnötiges mache? Für ein 2D-Spiel? Hab immer so das Gefühl, manches brauch ich gar nicht.)


Nun meine Frage:
1) Können die zwei Fehler was miteinander zu tun haben? Einmal die ZV ohne INVALID_ENUM und einmal IVALID_ENUM ohne ZV?
2) Kann das irgendwie hier liegen oder wo kann denn so ein INVALID_ENUM ausgelöst werden?
3) kA - bin überfragt :-P

Grüße
GTA-Place


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Aug 12, 2008 16:21 
Offline
DGL Member
Benutzeravatar

Registriert: Di Jul 29, 2003 00:11
Beiträge: 436
Übliches Procedere: Fehler eingrenzen, indem du evtl. verdächtigen Rendercode auskommentierst und deine glGetErrors weiter streust.

glShadeModel(GL_SMOOTH);
Vorgabewert ist schon GL_SMOOTH


glClearColor(0.0, 0.0, 0.0, 0.5);
Warum 0.5 im Alphaanteil?

glClearDepth(1.0);
Denke nicht, dass du das brauchst?


glDepthFunc(GL_LEQUAL);
Aso, deswegen der vorherige Befehl...
Warum nicht einfach beim Default bleiben? GL_LESS? Dann kannst du beide Zeilen weglassen.


glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
Hm, überflüssig bei 2D.


glEnable(GL_LIGHTING);
Du brauchst Beleuchtung bei 2D? Wozu?

glClear(GL_COLOR_BUFFER_BIT);
Das ist doch der Teil, der aufgerufen wird, wenn du die Fenstergröße änderst, oder?
Da brauchst du den Colorbuffer nicht freiräumen wohl, sollte ja eh beim nächsten Renderdurchgang geschehen.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 2 Beiträge ] 
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 11 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.007s | 16 Queries | GZIP : On ]