2 votes

Les images Swapchain sont redimensionnées plutôt que coupées avec MoltenVK

J'essaie d'implémenter la mise à l'échelle de la fenêtre avec un viewport dynamique dans MoltenVK, en créant des images swapchain surdimensionnées et en appelant vkCmdSetViewport. Mais toute l'image de la chaîne d'échange est mise à l'échelle pour s'adapter à la fenêtre, au lieu d'être maintenue à une échelle de 100% et d'être coupée. Où cette mise à l'échelle se produit-elle, et comment puis-je la désactiver ?

Si cela peut aider, j'utilise les caisses Rust. winit pour créer une fenêtre et raw-window-metal pour créer une couche de métal.

2voto

Nicol Bolas Points 133791

Vulkan possède l'extension VK_KHR_display_swapchain, qui permet de spécifier un rectangle source et un rectangle de destination pour présenter une image swapchain. Si vous ne disposez pas de cette extension, vous ne pouvez pas contrôler la mise à l'échelle.

C'est une nouvelle extension et c'est pas disponible à l'heure actuelle . Ainsi, dans la plupart des cas, vous n'avez que le comportement par défaut de Vulkan : l'image entière de la chaîne d'échange sera copiée sur la surface entière, avec une mise à l'échelle si les deux ne correspondent pas.

Le mieux que vous puissiez faire est une solution manuelle. Vous pouvez effectivement annuler la mise à l'échelle en ajustant vos matrices de projection de manière à annuler la mise à l'échelle effectuée par le moteur d'affichage. En d'autres termes, si votre surface a la moitié de la largeur et de la hauteur de l'image swapchain, multipliez l'échelle X et Y de vos matrices de projection par un facteur 2.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X