Я борюсь с изменением размера и полноэкранным режимом моего проекта. Это то, над чем я работаю Мандельброт в пиксельном шейдере , а здесь GIT https://github.com/ShamanLKG/Mandelbrot
Приложение вылетает при нажатии Alt + Enter и Я не понимаю, почему.
case WM_SIZE:
{
int width = LOWORD(lParam); // Macro to get the low-order word.
int height = HIWORD(lParam); // Macro to get the high-order word.
pThis->D3D->OnResize(width, height);
pThis->D3D = std::shared_ptr<Direct3D>(new Direct3D(hWnd, width, height));
pThis->D2D = std::shared_ptr<Direct2D>(new Direct2D(hWnd, pThis->D3D));
break;
}
Я заново создал объекты Direct3d и Direct2 при изменении размера, чтобы решить проблемы с навигацией и отрегулировать разрешение окна. Но пока невозможно заставить работать полный экран. Полный экран работает без воссоздания объектов D3D и D2D, но затем я застрял с исходным разрешением, и навигация не работает должным образом. Я использую функцию OnResize () из MSDN (https://docs.microsoft.com/en-us/windows/win32/direct3ddxgi/d3d10-graphics-programming-guide-dxgi#handling - изменение размера окна ). Я попытался передать аргумент BOOL в InitD3D, чтобы сообщить программе, является ли swapchain полноэкранным или нет из swapchain-> GetFullScreenState, но это не помогло.
Навигация работает до тех пор, пока размер окна не изменяется тогда это не точно. Регулировка yDelta с изменением соотношения экрана помогает, но только при изменении ширины окна. Он снова становится нестабильным при изменении высоты окна. В качестве обходного пути я воссоздал объект D3D и D2D, чтобы начать с параметров fre sh и иметь функцию навигации. Но в результате полный экран теперь падает.
void Direct3D::CenterScreen(int xPos, int yPos)
{
//float ratio = startRatio / currentRatio;
int xDelta = xPos - width / 2;
int yDelta = (yPos - height / 2); //could divide by ratio to capture window width change
realStart += (float)xDelta / (float)width * 2 * mandelWidth;
imagStart += (float)yDelta / (float)height * 2 * mandelHeight;
}
Есть какие-нибудь подсказки, как мне решить эти проблемы? Большое спасибо заранее.