Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

[openGL] Wie kriegt man ein JPEG-Bild in eine Textur rein?
Gehe zu Seite Zurück  1, 2, 3  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
csde_rats



Anmeldungsdatum: 07.01.2007
Beiträge: 2292
Wohnort: Zwischen Sessel und Tastatur

BeitragVerfasst am: 06.07.2007, 00:34    Titel: Antworten mit Zitat

Danke!
_________________
If hilfreicher_Beitrag then klick(location.here)

Klick
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Stormy



Anmeldungsdatum: 10.09.2004
Beiträge: 567
Wohnort: Sachsen - wo die schönen Frauen wachsen ;)

BeitragVerfasst am: 06.07.2007, 12:10    Titel: Antworten mit Zitat

Ok... hier meine Tipps:

1) In Zeile 413:
Code:
       do
                glFlush
                flip
                sleep 1:
                puffer = inkey
                loop until puffer <> inkey


2) In der Funktion CreateTexture:

Code:
REDIM dat(0) AS UBYTE


..um den "Suspicious Pointer"-Fehler loszuwerden.

3) Grundsätzliche Dinge:

Warum lädst du in jedem Frame das Bild erneut? Das Bild sollte nur geladen werden, wenn ein Bildwechsel eingeleitet wurde. Ggf. solltest du ein flag einbauen, ala newpic = 0/1.
_________________
+++ QB-City +++ Die virtuelle Stadt für jeden Freelancer - Join the community!
Projekte: QB-City,MysticWorld (RPG), 2D-OpenGL-Tutorial
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
csde_rats



Anmeldungsdatum: 07.01.2007
Beiträge: 2292
Wohnort: Zwischen Sessel und Tastatur

BeitragVerfasst am: 06.07.2007, 16:19    Titel: Antworten mit Zitat

Der Suspicious Pointer-Fehler ist iwie immernoch da. neutral

Er rechnet, er zeigt nichts an, er stürzt ab traurig

[edit]
neuer src, gleicher schrott
http://www.freebasic-portal.de/index.php?s=fbporticula&mode=show&id=45
_________________
If hilfreicher_Beitrag then klick(location.here)

Klick
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Stormy



Anmeldungsdatum: 10.09.2004
Beiträge: 567
Wohnort: Sachsen - wo die schönen Frauen wachsen ;)

BeitragVerfasst am: 06.07.2007, 18:57    Titel: Antworten mit Zitat

Hallo,

ich habe mir deinen Source angesehen und einige Fehler repariert. Die Funktion CreateTexture war unter anderem fehlerhaft (bzw. mittlerweile veraltet, aber nun korrigiert) und habe einige Optimierungen in deinem Source vorgenommen. Was ich allerdings noch nicht beheben konnte, ist der momentane Fehler nur noch in der Funktion "RawJpeg". Selbst im normalen gfx-Modus von FB wird kein Bild angezeigt. Kannst du dies beheben?

Falls du wissen willst, wie der neue FB GFX-Buffer aufgebaut ist, schaust du einfach hier nach: http://www.freebasic.net/forum/viewtopic.php?t=6056
_________________
+++ QB-City +++ Die virtuelle Stadt für jeden Freelancer - Join the community!
Projekte: QB-City,MysticWorld (RPG), 2D-OpenGL-Tutorial
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
csde_rats



Anmeldungsdatum: 07.01.2007
Beiträge: 2292
Wohnort: Zwischen Sessel und Tastatur

BeitragVerfasst am: 06.07.2007, 19:52    Titel: Antworten mit Zitat

Danke!

Danke für den Link, allerdinhs steht genau das in der Referenz happy. Leider wird nirgendwo erklärt, wie man den Header manuell erstellen kann. traurig

Gut, dann poste mal den veränderten Src. lächeln

Hmm.
Die Funktion RawJPEG Funktioniert auf jeden Fall so:
Code:

'Includes
    #include "inc/freeimage.bi"
    #include "inc/crt.bi"



declare Function RawJpeg  (Byval File As String) As Any Ptr
dim bla as any ptr


screen 20,32
print "bitte warten...."
bla = RawJpeg("test.jpg")

locate 1,1: print space(40)
if bla then
    put(0,0),bla
else
    print "err"
end if

sleep

Function RawJpeg(Byval File As String) As Any Ptr ' Lädt ein JPEG-Bild in einen
    Dim Dib As FIBITMAP Ptr                       ' FreeBasic-kompatiblen Puffer
    Dim SprWidth As Integer                                                   
    Dim SprHeight As Integer                                                 
    Dim Sprite As Any Ptr
    Dim Bits As Any Ptr
    'FreeImage_Initialise 0
    ' Ab in den RAM, mit dem JPEG!!!!
    Dib = FreeImage_Load(FIF_JPEG, File, JPEG_DEFAULT)
    'Dib = FreeImage_Rescale (Dib, 1024, 768, FILTER_BILINEAR)
    If Dib = 0 Then Return 0
   
    ' Bild umdrehen
    FreeImage_FlipVertical Dib
    ' Ab hier gehts mit 32 Bit Farbtiefe weiter
    Dib = FreeImage_ConvertTo32Bits(Dib)
   
    SprWidth = FreeImage_GetWidth(Dib)
    SprHeight = FreeImage_GetHeight(Dib)
    Sprite = ImageCreate(SprWidth, SprHeight)
    Bits = FreeImage_GetBits(Dib)
   
    MemCpy CPtr(Zstring Ptr, Sprite) + 4, Bits, SprWidth * SprHeight * 4

    ' Speicher wieder freigeben
    FreeImage_Unload(Dib)
   
    Return Sprite
end function

_________________
If hilfreicher_Beitrag then klick(location.here)

Klick
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Stormy



Anmeldungsdatum: 10.09.2004
Beiträge: 567
Wohnort: Sachsen - wo die schönen Frauen wachsen ;)

BeitragVerfasst am: 06.07.2007, 20:10    Titel: Antworten mit Zitat

Hmm.. bei mir kommt nur ein schwarzer Bildschirm nachdem der Text "bitte warten" aufgeblinkt ist.

Meiner Meinung gibt es folgende Ursachen und ich hoffe dass wir einige von denen ausschließen können:

1) Die JPEG-Kodierung der jeweiligen Datei (ich verwende diese Datei)
2) Die freeimage.dll (meine Version, 1.1 MB)
3) Die FB-Version: Ich verwende die neueste 0.17b, die ich auf www.freebasic.net finden konnte.

Andere Ursachen fallen mir momentan nicht ein.
_________________
+++ QB-City +++ Die virtuelle Stadt für jeden Freelancer - Join the community!
Projekte: QB-City,MysticWorld (RPG), 2D-OpenGL-Tutorial
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
csde_rats



Anmeldungsdatum: 07.01.2007
Beiträge: 2292
Wohnort: Zwischen Sessel und Tastatur

BeitragVerfasst am: 06.07.2007, 20:28    Titel: Antworten mit Zitat

Bei mir funzt es,
1) Mit deinem Bild
2) Probier mal diesem Prog. Ist von mir kompiliert (braucht aber FreeImage.dll). FreeImage-Version: 3, 9, 3, 0
3) 0.18 CVS, tagesaktuell.
_________________
If hilfreicher_Beitrag then klick(location.here)

Klick
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Stormy



Anmeldungsdatum: 10.09.2004
Beiträge: 567
Wohnort: Sachsen - wo die schönen Frauen wachsen ;)

BeitragVerfasst am: 06.07.2007, 20:36    Titel: Antworten mit Zitat

Ok.. dann liegt es an der FreeBASIC-Version. Kannst es selber mal versuchen mit der 0.17b Version zu kompilieren und ggf. den Code anzupassen? Ich selber mag nicht unbedingt die CVS-Version.
_________________
+++ QB-City +++ Die virtuelle Stadt für jeden Freelancer - Join the community!
Projekte: QB-City,MysticWorld (RPG), 2D-OpenGL-Tutorial
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
csde_rats



Anmeldungsdatum: 07.01.2007
Beiträge: 2292
Wohnort: Zwischen Sessel und Tastatur

BeitragVerfasst am: 06.07.2007, 20:42    Titel: Antworten mit Zitat

csderats hat Folgendes geschrieben:

Gut, dann poste mal den veränderten Src. lächeln


happy

Zu RawJPEG:

Wahrscheinlich ist das kein Fehler im src, sondern ein Fehler in FB. Denn der Pointer hat eine Adresse, nur scheint FreeBasic nicht zu erkennen, dass es ein Bilpuffer Typ 1 ist. traurig Sorry aber da bin ivh mit meinen Latein am Ende. neutral
_________________
If hilfreicher_Beitrag then klick(location.here)

Klick
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Stormy



Anmeldungsdatum: 10.09.2004
Beiträge: 567
Wohnort: Sachsen - wo die schönen Frauen wachsen ;)

BeitragVerfasst am: 06.07.2007, 21:06    Titel: Antworten mit Zitat

http://other.storm-master.de/fbporticula41.bas
_________________
+++ QB-City +++ Die virtuelle Stadt für jeden Freelancer - Join the community!
Projekte: QB-City,MysticWorld (RPG), 2D-OpenGL-Tutorial
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 06.07.2007, 21:07    Titel: Antworten mit Zitat

csderats hat Folgendes geschrieben:
Sorry aber da bin ivh mit meinen Latein am Ende. neutral

naja wie viel jahre lernst du denn überhaupt schon latein (falls überhaupt)? durchgeknallt
im ernst: wenn du vermutest, dass es an FB liegt: ab ins englische FB-Forum und posten!
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
csde_rats



Anmeldungsdatum: 07.01.2007
Beiträge: 2292
Wohnort: Zwischen Sessel und Tastatur

BeitragVerfasst am: 06.07.2007, 21:20    Titel: Antworten mit Zitat

2 Jahre, bald das dritte

@Stormy:
Boahh, echt danke für deine Hilfe.
Aber ich glaub ich lass es doch lieber mit openGL.... openGL + FB scheint noch viel zu unausgereift und instabil um es wirklich effektiv für sowas einzusetzten. anscheinend ist jpeg auch ein sehr ungeeignetes format für solche sachen. traurig vll. wird der openGL im verlaufe der 0.18 oder der 0.19 besser, dann werde ich nochmal schauen obs dann einigermaßen stabil läuft.

z.B.:
-Ich habs kompiliert funzt, prog beendet, nochmal ausprobiert => Bluescreen, nochmal probiert => weißes Trapez....
_________________
If hilfreicher_Beitrag then klick(location.here)

Klick
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 06.07.2007, 21:30    Titel: Antworten mit Zitat

wenn jedes mal was anderes passiert, heißt dass, dass du irgendwo ganz sicher nen fehler drin hast...
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
csde_rats



Anmeldungsdatum: 07.01.2007
Beiträge: 2292
Wohnort: Zwischen Sessel und Tastatur

BeitragVerfasst am: 06.07.2007, 21:32    Titel: Antworten mit Zitat

ja iwie logisch

http://www.freebasic-portal.de/index.php?s=fbporticula&mode=show&id=46

funzt auch net traurig nur ein rotes /schiefes quadrat zu sehen traurig

[edit]
wenn ich es mit einem GFXType + load_texture(Filename, picture) mache, klappt es, ist aber langsamer als mit FreeImage, und geht net für jpg's. traurig
_________________
If hilfreicher_Beitrag then klick(location.here)

Klick
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Stormy



Anmeldungsdatum: 10.09.2004
Beiträge: 567
Wohnort: Sachsen - wo die schönen Frauen wachsen ;)

BeitragVerfasst am: 06.07.2007, 21:53    Titel: Antworten mit Zitat

Nochmal zur Klarstellung:
Das weiße Quadrat bedeutet, dass das Objekt nicht der Textur belegt wurde. Soll heißen, dass die Funktion rawjpeg keinen Buffer zurückgibt mit dem CreateTexture arbeiten kann; so dass keine korrekte Textur erzeugt wird.

Ein ausschließlich rotes Quadrat bedeutet, dass die BMP nicht geladen wurde. Hast du eventl. den Dateinamen geprüft?

Es sollte so aussehen:


_________________
+++ QB-City +++ Die virtuelle Stadt für jeden Freelancer - Join the community!
Projekte: QB-City,MysticWorld (RPG), 2D-OpenGL-Tutorial
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
csde_rats



Anmeldungsdatum: 07.01.2007
Beiträge: 2292
Wohnort: Zwischen Sessel und Tastatur

BeitragVerfasst am: 06.07.2007, 22:09    Titel: Antworten mit Zitat

hat jemand ne ahnung womit man das kompilieren muss!?
http://www.dev-center.de/index.php?cat=header&file=glbitmap
_________________
If hilfreicher_Beitrag then klick(location.here)

Klick
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Stormy



Anmeldungsdatum: 10.09.2004
Beiträge: 567
Wohnort: Sachsen - wo die schönen Frauen wachsen ;)

BeitragVerfasst am: 06.07.2007, 22:52    Titel: Antworten mit Zitat

Delphi 6/7
_________________
+++ QB-City +++ Die virtuelle Stadt für jeden Freelancer - Join the community!
Projekte: QB-City,MysticWorld (RPG), 2D-OpenGL-Tutorial
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
PMedia



Anmeldungsdatum: 14.08.2006
Beiträge: 2847

BeitragVerfasst am: 07.07.2007, 00:16    Titel: Antworten mit Zitat

hehe, thx für den Hinweis, ich beschäftige mich grad mit Delphi 7 und 3D is immer fein x)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
csde_rats



Anmeldungsdatum: 07.01.2007
Beiträge: 2292
Wohnort: Zwischen Sessel und Tastatur

BeitragVerfasst am: 07.07.2007, 20:38    Titel: Antworten mit Zitat

*idee*:

@Stormy:
Kann es sein, dass deine Function nur mit dem FB-Pixelformat vom Typ 2 umgehen kann?

Zitat:

Version 1
Diese Version des Bildpuffers wurde bis freeBASIC v0.16 benutzt; seit v0.17 ist er nur noch dann verfügbar, wenn die Kommandozeilenoption
-lang deprecated
oder
-lang qb
eingesetzt wird.
Er besteht aus dem Header und den eigentlichen Pixelinformationen. Der Header ist ein Bitfeld (siehe TYPE (UDTs) und Bitfelder), das
Angaben über Höhe, Breite und Farbtiefe des Bildes enthält; an ihn schließen sich die eigentlichen Pixeldaten im oben genannten Format an.

Der Header besteht insgesamt aus 32bit, also vier Bytes oder einer INTEGER-Stelle. Er ist folgendermaßen aufgebaut:

TYPE _OLD_HEADER FIELD = 1
bpp : 3 AS USHORT
width : 13 AS USHORT
height AS USHORT
END TYPE


Zitat:
Version 2
Diese Version des Bildpuffers ist seit v0.17 verfügbar; das Programm muss dazu mit der Kommandozeilenoption
-lang fb
kompiliert werden.
Ebenso wie in Version 1 lässt sich dieses Bildpuffer-Format in einen Header und die eigentlichen Pixeldaten zerlegen. Der Bildpuffer ist
dabei so angelegt:
TYPE Image FIELD = 1
UNION
old AS _OLD_HEADER
type AS UINTEGER
END UNION
bpp AS INTEGER
width AS UINTEGER
height AS UINTEGER
pitch AS UINTEGER
GLuint AS STRING * 12
END TYPE

_________________
If hilfreicher_Beitrag then klick(location.here)

Klick
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Stormy



Anmeldungsdatum: 10.09.2004
Beiträge: 567
Wohnort: Sachsen - wo die schönen Frauen wachsen ;)

BeitragVerfasst am: 07.07.2007, 21:41    Titel: Antworten mit Zitat

PMedia hat Folgendes geschrieben:
hehe, thx für den Hinweis, ich beschäftige mich grad mit Delphi 7 und 3D is immer fein x)


Dann dürfte www.delphigl.com für dich interessant sein.

@csderats: Ich habe auch aus Testzwecken die FreeBASIC-Version 0.18 gezogen und bei mir wird nach wie vor die Grafik angezeigt. Ergo wird es wohl an deinen Treibern liegen (vermute ich mal).
_________________
+++ QB-City +++ Die virtuelle Stadt für jeden Freelancer - Join the community!
Projekte: QB-City,MysticWorld (RPG), 2D-OpenGL-Tutorial
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Gehe zu Seite Zurück  1, 2, 3  Weiter
Seite 2 von 3

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz