Я создаю компонент Delphi для встраивания поверхности рендеринга SDL в форму VCL. Он работает просто отлично, пока форма отображается на экране в момент создания поверхности SDL. В противном случае он не сможет создавать текстуры рендеринга.
Я проследил в код SDL и в результате вызвал следующий вызов функции, который завершился ошибкой (возвращает NULL):
data->hbm = CreateDIBSection(renderdata->memory_hdc, bmi, DIB_RGB_COLORS, &data->pixels, NULL, 0);
HDC является допустимым дескриптором контекста рисования, принадлежащего элементу управления, который имеет свой собственный дескриптор окна HWND, который был правильно настроен. Но когда элемент управления создается вне экрана, что обычно происходит в Delphi (все формы с их элементами управления создаются в скрытом состоянии до тех пор, пока не пришло время их отображать), вызов CreateDIBSection завершится ошибкой, пока элемент управления не станет фактически видимым. *
Кроме того, если он создан на экране, то скрытый и повторно показанный (например, если он находится на листе вкладок и я переключаю вкладки), любые текстуры, которые я создаю, в процессе этого блокируются.
Это сводит меня с ума. Кто-нибудь знает, что происходит и как я могу обойти это?