Я недавно начал использовать Direct2D, обнаружил какое-то странное поведение при изменении размера окна: использование памяти skyrocket, а в конце я получаю некоторую ошибку «из памяти». Вот схема моего кода:Распространение памяти Direct2D при изменении размеров окон
// Nothing special in there
int wWinMain(...)
{
// Window creation, ressource allocation, message loop.
}
Тогда WindowProc
// Nothing special in there either
case WM_PAINT :
if(myObject->paint()) {
ValidateRect(myObject->rect());
return 0;
}
else return DefWindowProc(...);
default :
return DefWindowProc(...);
Для метода краски я просто использовать
// Check the ressources
checkRessources();
mRenderTarget->BeginDraw();
mRenderTarget->EndDraw();
// Check for errors
checkForError();
Там нет ничего другого, чем это. Все прекрасно компилируется, окно перемещается. Затем я беру ручку изменения размера и начинаю трясти ее, что заставляет меня постоянно изменять размер и перекрашивать мое окно. После того, как в 20-е годы он встряхнул его, начнется злоупотребление памятью (некоторые 200Mo используются каждую секунду), пока он не достигнет полной емкости моего компьютерного ОЗУ ...
Я искал происхождение такого поведения и выяснил, что он была вызвана исключительно
BeginDraw();
EndDraw();
часть. Я удалил всю сделанную картину, остановил обработку всех сообщений, но WM_PAINT. Еще ... (И я тоже отлаживал).
Затем я проверил другой код, а именно Direct2D Hello World Example. Встряхнул ручку изменения размера окна. И получить точно такое же злоупотребление памятью ....
So. Я не знаю, какие причины. Это ошибка Direct2D? Мой драйвер графической карты? Кто-нибудь испытывает одни и те же явления?
Нет, когда я удалить их я не получаю эту проблему больше. – Fred
OK. Ну, в любом случае, я не получаю эту проблему на своем ПК, поэтому вы можете попробовать ее на другом ПК, чтобы убедиться, что это что-то с вашим кодом или что-то странное с ПК, на котором вы сейчас тестируете его. – user1610015
Я попробую. Но во всяком случае, у меня нет ни малейшей причины, почему это происходит. Мой код ничего не делает (т. Е. Не выделяет ресурсы, не выполняет никакой покраски и не обрабатывает никаких оконных сообщений в «WindowProc»). Может ли источник CreateHwndRenderTarget быть источником этого? (Я использую значения по умолчанию). – Fred