Fullscreen mit Directx 8
-
Tach Leute
Ich hoffe einer von euch kann mir weiterhelfen - ich weiß nicht wie ich Fullscreen Modus hinbekomme und habe im Internet Anwendungen/Beispiele für DX9 gefunden - ich bräuchte aber aufjedenfall DX8.
Ich habe ne directx KlasseHeader(direct.h):
# ifndef directx_h # define directx_h # include "main.h" # include "globalvar.h" // Beinhaltet die DirectX Initialisierung und die Pointer auf die Devices class CDirectX { public: LPDIRECT3D8 d3d; LPDIRECT3DDEVICE8 device; D3DPRESENT_PARAMETERS d3dpp; int init(); // Initialisiert das Device void adjust(int breite, int hoehe); // Passt Breite und Höhe an void SetUmgebungsLicht(unsigned int licht); }; # endif
cpp(directx.cpp)
# include "directx.h" # include <stdlib.h> # include <stdio.h> # include <iostream.h> int CDirectX::init() { D3DDISPLAYMODE d3ddm; D3DDEVTYPE devtype; D3DCAPS8 caps; d3d = Direct3DCreate8( D3D_SDK_VERSION); if( !d3d) return 0; if( d3d->GetAdapterDisplayMode( D3DADAPTER_DEFAULT, &d3ddm) < 0) return 0; ZeroMemory( &d3dpp, sizeof(d3dpp)); d3dpp.Windowed = true; d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; d3dpp.EnableAutoDepthStencil = TRUE; d3dpp.AutoDepthStencilFormat = D3DFMT_D16; d3dpp.BackBufferFormat = d3ddm.Format; if( d3d->GetDeviceCaps( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, &caps) < 0) { // MessageBox( game_window, "Kein HAL-Device - das wird langsam!", "Balance-Meldung", MB_OK | MB_ICONWARNING | MB_SETFOREGROUND); devtype = D3DDEVTYPE_REF; } else devtype = D3DDEVTYPE_HAL; if( d3d->CreateDevice( D3DADAPTER_DEFAULT, devtype, game_window, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &device) < 0) return 0; device->SetRenderState(D3DRS_LIGHTING, TRUE); device->SetRenderState(D3DRS_SHADEMODE, D3DSHADE_GOURAUD); return 1; } void CDirectX::adjust( int breite, int hoehe) { D3DXMATRIX proj; d3dpp.BackBufferWidth = breite; d3dpp.BackBufferHeight = hoehe; device->Reset( &d3dpp); device->SetRenderState( D3DRS_ZENABLE, D3DZB_TRUE); SetUmgebungsLicht(255); D3DXMatrixPerspectiveFovLH( &proj, D3DX_PI/4, ((float)breite)/hoehe, 1.0f, 100.0f*METER); device->SetTransform( D3DTS_PROJECTION, &proj); device->SetRenderState(D3DRS_LIGHTING, TRUE); device->SetRenderState(D3DRS_SHADEMODE, D3DSHADE_GOURAUD); } void CDirectX::SetUmgebungsLicht(unsigned int licht) { device->SetRenderState( D3DRS_AMBIENT, D3DCOLOR_XRGB(licht, licht, licht)); }
In dem Buch wo ich das her habe wird nicht auf Fullscreen eingegangen - ich habe mal versucht d3dpp.Windowed = false zusetzen kommt aber ne Speicherfehler
Ich hoffe einer von euch kann mir helfen und danke schon mal im voraus !
Gruß Soulfly
-
Was kommt denn für ein Speicherfehler ? Haste mal mit dem Debbuger geschaut ?
http://www.flipcode.com/tutorials/tut_dx82d.shtml
-
Bitte lesen. Danke.
Bye, TGGC (Reden wie die Großen)
-
Erstmal solltest du das ZeroMemory wegmachen und alle Member von D3DPRESENT_PARAMETERS per Hand setzen. Was hier einzutragen ist, steht in der DirectX Doku ausführlich. Ohne näher nachzuschauen kann ich sagen, dass im Fullscreen BackBufferWidth und BackBufferHeight auf jeden Fall gültige Werte haben müssen.
Zudem solltest du die Rückgabewerte der D3D Funktionen anders abfragen. Die geben bei Erfolg normalerweise D3D_OK zurück. Besser noch du machst das so:HRESULT hr = d3d->CreateDevice(... if (!SUCCEEDED(hr)) { // Fehler } else { // alles ok }
-
@ groovemaster2002
@ 0x0000FJa danke
euch beiden für die HILFE - hat geklappt - habe mal die Links von euch getestet
und BackBufferWidth und BackBufferHeight mit gültigen Werten belegt.Gruß Soulfly