Kann MiniB3D kein INCBIN?

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

Midimaster

Betreff: Kann MiniB3D kein INCBIN?

BeitragMi, Feb 03, 2010 15:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo ich versuche gerade MINIB3D dazu zu überreden, seine Files aus einem INCBIN zu holen. Aber scheinbar misslingt das. Mache ich da was falsch, oder kann MINIB3D das nicht.

Hier ein Testprogramm, das das Problem zeigt. Es benötigt irgend ein PNG-File im Wurzelverzeichnis.
BlitzMax: [AUSKLAPPEN]
SuperStrict
Import sidesign.minib3d
Incbin "test.png"

Graphics3D 800,600,24,2

Global camera:TCamera = CreateCamera()
Global light:Tlight = CreateLight()

Global OldDraw:TImage = LoadImage("incbin::test.png")
Global SpriteA:TSprite = LoadSprite("test.png")
Global SpriteB:TSprite = LoadSprite("incbin::test.png")

MoveEntity SpriteA,0,0,2
MoveEntity SpriteB,-2,0,3

Repeat
MoveEntity SpriteA,0,0,0.01
MoveEntity SpriteB,0.01,0,0
RenderWorld
BeginMax2D
DrawImage OldDraw,0,0
EndMax2D
Flip 1
Until KeyHit(key_Escape)

Das sollte man hier beobachten können: Das DrawImage kann das mit INCBIN eingebundene PNG-Bild darstellen. Auch das von der Platte geladene PNG-Bild wird als Sprite dargestellt. Allerdings der INCBIN-Sprite ist nur als weißes Feld zu sehen.

Nightphoenix:
Da haste dann gleich was gegen die "Langeweile" Wink

klin

BeitragMi, Feb 03, 2010 15:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Vermutung:
incbin:: ist normal bei Streams vorhanden.Genauso wie z.B. http:: usw. Wahrscheinlich hat das 3D Modul nicht das incbin:: eingetragen. Überprüf mal ob SpriteB=Null ist.

MFG
Klin

Midimaster

BeitragMi, Feb 03, 2010 15:44
Antworten mit Zitat
Benutzer-Profile anzeigen
nein, SpriteB ist nicht NULL. Man erkennt ja auch, dass es die Größe des PNG-Bildes nachahmt. Jedoch als weiße Box.

Noobody

BeitragMi, Feb 03, 2010 15:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Soweit ich mich richtig erinnere, liegt das daran, dass MiniB3D mit FileType überprüft, ob die Datei vorhanden ist. Das geht bei Incbin natürlich in die Hose, weswegen MiniB3D keine Incbin-Dateien laden kann.
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun
 

klepto2

BeitragMi, Feb 03, 2010 15:53
Antworten mit Zitat
Benutzer-Profile anzeigen
minib3d kann leider kein natives incbin. Das Problem liegt beim loader management. Theoretisch würde es funktionieren, wenn man die materialien bzw Texturen "incbin::texturenname" nennen würde. Meshes funktionieren somit, das Texturen laden macht allerdings probleme. Ich schau mal ob ich nachher (nach der Arbeit) meine modifizierte Version finde. In der wird neben den angegebenen Pfaden auch im incbin space gesucht.
Matrix Screensaver
Console Modul für BlitzMax
KLPacker Modul für BlitzMax

HomePage : http://www.brsoftware.de.vu

Midimaster

BeitragMi, Feb 03, 2010 15:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Sch...

was mach ich dann jetzt? Ich will die Bilder und Sounds ja nicht als Einzeldaten in einem Verzeichnis an die Kunden ausliefern. Fürs Windows-B3D hab ich hier immer ein Wrapper-Programm (Molebox), das alles zu einer EXE zusammenschmiedet. Aber auf dem MAC?

Außerdem bin ich noch nicht davon überzeugt, dass dieses Handicap zu der Professionalität von MINIB3D passt. Da muss es noch eine andere Lösung geben....

Eigentlich brauch ich ja sogar die Kombination vo ZIP und INCBIN als Kombination mit Koriolis-Zipstream
 

klepto2

BeitragMi, Feb 03, 2010 16:00
Antworten mit Zitat
Benutzer-Profile anzeigen
hmm, ich hätte da eine idee, mit der ich meinen Code erweitern könnte. Damit sollte es auch möglich sein incbin:: und zip:: dateien laden.

Mein Vorschlag wäre sowas wie: RegisterSearchExtension(ext:String) oder ähnliches.

Dann würde man zb:

am anfang einfach

RegisterSearchExtension("incbin")
RegisterSearchExtension("zip")
RegisterSearchExtension("incbin::zip")

das hinzufügen.
Matrix Screensaver
Console Modul für BlitzMax
KLPacker Modul für BlitzMax

HomePage : http://www.brsoftware.de.vu

Midimaster

BeitragMi, Feb 03, 2010 16:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Klepto2,

ist das Original MINIB3D eigentlich von Dir?

[EDIT] Ah, ich hab mich jetzt mal schlau gemacht... MINIB3D ist von "SimonH". Von Klepto2 ist die EXT-Version.


Der Support für INCBIN und ZIP wäre, denk ich, überaus hilfreich. Du hattest da ja auch mal eine Post im engl. Forum: http://www.blitzbasic.com/Comm...501#811490

und Peter Scheutz hat da auch schon mal was versucht:
http://www.blitzbasic.com/Comm...655#907922
  • Zuletzt bearbeitet von Midimaster am Mi, Feb 03, 2010 17:03, insgesamt einmal bearbeitet

BtbN

BeitragMi, Feb 03, 2010 16:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich verstehe nicht, wo MiniB3D da das Problem hat? Einfach den FileType Check weg und mit OpenStream laden, und statt nem String als url nen Object nehmen, schon gehts?

Midimaster

BeitragMi, Feb 03, 2010 16:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Kann ich das selbst bewerkstelligen? Hört sich nach einer Änderung direkt in der MINIB3D an...


Wegen der Pflegbarkeit der Programme in der Zukunft ist es immer total wichtig, dass wir mit so wenig Patches wie möglich arbeiten. Daher würde ich ein ev. Update der Original MINIB3D vorziehen.

Ich hab da sowieso gleich noch einmal eine Frage dazu. Da gab es doch die EXT-Version. Ist das nun eine Ergänzung zu MINIB3D oder ein Ersatz? Irgendwo hab ich gelesen, dass die EXT-Version nicht weiterentwickelt wird. Arbeitet Ihr dennoch damit? Was ratet Ihr mir?

Wäre es nicht viel klüger das Wissen der EXT-Version in die Weiterentwicklung des Originals einfließen zu lassen? Oder wenigsten die richtig geilen Verbesserungen weiterzupflegen? Oder versteh ich da was falsch?
  • Zuletzt bearbeitet von Midimaster am Mi, Feb 03, 2010 17:04, insgesamt einmal bearbeitet
 

klepto2

BeitragMi, Feb 03, 2010 17:03
Antworten mit Zitat
Benutzer-Profile anzeigen
BtbN, leider geht das nicht so einfach. Bei Sprites ist das mit dem FileType korrekt, bei Modellen,die texturen nutzen geht das nicht so einfach. Da gibt es eine Funktion die versucht die korrekte Textur zu laden, da Texturen aber nicht zwangsläufig korrekt im Model selber angegeben sind sucht minib3d in unterschiedlichen Ordnern. Dabei wird aber kein Incbin o.ä unterstützt. Ein FileType check findet dort zwar auch (sinnvollerweise) statt, hat aber dort nix mit dem eigentlichen Problem in minib3d zu tun.

@midimaster:

Nein, minib3d ist von simonh. Ich hatte mir damals nur zur aufgabe gemacht minib3d zu erweitern und es aufzuräumen, bzw anders zu strukturieren. Da solche Sachen wie dein jetziges Problem im Design von minib3d liegen und es noch mehrere unglückliche konstruktionen im inneren gibt, habe ich mein Projekt fallen gelassen. (Leider, ich hätte gerne weiter gemacht aber mit jeder neuen Version musste ich alles praktisch neu einbauen).

Hier mein altes Worklog: https://www.blitzforum.de/worklogs/27/
Matrix Screensaver
Console Modul für BlitzMax
KLPacker Modul für BlitzMax

HomePage : http://www.brsoftware.de.vu

Midimaster

BeitragMi, Feb 03, 2010 17:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Das ist genau mein Bedenken gegenüber irgndwelcher Patches am Original. Bei jedem Update muss man die Patches wieder aufspielen und wenn man eines vergisst, funktioniert eines meiner Programme nicht mehr. Das bedeutet oft Sucherei und Zeitverschwendung.

Wie lässt sich denn mit simonh reden? Wäre es nicht klüger ihn zu Verbesserungen zu bewegen, bzw. sie an ihn zu posten, damit er sie aufnimmt? Hast du einen guten Kontakt zu ihm?

(Ich war ja ganz überrascht, dass das tolle Kommando "BeginMax2D" in die Original gefunden hatte. Das war glaub ich auch zuerst nur in deiner Variante.)
  • Zuletzt bearbeitet von Midimaster am Mi, Feb 03, 2010 19:26, insgesamt einmal bearbeitet

ChaosCoder

BeitragMi, Feb 03, 2010 17:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Auf dem Mac kannst du doch einfach die Dateien in die .app reinbauen. Das kannst du auch manuell tun. Und am Anfang deines Programms machst du ein
Code: [AUSKLAPPEN]
ChangeDir("name.app/Contents/Resources/")

So befindet sich alles im Resourceordner innerhalb der .app und du kannst von da auch alles öffnen. Das machen auch die großen Hersteller nicht anders.
Projekte: Geolaria | aNemy
Webseite: chaosspace.de

Midimaster

BeitragMi, Feb 03, 2010 18:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Dann kann aber auch jeder andere die Daten dort finden, oder?

Mr.Hyde

Newsposter

BeitragMi, Feb 03, 2010 18:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja. Rechtsklick auf die App-Datei -> "Paketinhalt anzeigen" erlaubt Vollzugriff. Um die Dateien zu schützen müsstest du sie verschlüsseln.
BBP News RSS | Chaos Interactive | Watanien 2 Screens, Infos und Download | Watanien 2 Worklog | PuzzleMasters
http://abgeordnetenwatch.de - http://www.regierungs-beratung.de - Der Regierung auf die Finger schauen

Midimaster

BeitragMi, Feb 17, 2010 10:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Nachtrag:

Ich habe mit SimonH gesprochen und er hat angekündigt, die beiden Features INCBIN-Support und ZIP-Support in sein nächstes Update mit aufzunehmen.

Außerdem plant er auch, die etwa 20 Verbesserungen von Peter Scheutz einzubauen:
http://www.blitzbasic.com/Comm...opic=88252

So ist das natürlich die beste Lösung für alle...

BlitzMoritz

BeitragFr, Feb 04, 2011 19:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Auch wenn der Thread schon ein Jahr alt ist, ist er ja immer noch ungelöst, daher möchte ich Euch einen kleinen Eingriff in das Modul posten, mit dem auch die Standart-Version keine Probleme haben sollte, Modelle und Texturen per Incbin einzubinden:

Erstens öffne man die Datei TTexture.bmx im Verzeichnis sidesign.mod/minib3d.mod/inc/
und ergänze ganz am Anfang der Function FileFind(file$ Var) die Zeile BlitzMax: [AUSKLAPPEN]
If Left(file$,8) = "incbin::" Then Return True

Zweitens öffne man im gleichen Verzeichnis die Datei TMesh.bmx und ersetze in der Function LoadAnimMesh:TMesh(file$,parent_ent:TEntity=Null) die Zeile BlitzMax: [AUSKLAPPEN]
If FileType(file$)=0 Then Return TMesh.CreateCube()
durch die Zeile BlitzMax: [AUSKLAPPEN]
If Left(file$, 8) <> "incbin::" And FileType(file$)=0 Then Return TMesh.CreateCube()


Drittens öffne man im gleichen Verzeichnis die Datei TModel.bmx
und ersetze in der Function LoadAnimB3D:TMesh(f_name$,parent_ent_ext:TEntity=Null) die Zeile
BlitzMax: [AUSKLAPPEN]
file=OpenStream("littleendian::"+f_name$)
durch die Zeilen BlitzMax: [AUSKLAPPEN]
If Left(f_name$, 8) = "incbin::" Then
file=ReadStream(f_name$)
Else
file=OpenStream("littleendian::"+f_name$)
End If

Und viertens kompiliere man das Modul erneut.
Der Eingriff in das Modul beschränkt sich lediglich auf Dateinamen, die "incbin::" vorangestellt haben, sonst bleibt alles beim Alten, und wenn eine "incbin"-Datei fehlt, sollte einem der BlitzMax-Compiler das unabhängig von minib3d schon vorher gemeldet haben.

Edit: Very Happy Ich hab' außerdem noch einen Weg gefunden, die bei den extern erstellten Modellen verwendeten Texturen per incbin einzubinden (ansonsten würden sie fehlen!):
Man erstelle mit milkshape sein Modell und lade die entsprechenden Texturen.
Dann exportiere man das Modell im Textformat "Milkshape 3D ASCII Export" und öffnet die Datei mit einem Text-Editor. Dort suche man (meist gegen Ende) die Dateinamen der für die Texturen verwendeten Bilddateien und fügt bei jedem am Anfang ein incbin:: ein und speichert. Diese Datei importiert man wieder in milkshape (wobei dort die Texturen nicht mehr ladbar bzw. sichtbar sind!) und exportiert direkt ins b3d-Format.
Die in BlitzMax per incbin eingebundenen Bilddateien findet dann ebenfalls das per incbin eingebundene Modell.

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group