 |
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
phlip Mini JLI'ler

Anmeldedatum: 27.08.2005 Beiträge: 39
Medaillen: Keine
|
Verfasst am: 18.11.2005, 19:13 Titel: DirectX in Childfenster |
|
|
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 |
|
 |
fast hawk Senior JLI'ler

Anmeldedatum: 15.07.2005 Beiträge: 237 Wohnort: Freiburg Medaillen: Keine
|
Verfasst am: 18.11.2005, 19:41 Titel: |
|
|
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 |
|
 |
Patrick Dark JLI Master

Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
|
Nach oben |
|
 |
phlip Mini JLI'ler

Anmeldedatum: 27.08.2005 Beiträge: 39
Medaillen: Keine
|
Verfasst am: 19.11.2005, 13:04 Titel: |
|
|
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 |
|
 |
phlip Mini JLI'ler

Anmeldedatum: 27.08.2005 Beiträge: 39
Medaillen: Keine
|
Verfasst am: 19.11.2005, 16:02 Titel: |
|
|
Ok. Ich hab den Fehler gefunden:
Code: | while (Msg.message != WM_QUIT)
{
if(GetMessage(&Msg, NULL, 0, 0))
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
} |
mit PeekMessage gehts
Danke für Hilfe bzw. Tipp |
|
Nach oben |
|
 |
|
|
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
|