sdlSetRenderLogicalPresentation function

bool sdlSetRenderLogicalPresentation(
  1. Pointer<SdlRenderer> renderer,
  2. int w,
  3. int h,
  4. int mode,
)

Set a device independent resolution and presentation mode for rendering.

This function sets the width and height of the logical rendering output. The renderer will act as if the window is always the requested dimensions, scaling to the actual window resolution as necessary.

This can be useful for games that expect a fixed size, but would like to scale the output to whatever is available, regardless of how a user resizes a window, or if the display is high DPI.

You can disable logical coordinates by setting the mode to SDL_LOGICAL_PRESENTATION_DISABLED, and in that case you get the full pixel resolution of the output window; it is safe to toggle logical presentation during the rendering of a frame: perhaps most of the rendering is done to specific dimensions but to make fonts look sharp, the app turns off logical presentation while drawing text.

Letterboxing will only happen if logical presentation is enabled during SDL_RenderPresent; be sure to reenable it first if you were using it.

You can convert coordinates in an event into rendering coordinates using SDL_ConvertEventToRenderCoordinates().

\param renderer the rendering context. \param w the width of the logical resolution. \param h the height of the logical resolution. \param mode the presentation mode used. \returns true on success or false on failure; call SDL_GetError() for more information.

\threadsafety This function should only be called on the main thread.

\since This function is available since SDL 3.1.3.

\sa SDL_ConvertEventToRenderCoordinates \sa SDL_GetRenderLogicalPresentation \sa SDL_GetRenderLogicalPresentationRect

extern SDL_DECLSPEC bool SDLCALL SDL_SetRenderLogicalPresentation(SDL_Renderer *renderer, int w, int h, SDL_RendererLogicalPresentation mode)

Implementation

bool sdlSetRenderLogicalPresentation(
    Pointer<SdlRenderer> renderer, int w, int h, int mode) {
  final sdlSetRenderLogicalPresentationLookupFunction = libSdl3.lookupFunction<
      Uint8 Function(
          Pointer<SdlRenderer> renderer, Int32 w, Int32 h, Int32 mode),
      int Function(Pointer<SdlRenderer> renderer, int w, int h,
          int mode)>('SDL_SetRenderLogicalPresentation');
  return sdlSetRenderLogicalPresentationLookupFunction(renderer, w, h, mode) ==
      1;
}