Je construis un composant Delphi pour incorporer une surface de rendu SDL sur un formulaire VCL. Cela fonctionne très bien tant que le formulaire est à l'écran au moment où la surface SDL est créée. Sinon, il n'est pas capable de créer des textures de rendu.Pourquoi CreateDIBSection() échoue-t-il lorsque la fenêtre est hors-écran?
Je retracée dans le code SDL et a fini avec l'appel de fonction suivante, qui échoue (retourne NULL):
data->hbm = CreateDIBSection(renderdata->memory_hdc, bmi, DIB_RGB_COLORS, &data->pixels, NULL, 0);
Le HDC est une poignée valide dans le contexte de dessin appartenant à un contrôle qui a son propre poignée de fenêtre HWND, qui a été correctement configuré. Mais lorsque le contrôle est créé en dehors de l'écran, ce qui se produit généralement dans Delphi (tous les formulaires, avec leurs contrôles, sont créés dans un état caché jusqu'au moment de les afficher), l'appel CreateDIBSection échouera jusqu'à ce que le contrôle soit visible.
De même, si elle est créée à l'écran, puis masquée et ré-affichée (si elle est sur une feuille d'onglet et que je change d'onglet, par exemple), toutes les textures que je crée sont masquées pendant ce processus.
Cela me rend fou. Quelqu'un sait ce qui se passe et comment je peux contourner cela?
Non. DestroyWnd n'est jamais appelé. –