Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Christian Rousselle Site Admin
Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 29.08.2003, 09:15 Titel: Engine/System Kopplung |
|
|
Hallo,
ich bin gerade dabei ein paar Demos zu schreiben. Ich würde gerne meine Engine möglichst von außern konfigurierbar machen.
Momentan denke ich daran, zwei getrennte Applikationen zu schreiben. Einmal die Engine und einmal die Konfigurationsapplikation. Die Konfigurationsapplikation soll ein Dialogfenster sein, in dem man Einstellungen usw. vornehmen kann. Mein Problem ist momentan die Form der Kommunikation zwischen beiden. Man könnte die generelle Kommunikation über Messages realisieren.
Das Problem ist aber viel eher, wie die Engine ihren Status (Einstellungen, Rendermode, Texturnamen usw.) nach außen bekannt und konfigurierbar macht. Ideen?
Christian |
|
Nach oben |
|
|
X-FILE Super JLI'ler
Anmeldedatum: 12.07.2003 Beiträge: 349
Medaillen: Keine
|
Verfasst am: 29.08.2003, 10:18 Titel: |
|
|
Hallo Christian,
ich hoffe das hilft dir, weil ich nicht sicher bin, ob ich richtig verstanden habe, was du willst. Aber ich hab jetzt erst aehnliches gemacht.
Ich hab das bei mir so gemacht:
Ich hab eine MFC-Anwendung geschrieben, die alle fuer meine "Engine" relevanten Daten einstellen kann (Adapter, Farbtiefe, Schatten, Wieviele Billboardstages usw, usw...). Das schreibt das Ding in eine (noch nicht binaere) Textdatei. Wird die Engine dann aufgerufen, ruft diese die verschiedenen Funktionen auf und belegt die Variablen damit.
Zu anfangs tand eben eine Texttdatei, die sozusagen Vorkonfigueriert war von der Engine. D.h. so wie die Engine Initial aufgerufen wird. Die wird dann neu geschrieben wenn die Anwendung aufgerufen wird.
Aber du willst wohl die Parameter waehrend der Laufzeit aendern, oder? Das geht ja nur mit MFC-Anwendunge denke ich, so wie im SDK beschrieben?
Kommt eben drauf an, wie ich dich jetzt richtig verstanden habe |
|
Nach oben |
|
|
Christian Rousselle Site Admin
Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 29.08.2003, 10:23 Titel: |
|
|
Hallo,
du hast es richtig verstanden. Ich will die Eigenschaften zur Laufzeit ändern. Das es geht ist mir klar, ich suche momentan nach einem eleganten Weg.
Christian |
|
Nach oben |
|
|
X-FILE Super JLI'ler
Anmeldedatum: 12.07.2003 Beiträge: 349
Medaillen: Keine
|
Verfasst am: 29.08.2003, 11:01 Titel: |
|
|
hi,
ok sorry . Dann wars ned sonderlich hilfreich. Ne da kann ich auch nix zu sagen |
|
Nach oben |
|
|
Hazel JLI MVP
Alter: 39 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 29.08.2003, 11:35 Titel: |
|
|
Hmm... ob es sowas wie Memory Sharing gibt, weiß ich nicht. Mir fallen aber 2 Möglichkeiten ein:
- Über die Nachrichtenschleife
- Übers Netzwerk _________________ *click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
|
|
Nach oben |
|
|
Christian Rousselle Site Admin
Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 29.08.2003, 12:17 Titel: |
|
|
Hallo,
die Kommunikation ist mir klar, ich probiere es gerade per OLE/COM. Das ist nicht das Problem, das Problem ist viel mehr, wie man es elegant macht.
Z.B. gibt es eine Terrain-Klasse. Hier würde ich gerne Eingenschaften wie Texturen, Heightmap usw. außerdem gibt es Statechanges (z.B. für Alpha, Filter usw.). Das alles sollte konfigurierbar sein. Bei dem Fenster/Rendertarget sollte man Dinge wie Größe, Auflösung usw. konfigurieren können.
Christian |
|
Nach oben |
|
|
Hazel JLI MVP
Alter: 39 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 29.08.2003, 12:33 Titel: |
|
|
Achso.
Ich würde das mit einem Message Daemon als Knotenpunkt lösen. Jedes Objekt, dass an der Kommunikation teilnehmen will implementiert ein Interface und wird somit Client des Daemons. Der Daemon verteilt beim Registrieren IDs und speichert die Clients in einer Liste. Desweiteren muss der Daemon Nachrichten entgegen nehmen und sie an den richten Empfänger weiterleiten, der die Nachricht dann über eine Methode verarbeitet. Als Nachrichten-Struktur würde ich einen Varianttypen nehmen:
Code: |
struct SMessage
{
int type;
union
{
...
}
};
|
[Nachtrag]
Anstelle des Variant bietet sich auch boost::any an. ;) _________________ *click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
|
|
Nach oben |
|
|
Hazel JLI MVP
Alter: 39 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
|
Nach oben |
|
|
Christian Rousselle Site Admin
Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 31.08.2003, 00:35 Titel: |
|
|
doch, ich bastel gerade an einer Lösung. |
|
Nach oben |
|
|
Christian Rousselle Site Admin
Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 05.09.2003, 06:37 Titel: |
|
|
Guten Morgen,
hier mal ein Versuch die Windows-Initialisierung zu kapseln. Wer Lust/Zeit hat, bitte mal runterladen und gucken, ob es Sinn macht, schön ist, was man verbessern könnte usw.. Besonders bei der Klasse CWindow und RegisterMessageHandlers() bin ich mir nicht sicher, ob es besser klassisch, mit einer überschriebenen MessageHandler-Methode und switch-Statement, schöner wäre.
SimpleWinApp
Christian
Zuletzt bearbeitet von Christian Rousselle am 05.09.2003, 10:51, insgesamt einmal bearbeitet |
|
Nach oben |
|
|
X-FILE Super JLI'ler
Anmeldedatum: 12.07.2003 Beiträge: 349
Medaillen: Keine
|
Verfasst am: 05.09.2003, 10:46 Titel: |
|
|
Hallo,
nur um dich darauf aufmerksam zu machen - der Link funktioniert nicht. |
|
Nach oben |
|
|
Christian Rousselle Site Admin
Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 05.09.2003, 10:52 Titel: |
|
|
Mist und ich habe mich schon gewundert, warum niemand antwortet. Vielen Dank. |
|
Nach oben |
|
|
Hazel JLI MVP
Alter: 39 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 05.09.2003, 11:42 Titel: |
|
|
Meiner Meinung nach eine sehr saubere und elegante Lösung. Das Messagehandlersystem gefällt mir... ich werd auf jeden Fall mal mit rumspielen. :)
Nur einen kleinen Kritikpunkt hätte ich da und zwar das "using namespace std;" in den Headern. Dadurch zwingt man Benutzern diesen Namespace auf. Ich würde in den Headern immer std::bla schreiben und "using std::bla" in den CPP Dateien benutzen. _________________ *click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
|
|
Nach oben |
|
|
AFE-GmdG JLI MVP
Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 05.09.2003, 11:57 Titel: |
|
|
Ich hab mir den Quelltext zwar noch nicht angeschaut, aber meines erachtens läßt sich sowas sehr gut über eine definierte Pluginschnittstelle lösen. Das zweite, externe Programm wird als Plugin für das Hauptprogramm programmiert und muß eine (mehrere) Funktion(en) bereitstellen, die vom Hauptprogramm aus aufgerufen werden können. _________________
CPP: | float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;} |
|
|
Nach oben |
|
|
Christian Rousselle Site Admin
Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 05.09.2003, 12:03 Titel: |
|
|
Guter Hinweis, danke. Bitte sag bescheid, wenn dir nochwas auffällt.
Christian |
|
Nach oben |
|
|
|