Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

29.04.2005, 16:27

jit-compiler für renderstate-switches

hi,

ich hatte da schon vor längerem eine idee die ich gerne mal umsetzen möchte.
nämlich dachte ich mir das eine interpreter-einheit für material-definitionen
in form eines skripts vielleicht nicht die schnellste lösung ist.
also so was hier:

Quellcode

1
2
3
4
5
6
material "M1"{
     ALPHA_BLEND 0;
     COLOROP1     ADD;
     COLORARG1   TEXTURE;
     COLORARG2   DIFFUSE;
}


das is jetzt nur ein willkürliches beispiel wie sowas theoretisch aussieht.

meine idee war das ich eine art jit-compiler entwickle, der solche script-files
zu einer kleinen funktion compiliert also aus obrigen praktisch
eine compilierte function der art hier macht:

C-/C++-Quelltext

1
2
3
4
5
void renderstateswitch1(){
   meinDevice->SetRenderState(....);
   meinDevice->SetTextureStageState(...);
   //usw.

}


natl. könnte das auch communication mit einem shader beinhalten
also SetShaderConstant-Aufrufe is ja egal.

die grundidee war, das der compiler zur laufzeit wenn ein neues script geladen
wird, die adresse des devices bekommt und dann maschinencode
entsprechend einer obrigen c-function generiert.
was mich im prinzip davon abhält so was zu implementieren,
ist mein fehlendes wissen über compiler-bau.
vor allem dies hier:
wie ruf ich in asm eine member-funktion einer klasse auf?
und: könnte es problematisch werden, da IDirect3D-Objekte alles
COM-Interface sind?
ist hier etwas besonderes zu beachten?

fragen über fragen.

ich hoffe ich konnte meine idee einigermaßen gut rüberbringen
und eine produktive diskussion anregen.

ich hoffe natl. das solche renderstate-switches schneller sind
als sachen der form

Quellcode

1
if (...)then else;


aber selbst wenn kein signifikanter performance-gewinn daraus
resultiert, es wär auf jeden fall interessant es zu implementieren.

greetz 23h

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

29.04.2005, 16:38

vielleicht solltest du dir mal state blöcke, effect files, HLSL, Cg, etc. reinziehen ;)

3

29.04.2005, 16:41

wie soll mir das helfen wenns nich grade opensource is?
is nicht was ich suche.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

4

29.04.2005, 17:01

was suchst du dann?
was du oben beschreibst hört sich für mich ziemlich nach effect dateien bzw. zumindest State Blöcken an...

5

29.04.2005, 17:07

das sind doch nur andere schon implementierte lösungen die in die
gl. richtung gehn.
ich will eigentlich eher infos wie ich so einen mini-compiler
für exakt diesen zweck bauen kann. bzw. infors zu methoden-aufruf in asm
und COM in asm.

natl. könnte ich auch fx-framework oder sateblocks nehmen aber
ich dachte ich hätte klar gemacht dass ich vor allem
der neugier und erfahrung halber gerne etwas eigenes
entwickeln möchte.
zudem hab ich dann den vorteil das ich api-unabhängig
das ganze auch für ogl bauen kann was mit stateblocks und fx nich geht!

btw. ich dachte cg is ausschließlich für shader ????

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

6

29.04.2005, 17:27

afaik gibts CgFX, das is dann nicht nur für shader...

7

30.04.2005, 16:47

so ich hab jetzt ne vorläufige lösung gefunden:

ich bau mir einfach eine funktion die den aufruf der
memberfunctions vom device ausführt etwa so:

C-/C++-Quelltext

1
2
3
4
5
void setRS(IDirect3DDevice9 *device, D3DRENDERSTATETYPE state, DWORD value);

void setTSS(IDirect3DDevice9 *device, DWORD stage, D3DTEXTURESTAGESTATETYPE state, DWORD value);

//usw.


und kann dann einfach den funktionaufruf in asm
generieren und den dann mit einem eigenen mini-assembler
in maschinencode wandeln.
klingt doch toll ^^

werd mich mal ran setzen und berichten wies läuft.

bye 23h

Werbeanzeige