Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
csde_rats

Anmeldungsdatum: 07.01.2007 Beiträge: 2292 Wohnort: Zwischen Sessel und Tastatur
|
|
Nach oben |
|
 |
Stormy

Anmeldungsdatum: 10.09.2004 Beiträge: 567 Wohnort: Sachsen - wo die schönen Frauen wachsen ;)
|
Verfasst am: 06.07.2007, 12:10 Titel: |
|
|
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 |
|
 |
csde_rats

Anmeldungsdatum: 07.01.2007 Beiträge: 2292 Wohnort: Zwischen Sessel und Tastatur
|
|
Nach oben |
|
 |
Stormy

Anmeldungsdatum: 10.09.2004 Beiträge: 567 Wohnort: Sachsen - wo die schönen Frauen wachsen ;)
|
Verfasst am: 06.07.2007, 18:57 Titel: |
|
|
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 |
|
 |
csde_rats

Anmeldungsdatum: 07.01.2007 Beiträge: 2292 Wohnort: Zwischen Sessel und Tastatur
|
Verfasst am: 06.07.2007, 19:52 Titel: |
|
|
Danke!
Danke für den Link, allerdinhs steht genau das in der Referenz . Leider wird nirgendwo erklärt, wie man den Header manuell erstellen kann.
Gut, dann poste mal den veränderten Src.
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 |
|
 |
Stormy

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

Anmeldungsdatum: 07.01.2007 Beiträge: 2292 Wohnort: Zwischen Sessel und Tastatur
|
|
Nach oben |
|
 |
Stormy

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

Anmeldungsdatum: 07.01.2007 Beiträge: 2292 Wohnort: Zwischen Sessel und Tastatur
|
Verfasst am: 06.07.2007, 20:42 Titel: |
|
|
csderats hat Folgendes geschrieben: |
Gut, dann poste mal den veränderten Src.
|
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. Sorry aber da bin ivh mit meinen Latein am Ende.  _________________ If hilfreicher_Beitrag then klick(location.here)
Klick |
|
Nach oben |
|
 |
Stormy

Anmeldungsdatum: 10.09.2004 Beiträge: 567 Wohnort: Sachsen - wo die schönen Frauen wachsen ;)
|
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 06.07.2007, 21:07 Titel: |
|
|
csderats hat Folgendes geschrieben: | Sorry aber da bin ivh mit meinen Latein am Ende.  |
naja wie viel jahre lernst du denn überhaupt schon latein (falls überhaupt)?
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 |
|
 |
csde_rats

Anmeldungsdatum: 07.01.2007 Beiträge: 2292 Wohnort: Zwischen Sessel und Tastatur
|
Verfasst am: 06.07.2007, 21:20 Titel: |
|
|
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. 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 |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 06.07.2007, 21:30 Titel: |
|
|
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 |
|
 |
csde_rats

Anmeldungsdatum: 07.01.2007 Beiträge: 2292 Wohnort: Zwischen Sessel und Tastatur
|
|
Nach oben |
|
 |
Stormy

Anmeldungsdatum: 10.09.2004 Beiträge: 567 Wohnort: Sachsen - wo die schönen Frauen wachsen ;)
|
Verfasst am: 06.07.2007, 21:53 Titel: |
|
|
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 |
|
 |
csde_rats

Anmeldungsdatum: 07.01.2007 Beiträge: 2292 Wohnort: Zwischen Sessel und Tastatur
|
|
Nach oben |
|
 |
Stormy

Anmeldungsdatum: 10.09.2004 Beiträge: 567 Wohnort: Sachsen - wo die schönen Frauen wachsen ;)
|
|
Nach oben |
|
 |
PMedia
Anmeldungsdatum: 14.08.2006 Beiträge: 2847
|
Verfasst am: 07.07.2007, 00:16 Titel: |
|
|
hehe, thx für den Hinweis, ich beschäftige mich grad mit Delphi 7 und 3D is immer fein x) |
|
Nach oben |
|
 |
csde_rats

Anmeldungsdatum: 07.01.2007 Beiträge: 2292 Wohnort: Zwischen Sessel und Tastatur
|
Verfasst am: 07.07.2007, 20:38 Titel: |
|
|
*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 |
|
 |
Stormy

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