# Efficiently blit texture rotated by 90° to renderer with SDL 2

Let's say I have a 1024x768 SDL_Window, an SDL_Renderer bound to that window and a 768x1024 SDL_Texture into which I do my rendering. How can I render that texture such that it is rotated by 90° to fit the screen exactly (1:1 mapping between texels and pixels)?

I tried using the SDL_RenderCopyEx() function but I couldn't make it work properly with non-square window and texture, probably because it doesn't support scaling.

I found the solution (or a solution):

If W is the width of the window (e.g. 1024) and H is its height (e.g. 768), and if the texture has width H and height W, then

SDL_Rect dstrect;
dstrect.x = (W - H) / 2 - 1;
dstrect.y = (H - W) / 2;
dstrect.w = H;
dstrect.h = W;
SDL_RenderCopyEx(renderer, texture, nullptr, &dstrect, 90, nullptr, SDL_FLIP_NONE);


does the trick.

• This works indeed and produced pixel-perfect result here (not tested all combinations even/odd). Thanks for sharing! User should just beware that W and H are width and height of destination/new/rotated texture, not source, that's why text counterintuitively says "(source) texture has width H and height W". Aug 26 '18 at 7:20
• I am trying to use this method to display iOS screens for our rPlay desktop application, but failed to get it to work correctly. Basically it's 886 x 1920 texture, but needs to display as 1920 x 886 (90 degree rotation). If I still use 886 x 1920 window, rotation works very nicely, but of course it gets cut off. However, once I resize the window first to 1920 * 886, then rotation does not work correctly, only a small portion is displayed. Feb 18 '19 at 19:38
• I figured it out, need to change width and height inside SDL_RenderSetLogicalSize() accordingly, then works perfectly for the rotation Feb 19 '19 at 3:01