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

dx11

unregistriert

1

23.06.2011, 19:35

Lade Bildschirm

Hallo
Ich habe da ein Problem und zwar möchte ich ein Animierten Ladebildschirm beim laden anzeigen ( in DirectX 11)
Ich habe gedacht das ich dsa mit einer Windows Form mache ( Verwende visual c++ 2008) das geht auch so weit:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
Kap03_01::lo1^ frmlo = gcnew Kap03_01::lo1(); //lo1 ist die form
frmlo->Show(); //Zeige ladebildschirm
DXUTInit( true, true, NULL ); 
DXUTSetCursorSettings( true, true ); 
DXUTCreateWindow( L"Test" ); 
DXUTCreateDevice( D3D_FEATURE_LEVEL_10_0, true, 1366, 768 );
frmlo->Close(); //Schließe ladebildschirm
DXUTMainLoop();


Der Ladebildschirm also die form wird angezeigt allerdings wird auch nichts gerendert werder buttons noch labels nur das hintergrindbild deswegen is mit animation nichts!
also wie mache ich das das meine objekte geladen werden alles initialsisiert wird und gleichzeitig ein animierter ladebildschirm kommt?
Bitte Hilfe
Vielen Dank

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

2

23.06.2011, 20:15

1) Wenn Du etwas gerendertes sehen willst, dann musst Du auch etwas rendern.
2) Wenn Du rendern und laden parallel willst, dann wirst Du Threads brauchen.
3) Bitte versuch aus reiner Höflichkeit uns gegenüber etwas mehr auf Rechtschreibung und Satzzeichen zu achten, es liest sich echt schlecht.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

3

23.06.2011, 20:34

Ist doch klar, du ruftst doch auch nirgendwo Application::Run() auf!? Abgesehen davon: Ich hoffe dir ist klar dass dieses WinForms Zeug kein C++ ist sondern C++/CLI, also .NET. Vor diesem Hintergrund ist mir nicht so ganz klar was du eigentlich genau willst. Willst du jetzt Direct3D mit C++ verwenden!? Dann vergiss den WinForms und .NET Kram und verwend C++. Oder willst du mit .NET Fensterchen zusammenklicken!? Dann verwend C# denn C++/CLI ist dafür absolut ungeeignet.

dx11

unregistriert

4

23.06.2011, 22:05

@BlueCobold
1)Windows Forms werden von Windows gerendert
2)Ich weis nur nicht wie ich das mit den threads mache
3)Ja :D Ich bin aber nicht der Beste in Deutsch

@dot
Mir ist klar das Forms C++/CLI sind.
Apllication::Run();
wird aufgerufen in lo.cpp.
Ich möchte eine Windows Forms Anwendung im DirectX11 Projekt benutzen also wird alles Konvertiert in CLR/CLI.
Beim CreateDevice(...) werden ja alle Objekte geladen, dies dauert ja ein bissl.
Deswegen möchte ich die Form anzeigen ( frmlo->Show(); ) während DirectX lädt, also vor Create Device, Form aufrufen und nach CreateDevice Form wieder schliessen.
Nur wenn ich das machen will, wird die Form von Windows nicht mehr gerendert und die Form friert für 5 sek ein dann ist alles geladen und das DirectX Fenster wird angezeigt.
Deswegen möchte ich die Form in einem extra Thread starten damit die Form nicht einfriert und auch buttons etc in der Form gerendert werden.

Falls noch fragen an der (doofen :D ) erklärung dran sind, ich beantworte sie!
MFG
und Danke

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

5

23.06.2011, 22:18

Apllication::Run();
wird aufgerufen in lo.cpp.

Gut, dann wird es eben an der falschen Stelle aufgerufen. Solange kein Application::Run() läuft laufen auch deine WinForms nicht.

Ich möchte eine Windows Forms Anwendung im DirectX11 Projekt benutzen also wird alles Konvertiert in CLR/CLI.

Du willst wirklich nur für einen Ladebildschirm .NET verwenden!? Jetzt im Ernst!?

Nur wenn ich das machen will, wird die Form von Windows nicht mehr gerendert und die Form friert für 5 sek ein dann ist alles geladen und das DirectX Fenster wird angezeigt.

Ist doch klar: Weil Application::Run() noch nicht aufgerufen wurde.

Deswegen möchte ich die Form in einem extra Thread starten damit die Form nicht einfriert und auch buttons etc in der Form gerendert werden.

Ok, d.h. dein Problem ist jetzt eigentlich wie du einen Thread erzeugst oder wie!? Dazu sollte es doch millionen Anleitungen im Internet geben!?

dx11

unregistriert

6

23.06.2011, 22:27

Das mit den Threads is mein Problem richtig es gibt im Internet Lösungen aber keine wie ich ein Form im anderen Thread starte!
Ich habe nicht nur eine Form, Menü Optionen is auch noch, auserdem kenn ich mich mit GUI DirectX nicht so aus.
Aber alles was ich wissen will ist wie ich eine Form im anderen Thread starte!
Und Applicatio::Run(); wird doch aufgerufen wenn ich die Form aufrufe, oder?
Wenn nicht würde ich gern wissen wo ich es einsetzen muss.

Danke

Edit: Du hattest Recht Applicatio::Run() wird nicht in der lo.cpp aufgerufen *peinlich* sry aber wo muss ich es jetz einsetzen

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

7

23.06.2011, 22:35

Ich habe nicht nur eine Form, Menü Optionen is auch noch, auserdem kenn ich mich mit GUI DirectX nicht so aus.

Na dann solltest du dich vielleicht mal damit beschäftigen. Wenn du ein Spiel schreiben willst wirst du deine GUI wohl kaum mit WinForms machen können und wenn du eine Anwendung mit komplexem GUI schreiben willst wirst du das kaum mit C++ machen und noch weniger mit C++/CLI.

Aber alles was ich wissen will ist wie ich eine Form im anderen Thread starte!

Na indem du sie dort erzeugst und Application::Run() dort aufrufst!?

dx11

unregistriert

8

23.06.2011, 23:01

ok das geht soweit allerdings bleibt das Programm stehen nach Application::Run();
Die Form wird jetzt gerendert nur dann muss ich die form manuell schliessen damit es weiter geht:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
Kap03_01::lo1^ frmlo = gcnew Kap03_01::lo1();
    frmlo->Show();
    Application::Run(frmlo); //Hier stoppt es
    DXUTInit( true, true, NULL ); // Parse the command line, show msgboxes on error, no extra command line params
    DXUTSetCursorSettings( true, true ); // Show the cursor and clip it when in full screen
    DXUTCreateWindow( L"Anonymus ONE" ); //Setze fenster name
    DXUTCreateDevice( D3D_FEATURE_LEVEL_10_0, true, 1366, 768 );
    ShowCursor(true); //Cursor "Point.cur" Anzeigen (Mittelpunkt)
    frmlo->Close();
    DXUTMainLoop(); // Starte haupt Schleife RenderLopp() etc

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

9

23.06.2011, 23:07

ok das geht soweit allerdings bleibt das Programm stehen nach Application::Run();

Äh ja klar, darum sollst du das ja in einem eigenen Thread machen!?

dx11

unregistriert

10

23.06.2011, 23:10

Nur das Applicatio::Run(); ?

C-/C++-Quelltext

1
CreateThread(0,0,(LPTHREAD_START_ROUTINE)Thread_name,0,0,0);


und in Thread_name nur Applicatio::Run()?

Ich steh iwie aufm Schlauch!
Aber Danke für deine Mühe :D

Werbeanzeige