#c #direct3d
#c #direct3d
Вопрос:
Когда я использую d3ddev->Present()
для копирования обратного буфера на экран, ничего не произошло (возвращаемое значение равно D3D_OK
). Когда я создаю окно без заголовка, например WS_POPUP
, оно работает. Есть ли кто-нибудь, кто может сказать мне, почему? Спасибо. и извините за плохой английский.
win10, Direct3D9
//Game update function
void Game_Run(HWND hwnd)
{
//make sure the Direct3D device is valid
if (!d3ddev) return;
//start rendering
if (SUCCEEDED(d3ddev->BeginScene())) {
//fill the surface with random color
int r = rand() % 255;
int g = rand() % 255;
int b = rand() % 255;
d3ddev->ColorFill(surface, NULL, D3DCOLOR_XRGB(r, g, b));
//copy the surface to the backbuffer
RECT rect;
rect.left = rand() % SCREENW / 2;
rect.right = rect.left rand() % SCREENW / 2;
rect.top = rand() % SCREENH / 2;
rect.bottom = rect.top rand() % SCREENH / 2;
d3ddev->StretchRect(surface, NULL, backbuffer, amp;rect, D3DTEXF_NONE);
//stop rendering
d3ddev->EndScene();
//copy the back buffer to the screen
d3ddev->Present(NULL, NULL, NULL, NULL);
}
//check for escape key
if (KEY_DOWN(VK_ESCAPE))
PostMessage(hwnd, WM_DESTROY, 0, 0);
}
...
//create a new window
HWND hwnd = CreateWindow(
"MainWindowClass",
APPTITLE.c_str(),
WS_POPUP, //it works
//WS_OVERLAPPEDWINDOW, it doesn't work
CW_USEDEFAULT, CW_USEDEFAULT,
SCREENW, SCREENH,
NULL, NULL, hInstance, NULL);
Комментарии:
1. Не уверен, почему вы вообще используете устаревший Direct3D9, но вы можете найти несколько рабочих «базовых циклов рендеринга» для DirectX 11 здесь .
2. Спасибо за ваш ответ. Я прочитаю несколько книг о DirectX 11.@ChuckWalbourn