2017-09-04 1 views
3

Ich kenne den Unterschied zwischen SDL_TEXTUREACCESS_STATIC und SDL_TEXTUREACCESS_TARGET. Ich schreibe ein SDL-Backend für ein Spiel, dessen plattformunabhängiger Kern dem plattformabhängigen Textur-Allokator nicht mitteilt, ob die Textur einfach auf den Bildschirm geblendet wird oder ob die Textur auch selbst als Ziel verwendet wird.Gibt es Strafen bei der Zuweisung von SDL-Zieltexturen, die niemals als Ziel verwendet werden?

So meines SDL-Backend der Textur allocator hat SDL_TEXTUREACCESS_TARGET statt SDL_TEXTUREACCESS_STATIC für jede Textur zu verwenden, um es zuzuordnet, weil es nicht bei Zuteilung Zeit nicht wissen, ob die Textur nur Blitted wird, oder wenn es auch als Ziel verwendet wird. In der Praxis wird es dann jedoch viele Texturen geben, die als SDL_TEXTUREACCESS_TARGET zugewiesen sind, obwohl sie niemals tatsächlich als Ziele verwendet werden, aber sie werden nur auf den Bildschirm geblendet, ohne jemals ihren Inhalt modifiziert zu haben.

Gibt es eine Strafe dafür? Angenommen, eine Textur wird nie selbst als Ziel verwendet, wird jedoch weiterhin unter Verwendung von SDL_TEXTUREACCESS_TARGET zugewiesen. Ist das mit großen Strafen verbunden? Wenn dies der Fall ist, könnte ich natürlich den plattformunabhängigen Kern neu schreiben, um dem plattformabhängigen Teil zu sagen, ob eine Textur tatsächlich als Ziel verwendet wird oder nicht, aber da dies ein großes Unterfangen ist, möchte ich zuerst fragen, ob oder nicht Es gibt tatsächliche Strafen, wenn man einfach SDL_TEXTUREACCESS_TARGET für jede Textur verwendet, egal ob sie als Ziel verwendet wird oder nicht.

Antwort

2

Ich fragte auf der SDL Mailing-Liste und wurde gesagt, dass auf OpenGL gibt es keine größeren Nachteile, aber auf Direct3D (das ist der Standardtreiber unter Windows), gibt es das Problem, dass Direct3D Zieltexturen bei der Fenstergröße ändert oder wenn man den Fensteranzeigemodus wechselt (Vollbild, Fenster usw.) Also müssen Apps darauf vorbereitet sein, die SDL_RENDER_TARGETS_RESET zu handhaben und den Inhalt von Zieltexturen zu aktualisieren, wenn der Inhalt über Fenstergrößenänderungen usw. hinweg erhalten bleiben muss. Also zumindest auf Direct3D Es gibt eine große Strafe, wenn Sie ein Ziel anstelle von statischen Texturen verwenden.

Verwandte Themen