![]() |
[OpenGL+GLFW] Texturen werden nicht genutzt
Liste der Anhänge anzeigen (Anzahl: 2)
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:
Hier noch ein kleines Log:
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;
Code:
Das Problem:
===================================================
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 ... 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 |
Re: [OpenGL+GLFW] Texturen werden nicht genutzt
Liste der Anhänge anzeigen (Anzahl: 1)
~ 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:
Wenn jemand etwas abweichendes erhält, bitte melden ... vllt. liegt es ja nur an meinem System.
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 irgendwo im Quelltext was fehlt oder zu viel ist, bitte auch melden. MfG, Bug |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:02 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz