Pointer, Banks und Multiprocess....
Übersicht

![]() |
Silver_KneeBetreff: Pointer, Banks und Multiprocess.... |
![]() Antworten mit Zitat ![]() |
---|---|---|
Lässt sich eigentlich an einen Pointer auf das Anfangsbyte einer Bank kommen? Bisher hab ich nur gelesen dass bei einer DLL und der Deklaration "func(bank*)" ein Pointer auf das erste byte gegeben wird... Der umgekehrte weg, aus einem pointer wieder eine bank zu machen wäre natürlich auch cool....
Alternativ wäre etwas vergleichbares wie eine Funktion eines HexEditors: Der kann den Speicher jedes Prozesses abbilden und da lässt sich auch nach Adressen suchen. Als ich dort eine Bankhandle eingegeben habe bekam ich tatsächlich Lesezugang zu dieser bank (Schreibzugang weiß ich nicht...). Wenn man ein solches Verhalten Immitieren könnte, könnte man mit der Handle eines anderen Prozesses auf dessen speicher zugreifen. Ziel der Opperation wäre dann eine Form von Multiprocessing. zB StreamedLoading von images oder sounds (nach soundhandles hab ich auch schon gesucht und diese gefunden...) |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ein Pointer IST ein verweis das erste Byte eines Speicherblocks ![]() Inwiefern dir das allerdings was bringt für streamed loading ist mir ein Rätsel, denn blitz kratzt es rein garnicht, blitz (3D / Plus) lädt nur via FileIO. Wenn du media loading umleiten willst, dann wäre der richtige Weg dich in den Prozess einzuhängen und die FileIO Befehle abzufangen wenn diese auf eine bestimmte Datei bzw. auf einen bestimmten "stream" zugreifen wollen. zb würdest du dann statt loadimage("image.jpg") aufrufen loadimage("streamed::image.jpg") Dein eingehängter code würde dann da übernehmen und der von blitz aufgerufenen funktion die daten zurück leiten. streamed loading wäre allerdings gleich nochmal einige ecken schwerer. Grund ist das blitz nur immediate befehle hat, keine asyncronen befehle. Das heisst: Du rufst "laden" auf und es wird stehen bleiben bis das getan ist und vorher nicht zurück kehren. Man kann da allerdings ein wenig nachhelfen: 1. erzeuge eine zusatzfunktion prepareForStreaming(filename$). Diese lädt die daten dann asyncron eine nach der anderen 2. erzeuge eine zusatzfunktion isMediaReady(filename$) die dir sagt ob die datei schon genutzt werden kann 3. implementier obiges hooking, so das du dann loadxxx("streamed::filename$") aufrufst und er dann die zuvor reingeladene datei zustellt 4. um hässliche probleme vorzubeugen, bau "sentinels" ein. Das heisst erzeuge minimalst dateien der dateitypen die du brauchst und solange die media nicht fertig geladen sind, werden die zurückgegeben wenn man eine datei des gleichen dateitypes laden will welche noch nicht bereit ist. So gibt es keine MAVs sondern einfach "fehlerhaftes verhalten". Oder gib dann halt im stream null zurück, so das die ladefunktion ebenfalls 0 ausspuckt. PS: das ist alles ein wenig theorie. Denn bisher gibt es nur 2 technologien die so etwas in blitz überhaupt erlauben: 1. Molebox / Molebox Pro 2. PackB3D |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
Silver_Knee |
![]() Antworten mit Zitat ![]() |
---|---|---|
meine ideewäre zB folgende:
image=Createimage(1280,1024) Execfile "streamloader.exe "+image die streamloader.exe kann ja von mir aus stehen bleiben.... sie soll nur wenn sie fertig ist ihre geladene image in den Speicher der ersten kopieren... Gleiches wäre halt mit sounds etc zu machen.... dein Streamed::wäre natürlich cool aber das ist glaub ich noooch schwieriger zu realisieren als meine variante^^ Ach und trotzdem wäre es cool wenn 2 Prozesse auf den gleichen speicher zugreifen könnten =) |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Sehe nicht was deine variante bringen soll.
Wie gesagt, die daten müssen im programm von der festplatte geladen werden in Blitz3D / BlitzPlus. Es gibt keine möglichkeiten es aus dem RAM zu laden für Sounds und vor allem Meshes. wenn du nicht einen Ansatz wie oben ausgelegten nutzt, wird es nicht funktionieren. Da gibt es keinen "einfachen" Ansatz. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
Silver_Knee |
![]() Antworten mit Zitat ![]() |
---|---|---|
2 Prozesse. Beide Blitz. Der erste ist ein spiel mit Ladebildschirm, der ein leeres image im speicher reserviert (geht relativ schnell). Der zweite führt das Loadimage aus. Das dauert einen moment... der erste kann aber solang was anderes machen. ISt der 2. Prozess fertig nimmt er die eigene image und packt sie auf die image des 1. Rauf. | ||
![]() |
tft |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi...
lass dich nicht klein kriegen. Das Thema heist Asyncrones Coden. Mit 2 Processen zu arbeiten .. oder mehreren ist nicht weiter schwer. Auch Page Flipping ist unter Blitz... zuhilfenahme von Blitz Hacks viea Bank Befehle möglich. Es gibt hir eine Run.dll. Die Startet einen Task von Blitz aus. Der Blitz nicht zum Stehen bringt. Du must dann halt für die Komunikation sorgen. Das ist natürlich dann schon ein anderes Kalieber. Du müstest dann System Functionen zuhilfe nehmen. Es gibt aber auch andere Möglichkeiten. Solange du unter Win Codest ist das alles möglich. Nur wenn du auch die anderen Systeme unterstützen willst. Dann braucht es wohl einiges mer an Wissen. Interesant ist da auch das Speicher Managmend. 2 Task bedeuten nämlich unter Win. Das du vom einen Task nicht so einfach auf daten des anderen Task zugreifen kannst. Du must einige Regeln beachten. Es nützt auch nicht immer die Daten als Shared zu Allozieren. Je nach bedarft must du Piplines einrichten oder eine andere Trasfehr möglichkeit wählen. Im grossen und ganzen schwere Matherie. Fiel erfolg ... TFT |
||
TFT
https://www.sourcemagic.ch Monkey,HTML5,CSS3,W 10 64 Bit, 32 GB Ram, GTX Titan, W8 ist Müll !!!!!! |
![]() |
Silver_Knee |
![]() Antworten mit Zitat ![]() |
---|---|---|
hmm die idee ist ja grundlegend folgende: Ich kenne diesen HexEditor "HxD", der den Arbeitsspeicher jedes prozesses, so gut wie möglich darstellen kann.... Dort funkktionieren auch die handles... ich will dieses verhalten eigendlich nur in blitz nacharmen...
Sonst..... Für B+ ist ja alles kein PRoblem... CreateeProcess und dann über den Stream zu kommunizieren.. B3D sieht das halt etwas schwieriger aus... |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Bringt dir nix.
Die 2 grundlegend "blockendsten" dinge kannst du nicht von extern laden, punkt. Das sind: 1. Texturen: Weder DDS noch Mipmaps kannst du über den Stream verschicken, du kannst nur pixeldaten verschicken die auf der anderen Seite in eine leere textur geschrieben werden -> kannst auch gleich dort laden 2. Animierte B3D: kannst du prinzipiell garnicht transferieren, denn vertex - bone assignments existieren NUR in der Model file, die kannst du ohne grössere Hacks überhaupt nicht anrühren in Blitz3D |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
tft |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi ..
da wirst du aber an etlichen Ecken an Probleme stossen. Wie Dreamora schon schrieb. Wirst du über fiele Hacks und Struckturkentnisse dieses bewerkstelligen müssen. Das verwenden von Handlern ist da schon schwieriger. Dazu benötigst du ja auch den Struckturaufbau . Es gab hir zwar vor Jahren mal eine sehr vollständige Hack Liste. Davon existieren nur noch Bruchstücke. Aber ich denke wenn du fiel Zeit investierst sollte dir das gelingen. gruss TFT |
||
TFT
https://www.sourcemagic.ch Monkey,HTML5,CSS3,W 10 64 Bit, 32 GB Ram, GTX Titan, W8 ist Müll !!!!!! |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group