0
Hi, ich bins nochmal. Ich hab das Problem bis jetzt nicht lösen können, habe es aber stark eingeschränkt.
Also:
Die Geschwindigkeitseinbrüche tauchen grundsätzlich nur im Fenster-Modus auf.
Es hängt von der Größe des (Windows-)Fensters ab. Nicht aber von der Auflösung, in der gerendert wird.
D.h. ich kann beim Erstellen des Device zB. die Backbuffergröße auf 32x32 stellen und es ruckelt trotzdem.
Wenn ich das Fenster aber ganz klein mache, zB 300x200, läuft es immer schnell, auch wenn der Backbuffer 2000x2000 groß ist.
Es muss also irgendwie mit dem Kopiervorgang des Backbuffers auf das Fenster zusammenhängen. Ich kann aber nicht entdecken, was ich falsch gemacht habe.
Ihr könnt ja mal, wenn ihr Lust habt, meinen Code anschauen. Vielleicht fällt Euch ja was auf.
/////////////////////////////
////// ERSTELLEN DES FENSTERS
HWND FensterErstellen( HINSTANCE this_inst, WORD breite, WORD hoehe, bool bVollbild )
{
HWND win; // Main window handle
WNDCLASS wc; // Window class
ZeroMemory( &wc, sizeof( WNDCLASS ) );
wc.lpfnWndProc = WindowProc;
wc.hInstance = this_inst;
wc.hIcon = NULL;
wc.hCursor = LoadCursor(this_inst, IDC_ARROW);
wc.hbrBackground = (HBRUSH)COLOR_BTNSHADOW;
GetStockObject(BLACK_BRUSH);
wc.lpszMenuName = NULL;
wc.lpszClassName = "bl2";
if (!RegisterClass(&wc))
return false;
DWORD style;
if( bVollbild )
{
style = WS_POPUP;
}
else
{
style = WS_CAPTION|WS_SYSMENU;
}
// Create the window
win = CreateWindow(
"bl2",
"M.E.S.H.",
style, // style
0, // init. x pos
0,
breite,
hoehe,
NULL, // parent window
NULL, // menu handle
this_inst, // program handle
NULL); // create parms
ShowWindow(win, SW_SHOW);
return win;
}
/////////////////////////////////////////////////////
/////// ERZEUGEN DES DEVICE
D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory( &d3dpp, sizeof(d3dpp) );
d3dpp.BackBufferCount = 1;
d3dpp.Windowed = 1;
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dpp.BackBufferFormat = D3DFMT_X8R8G8B8;
d3dpp.EnableAutoDepthStencil = TRUE;
d3dpp.AutoDepthStencilFormat = D3DFMT_D24S8;
d3dpp.MultiSampleType = D3DMULTISAMPLE_NONE;
d3dpp.BackBufferWidth = 2000;
d3dpp.BackBufferHeight = 2000;
if( FAILED( pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,
D3DCREATE_HARDWARE_VERTEXPROCESSING,
&d3dpp, &g_pDev ) ) )
{
return false;
}
Bin echt am Ende mit meinem Latein. Danke fürs Durchlesen.