JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.phpMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

DirectX in Childfenster

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
phlip
Mini JLI'ler



Anmeldedatum: 27.08.2005
Beiträge: 39

Medaillen: Keine

BeitragVerfasst am: 18.11.2005, 19:13    Titel: DirectX in Childfenster Antworten mit Zitat

Moin.
Ich brauch mal wieder eure Hilfe.

Ich will DirectX in einem Childfenster laufen lassen.
So werden die Fenster erstellt:
Code:
WNDCLASS WndClass = {
      CS_HREDRAW | CS_VREDRAW,
      WndProc,
      0,
      0,
      hInstance,
      LoadIcon(NULL, IDI_WINLOGO),
      LoadCursor(NULL, IDC_ARROW),
      (HBRUSH)GetStockObject(BLACK_BRUSH),
      NULL,
      "WindowClass"
   };

   RegisterClass(&WndClass);

   WNDCLASS ChldClass = {
      CS_HREDRAW | CS_VREDRAW,
      WndProc,
      0,
      0,
      hInstance,
      LoadIcon(NULL, IDI_WINLOGO),
      LoadCursor(NULL, IDC_ARROW),
      (HBRUSH)GetStockObject(WHITE_BRUSH),
      NULL,
      "ChildClass"
   };

   RegisterClass(&ChldClass);

   hWnd = CreateWindow("WindowClass", "NoNa Wars Tools : Map Editor",
      WS_OVERLAPPEDWINDOW | WS_VISIBLE,
      CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
      NULL,NULL, hInstance, NULL) ;

   
   Wnd_DX = CreateWindow("ChildClass",NULL,
      WS_CHILD | WS_VISIBLE,
      0, 0, 200, 200,
      hWnd, (HMENU)FIRST_CHILD, hInstance, NULL);

Kurze Zwischenfrage: Wie heißt der Standard HBRUSH hbrBackground?
Und so wird D3D init.
Code:
bool D3DInit()
{
   if(!(D3D = Direct3DCreate9(D3D_SDK_VERSION)))
   {
      MessageBox(NULL, "Can't create D3D object.", "Error", MB_OK);
      return false;
   }

   D3DPRESENT_PARAMETERS PParams = { 0 };

   PParams.SwapEffect = D3DSWAPEFFECT_DISCARD;
   PParams.hDeviceWindow = Wnd_DX;
   PParams.Windowed = TRUE;

   /*PParams.BackBufferWidth = 800;
   PParams.BackBufferHeight = 600;
   PParams.BackBufferFormat = D3DFMT_A8R8G8B8;*/


   if(FAILED(D3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, Wnd_DX,
      D3DCREATE_HARDWARE_VERTEXPROCESSING, &PParams, &Device)))
   {
      MessageBox(NULL, "Can't create Device.", "Error", MB_OK);
      return false;
   }
   
   return true;   
}

Bei den D3DPRESENT_PARAMETERS bin ich mir nicht sicher, ob ich die BackBuffer sachen angeben muss.

Code:
while (Msg.message != WM_QUIT)
    {
      if(GetMessage(&Msg, NULL, 0, 0))
      {
         TranslateMessage(&Msg);
         DispatchMessage(&Msg);
      }
      else
      {
         if(D3D_OK != Device->Clear(0, 0, D3DCLEAR_TARGET, 0x000000FF, 0, 0))
         {
            MessageBox(NULL, "Clear", "Error", MB_OK);
            return 0;   
         }
         if(D3D_OK != Device->BeginScene())
         {
            MessageBox(NULL, "BeginScene", "Error", MB_OK);
            return 0;   
         }
         if(D3D_OK != Device->EndScene())
         {
            MessageBox(NULL, "EndScene", "Error", MB_OK);
            return 0;   
         }
         HRESULT hr;
         hr = Device->Present(0, 0, 0, 0);
         switch(hr)
         {
            case D3DERR_DEVICELOST:
                  MessageBox(NULL, "Present 1.", "Error", MB_OK);   
               break;
            case D3DERR_DRIVERINTERNALERROR:
                  MessageBox(NULL, "Present 2.", "Error", MB_OK);   
               break;
            case D3DERR_INVALIDCALL:
                  MessageBox(NULL, "Present 3.", "Error", MB_OK);   
               break;
         }

      }
    }


Hab schon ein par mal was verändert. Das hat aber nichts gebracht.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
fast hawk
Senior JLI'ler



Anmeldedatum: 15.07.2005
Beiträge: 237
Wohnort: Freiburg
Medaillen: Keine

BeitragVerfasst am: 18.11.2005, 19:41    Titel: Antworten mit Zitat

Hi
Das mit dem Bachbuffer brauchst du auf jeden Fall.
Könntest du vielleicht auch noch genauer sagen was nicht geht.
Da ist ein bisschen schwer den Fehler finden wenn man nicht weiß an was es fehlt(genau!!!!).

mfg fast hawk
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 18.11.2005, 22:50    Titel: Antworten mit Zitat

Frage: Was willst Du genau machen? Einen Editor? Dann such mal nach SwapChains
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
phlip
Mini JLI'ler



Anmeldedatum: 27.08.2005
Beiträge: 39

Medaillen: Keine

BeitragVerfasst am: 19.11.2005, 13:04    Titel: Antworten mit Zitat

So ich hab das jetzt mit den SwapChains ausprobiert:
Code:

HWND hWnd;
HWND Wnd_DX;
LPDIRECT3D9 D3D = NULL;
LPDIRECT3DDEVICE9 Device = NULL;
LPDIRECT3DSWAPCHAIN9 SwapChain = NULL;
LPDIRECT3DSURFACE9 BackBuffer = NULL;

   D3D = Direct3DCreate9(D3D_SDK_VERSION);

   D3DDISPLAYMODE DisplayMode;

    D3D->GetAdapterDisplayMode( D3DADAPTER_DEFAULT, &DisplayMode );

   D3DPRESENT_PARAMETERS PParams;
   ZeroMemory(&PParams,sizeof(PParams));

   PParams.SwapEffect = D3DSWAPEFFECT_DISCARD;
   PParams.hDeviceWindow = Wnd_DX;
   PParams.Windowed = TRUE;
   PParams.MultiSampleType  = D3DMULTISAMPLE_NONE;

   /*RECT ClientRect;
   GetClientRect(Wnd_DX, &ClientRect);
   PParams.BackBufferWidth = ClientRect.right;
   PParams.BackBufferHeight = ClientRect.bottom;*/
   
   PParams.BackBufferFormat = DisplayMode.Format;


   D3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, Wnd_DX,
      D3DCREATE_HARDWARE_VERTEXPROCESSING, &PParams, &Device);
   
   Device->GetSwapChain(0, &SwapChain);
   

   while (Msg.message != WM_QUIT)
    {
      if(GetMessage(&Msg, NULL, 0, 0))
      {
         TranslateMessage(&Msg);
         DispatchMessage(&Msg);
      }
      else
      {
         SwapChain->GetBackBuffer( 0, D3DBACKBUFFER_TYPE_MONO, &BackBuffer);

         Device->SetRenderTarget(0, BackBuffer);
         
         Device->Clear(0, 0, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0, 0, 255), 0, 0);
         Device->BeginScene();
         Device->EndScene();
         SwapChain->Present(0, 0, Wnd_DX, 0, 0);
      }
    }

   

Der "Fehler" ist das ich eigentlich will, dass das Childfenster mit Blauer Farbe gefüllt wird. Es geht aber nicht. Ihr werdet bestimmt lachen, weil es ein wieder ein billiger Anfängerfehler ist.

Also ich will damit einen Editor machen. Soll ich die Buttons, Eingabefelder, usw. mit CreateWindow machen oder doch lieber mit Resource (Menü, Dialoge usw.). Ihr habt damit bestimmt schon Erfahrungen.

Und noch ne Frage: Bei PParams.hDeviceWindow hab ich das Childfenster angegeben. Richtig? oder muss da das Hauptfenster rein.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
phlip
Mini JLI'ler



Anmeldedatum: 27.08.2005
Beiträge: 39

Medaillen: Keine

BeitragVerfasst am: 19.11.2005, 16:02    Titel: Antworten mit Zitat

Ok. Ich hab den Fehler gefunden:
Code:
while (Msg.message != WM_QUIT)
    {
      if(GetMessage(&Msg, NULL, 0, 0))
      {
         TranslateMessage(&Msg);
         DispatchMessage(&Msg);
      }

Arrow mit PeekMessage gehts

Danke für Hilfe bzw. Tipp
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum