AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi [OpenGL+GLFW] Texturen werden nicht genutzt
Thema durchsuchen
Ansicht
Themen-Optionen

[OpenGL+GLFW] Texturen werden nicht genutzt

Ein Thema von BUG · begonnen am 9. Jun 2009 · letzter Beitrag vom 11. Jun 2009
Antwort Antwort
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#1

[OpenGL+GLFW] Texturen werden nicht genutzt

  Alt 9. Jun 2009, 16:13
Hallo Leute,

ich hab mal ein Problem mitgebracht.

Erstmal mein Programmaufbau:

Mein Hauptprogramm initialisiert GLWF und und initialisiert für den Eigengebrauch dglOpenGL und lädt dann Interfaces aus einer DLL, die das eigentliche Programminhalt darstellen.

Mein erstes Interface soll mehrere Bilder anzeigen ... aber daran scheitere ich schon.

Etwas Code:

Delphi-Quellcode:
procedure TSplash.init(owner: IGame);
begin
  FOwner := owner;
  initCommons; // <-- InitOpenGL
  // ...
  // OpenGL stuff
  glClearColor(0, 0, 0, 1);
  glDisable(GL_CULL_FACE);
  glDisable(GL_DEPTH_TEST);
  glEnable(GL_TEXTURE_2D);
  glEnable(GL_BLEND);
  glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
  // enter the matrix
  glMatrixMode(GL_PROJECTION);
  glLoadIdentity;
  glOrtho(0, 800, 0, 600, 0.1, 10000);
  glMatrixMode(GL_TEXTURE);
  glLoadIdentity;
  glMatrixMode(GL_MODELVIEW);
  glLoadIdentity;
end;
Delphi-Quellcode:
procedure TSplash.tick;
begin
  case FState of
    fsLoad:
      begin
        FCurImgPath := FPath + FIni.ReadString('picture_'+IntToStr(FCurrent), 'file', '');
        FImageID := 0;
        glGenTextures(1, @FImageID);
        glBindTexture(GL_TEXTURE_2D, FImageID);
        if glfwLoadTexture2D(PChar(FCurImgPath), 0) = GL_FALSE then writeln('Unable to load texture:'#13#10' >', FCurImgPath);
        FState := fsIn;
        FTick := 0;
        FMaxTick := FIni.ReadInteger('picture_'+IntToStr(FCurrent), 'in', 1) div 16;
      end;
    fsIn:
      begin
        if FTick < FMaxTick then inc(FTick) else
        begin
          FState := fsShow;
          FTick := 0;
          FMaxTick := FIni.ReadInteger('picture_'+IntToStr(FCurrent), 'delay', 1) div 16;
        end;
      end;
    fsShow: // ...
    fsOut: // ...
    fsUnload:
      begin
        glDeleteTextures(1, @FImageID);
        if FCurrent >= FCount-1 then FState := fsDie
          else begin
            FState := fsLoad;
            inc(FCurrent);
          end;
      end;
    else FOwner.next;
  end;
end;
Delphi-Quellcode:
procedure TSplash.render;
begin
   while glgetError <> gl_no_error do writeln('... error before rendering!');
  glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  case FState of
    fsIn: glColor4d(1, 1, 1, FTick/FMaxTick);
    fsShow: glColor4d(1, 1, 1, 1);
    fsOut: glColor4d(1, 1, 1, 1-FTick/FMaxTick);
    else exit;
  end;
  glBindTexture(GL_TEXTURE_2D, FImageID);
  glBegin(GL_QUADS);
    glTexCoord2f(0, 0); glVertex3f( 0, 0, -5);
    glTexCoord2f(1, 0); glVertex3f(800, 0, -5);
    glTexCoord2f(1, 1); glVertex3f(800, 600, -5);
    glTexCoord2f(0, 1); glVertex3f( 0, 600, -5);
  glEnd;
  while glgetError <> gl_no_error do writeln('... error after rendering!');
end;
Hier noch ein kleines Log:
Code:
===================================================
Opening the GLFW window:
===================================================

width: 800
height: 600
color: 8
alpha: 8
stencil: 8
depth: 24
fullscreen: off
vsync: on

Wait till window is shown ... done!

===================================================
Running the game ...
===================================================

Loading init ...
... init!
... run!
...... error after rendering!
 next (=> )!
... destroy!
Unloaded init!



Press [RETURN] to quit ...
Das Problem:

Der Code funktioniert in so weit, das er mir den Bildschirm weiß malt (also das Quad wird gepinselt).
Nur gibt es eben keine Texturen.

"...... error after rendering!" ist mir ein Rätsel, tritt aber nur beim ersten Aufruf der Methode Render auf.

glfwLoadTexture2D kehrt erfolgreich zurück und AFAIK sind auch alle nötigen OpenGL-Einstellungen getroffen.
(Ich benutze dglOpenGL und glfw aus dem Andorra "Prerequisite Package")


Vielleicht fällt ja einem von euch was ein/auf ...


MfG,
Bug
Miniaturansicht angehängter Grafiken
error_371.jpg  
Angehängte Dateien
Dateityp: zip task_200.zip (127,7 KB, 5x aufgerufen)
Intellekt ist das Verstehen von Wissen. Verstehen ist der wahre Pfad zu Einsicht. Einsicht ist der Schlüssel zu allem.
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#2

Re: [OpenGL+GLFW] Texturen werden nicht genutzt

  Alt 11. Jun 2009, 11:35
~ PUSH ~
Keiner ne Idee, woran das liegen könnte?


EDIT1:

Die Merkwürdigkeit und das Fehlen der Textur kann ich reproduzieren. Ich hab mal ein ausführbares Testprogramm angehängt (mit Quellen).

Hier mein Ergebnis:
Code:
Start ...
after init: Kein Fehler
after gen texture: Kein Fehler
after bind texture: Kein Fehler
after load texture (1): Kein Fehler
before render quad (1): Kein Fehler
after render quad (1): Der Vorgang ist ungültig.
after render quad (1): Kein Fehler
before render quad (2): Kein Fehler
after render quad (2): Kein Fehler
Wenn jemand etwas abweichendes erhält, bitte melden ... vllt. liegt es ja nur an meinem System.
Wenn irgendwo im Quelltext was fehlt oder zu viel ist, bitte auch melden.


MfG,
Bug
Angehängte Dateien
Dateityp: zip glfwtestapp_961.zip (259,9 KB, 9x aufgerufen)
Intellekt ist das Verstehen von Wissen. Verstehen ist der wahre Pfad zu Einsicht. Einsicht ist der Schlüssel zu allem.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:26 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz