2015-06-21 09:33:46 -06:00
/*
Simple DirectMedia Layer
2024-01-01 14:15:26 -07:00
Copyright ( C ) 1997 - 2024 Sam Lantinga < slouken @ libsdl . org >
2015-06-21 09:33:46 -06:00
This software is provided ' as - is ' , without any express or implied
warranty . In no event will the authors be held liable for any damages
arising from the use of this software .
Permission is granted to anyone to use this software for any purpose ,
including commercial applications , and to alter it and redistribute it
freely , subject to the following restrictions :
1. The origin of this software must not be misrepresented ; you must not
claim that you wrote the original software . If you use this software
in a product , an acknowledgment in the product documentation would be
appreciated but is not required .
2. Altered source versions must be plainly marked as such , and must not be
misrepresented as being the original software .
3. This notice may not be removed or altered from any source distribution .
*/
/**
* \ file SDL_render . h
*
2023-11-06 08:26:06 -07:00
* Header file for SDL 2 D rendering functions .
2015-06-21 09:33:46 -06:00
*
* This API supports the following features :
* * single pixel points
* * single pixel lines
* * filled rectangles
* * texture images
*
* The primitives may be drawn in opaque , blended , or additive modes .
*
* The texture images may be drawn in opaque , blended , or additive modes .
* They can have an additional color tint or alpha modulation applied to
* them , and may also be stretched with linear interpolation .
*
* This API is designed to accelerate simple 2 D operations . You may
* want more functionality such as polygons and particle effects and
* in that case you should use SDL ' s OpenGL / Direct3D support or one
* of the many good 3 D engines .
*
* These functions must be called from the main thread .
2023-09-07 08:44:09 -06:00
* See this bug for details : https : //github.com/libsdl-org/SDL/issues/986
2015-06-21 09:33:46 -06:00
*/
2016-11-20 22:34:54 -07:00
# ifndef SDL_render_h_
# define SDL_render_h_
2015-06-21 09:33:46 -06:00
2022-11-26 21:43:38 -07:00
# include <SDL3/SDL_stdinc.h>
2023-02-13 18:50:29 -07:00
# include <SDL3/SDL_events.h>
2023-10-11 17:59:51 -06:00
# include <SDL3/SDL_properties.h>
2022-11-26 21:43:38 -07:00
# include <SDL3/SDL_rect.h>
# include <SDL3/SDL_video.h>
2015-06-21 09:33:46 -06:00
2022-12-22 09:38:59 -07:00
# include <SDL3/SDL_begin_code.h>
2015-06-21 09:33:46 -06:00
/* Set up for C function definitions, even when using C++ */
# ifdef __cplusplus
extern " C " {
# endif
/**
2021-03-21 12:18:39 -06:00
* Flags used when creating a rendering context
2015-06-21 09:33:46 -06:00
*/
typedef enum
{
SDL_RENDERER_SOFTWARE = 0x00000001 , /**< The renderer is a software fallback */
SDL_RENDERER_ACCELERATED = 0x00000002 , /**< The renderer uses hardware
acceleration */
2023-06-27 22:52:33 -06:00
SDL_RENDERER_PRESENTVSYNC = 0x00000004 /**< Present is synchronized
2015-06-21 09:33:46 -06:00
with the refresh rate */
} SDL_RendererFlags ;
/**
2021-03-21 12:18:39 -06:00
* Information on the capabilities of a render driver or context .
2015-06-21 09:33:46 -06:00
*/
typedef struct SDL_RendererInfo
{
const char * name ; /**< The name of the renderer */
Uint32 flags ; /**< Supported ::SDL_RendererFlags */
Uint32 num_texture_formats ; /**< The number of available texture formats */
Uint32 texture_formats [ 16 ] ; /**< The available texture formats */
int max_texture_width ; /**< The maximum texture width */
int max_texture_height ; /**< The maximum texture height */
} SDL_RendererInfo ;
2021-04-01 01:55:00 -06:00
/**
2021-08-18 15:54:37 -06:00
* Vertex structure
2021-04-01 01:55:00 -06:00
*/
typedef struct SDL_Vertex
{
SDL_FPoint position ; /**< Vertex position, in SDL_Renderer coordinates */
SDL_Color color ; /**< Vertex color */
SDL_FPoint tex_coord ; /**< Normalized texture coordinates, if needed */
} SDL_Vertex ;
2015-06-21 09:33:46 -06:00
/**
2021-03-21 12:18:39 -06:00
* The access pattern allowed for a texture .
2015-06-21 09:33:46 -06:00
*/
typedef enum
{
SDL_TEXTUREACCESS_STATIC , /**< Changes rarely, not lockable */
SDL_TEXTUREACCESS_STREAMING , /**< Changes frequently, lockable */
SDL_TEXTUREACCESS_TARGET /**< Texture can be used as a render target */
} SDL_TextureAccess ;
2023-02-03 13:25:46 -07:00
/**
* How the logical size is mapped to the output
*/
typedef enum
{
SDL_LOGICAL_PRESENTATION_DISABLED , /**< There is no logical size in effect */
SDL_LOGICAL_PRESENTATION_STRETCH , /**< The rendered content is stretched to the output resolution */
SDL_LOGICAL_PRESENTATION_LETTERBOX , /**< The rendered content is fit to the largest dimension and the other dimension is letterboxed with black bars */
SDL_LOGICAL_PRESENTATION_OVERSCAN , /**< The rendered content is fit to the smallest dimension and the other dimension extends beyond the output bounds */
2023-06-27 22:52:33 -06:00
SDL_LOGICAL_PRESENTATION_INTEGER_SCALE /**< The rendered content is scaled up by integer multiples to fit the output resolution */
2023-02-03 13:25:46 -07:00
} SDL_RendererLogicalPresentation ;
2015-06-21 09:33:46 -06:00
/**
2021-03-21 12:18:39 -06:00
* A structure representing rendering state
2015-06-21 09:33:46 -06:00
*/
struct SDL_Renderer ;
typedef struct SDL_Renderer SDL_Renderer ;
/**
2021-03-21 12:18:39 -06:00
* An efficient driver - specific representation of pixel data
2015-06-21 09:33:46 -06:00
*/
struct SDL_Texture ;
typedef struct SDL_Texture SDL_Texture ;
/* Function prototypes */
/**
2021-03-21 12:18:39 -06:00
* Get the number of 2 D rendering drivers available for the current display .
2015-06-21 09:33:46 -06:00
*
2021-03-21 12:18:39 -06:00
* A render driver is a set of code that handles rendering and texture
* management on a particular display . Normally there is only one , but some
* drivers may have several available with different capabilities .
2015-06-21 09:33:46 -06:00
*
2021-03-21 12:18:39 -06:00
* There may be none if SDL was compiled without render support .
*
* \ returns a number > = 0 on success or a negative error code on failure ; call
* SDL_GetError ( ) for more information .
*
2022-11-22 15:40:14 -07:00
* \ since This function is available since SDL 3.0 .0 .
2021-03-21 12:18:39 -06:00
*
* \ sa SDL_CreateRenderer
2022-12-13 21:26:49 -07:00
* \ sa SDL_GetRenderDriver
2015-06-21 09:33:46 -06:00
*/
extern DECLSPEC int SDLCALL SDL_GetNumRenderDrivers ( void ) ;
/**
2022-12-13 21:26:49 -07:00
* Use this function to get the name of a built in 2 D rendering driver .
2015-06-21 09:33:46 -06:00
*
2022-12-13 21:26:49 -07:00
* The list of rendering drivers is given in the order that they are normally
* initialized by default ; the drivers that seem more reasonable to choose
* first ( as far as the SDL developers believe ) are earlier in the list .
*
* The names of drivers are all simple , low - ASCII identifiers , like " opengl " ,
* " direct3d12 " or " metal " . These never have Unicode characters , and are not
* meant to be proper names .
*
* The returned value points to a static , read - only string ; do not modify or
* free it !
*
* \ param index the index of the rendering driver ; the value ranges from 0 to
* SDL_GetNumRenderDrivers ( ) - 1
* \ returns the name of the rendering driver at the requested index , or NULL
* if an invalid index was specified .
2015-06-21 09:33:46 -06:00
*
2022-11-22 15:40:14 -07:00
* \ since This function is available since SDL 3.0 .0 .
2021-10-26 19:36:05 -06:00
*
2021-03-21 12:18:39 -06:00
* \ sa SDL_GetNumRenderDrivers
2015-06-21 09:33:46 -06:00
*/
2022-12-13 21:26:49 -07:00
extern DECLSPEC const char * SDLCALL SDL_GetRenderDriver ( int index ) ;
2015-06-21 09:33:46 -06:00
/**
2021-03-21 12:18:39 -06:00
* Create a window and default renderer .
2015-06-21 09:33:46 -06:00
*
2021-03-21 12:18:39 -06:00
* \ param width the width of the window
* \ param height the height of the window
* \ param window_flags the flags used to create the window ( see
* SDL_CreateWindow ( ) )
* \ param window a pointer filled with the window , or NULL on error
* \ param renderer a pointer filled with the renderer , or NULL on error
2023-02-12 02:09:42 -07:00
* \ returns 0 on success or a negative error code on failure ; call
* SDL_GetError ( ) for more information .
2015-06-21 09:33:46 -06:00
*
2022-11-22 15:40:14 -07:00
* \ since This function is available since SDL 3.0 .0 .
2021-10-26 19:36:05 -06:00
*
2021-03-21 12:18:39 -06:00
* \ sa SDL_CreateRenderer
* \ sa SDL_CreateWindow
2015-06-21 09:33:46 -06:00
*/
2022-12-31 12:19:32 -07:00
extern DECLSPEC int SDLCALL SDL_CreateWindowAndRenderer ( int width , int height , Uint32 window_flags , SDL_Window * * window , SDL_Renderer * * renderer ) ;
2015-06-21 09:33:46 -06:00
/**
2021-03-21 12:18:39 -06:00
* Create a 2 D rendering context for a window .
2015-06-21 09:33:46 -06:00
*
2023-01-25 10:58:29 -07:00
* If you want a specific renderer , you can specify its name here . A list of
* available renderers can be obtained by calling SDL_GetRenderDriver multiple
* times , with indices from 0 to SDL_GetNumRenderDrivers ( ) - 1. If you don ' t
2023-11-13 13:13:20 -07:00
* need a specific renderer , specify NULL and SDL will attempt to choose the
2023-01-25 10:58:29 -07:00
* best option for you , based on what is available on the user ' s system .
2022-12-13 21:26:49 -07:00
*
2023-05-16 17:29:52 -06:00
* By default the rendering size matches the window size in pixels , but you
2023-05-17 13:59:14 -06:00
* can call SDL_SetRenderLogicalPresentation ( ) to change the content size and
* scaling options .
2023-02-03 13:25:46 -07:00
*
2021-03-21 12:18:39 -06:00
* \ param window the window where rendering is displayed
2022-12-13 21:26:49 -07:00
* \ param name the name of the rendering driver to initialize , or NULL to
* initialize the first one supporting the requested flags
2021-03-21 12:18:39 -06:00
* \ param flags 0 , or one or more SDL_RendererFlags OR ' d together
* \ returns a valid rendering context or NULL if there was an error ; call
* SDL_GetError ( ) for more information .
2015-06-21 09:33:46 -06:00
*
2022-11-22 15:40:14 -07:00
* \ since This function is available since SDL 3.0 .0 .
2021-10-26 19:36:05 -06:00
*
2023-11-13 13:13:20 -07:00
* \ sa SDL_CreateRendererWithProperties
2021-03-21 12:18:39 -06:00
* \ sa SDL_CreateSoftwareRenderer
* \ sa SDL_DestroyRenderer
* \ sa SDL_GetNumRenderDrivers
2022-12-13 21:26:49 -07:00
* \ sa SDL_GetRenderDriver
2021-03-21 12:18:39 -06:00
* \ sa SDL_GetRendererInfo
2015-06-21 09:33:46 -06:00
*/
2023-11-13 13:13:20 -07:00
extern DECLSPEC SDL_Renderer * SDLCALL SDL_CreateRenderer ( SDL_Window * window , const char * name , Uint32 flags ) ;
/**
* Create a 2 D rendering context for a window , with the specified properties .
*
* These are the supported properties :
*
2024-01-08 10:34:23 -07:00
* - ` SDL_PROPERTY_RENDERER_CREATE_WINDOW_POINTER ` : the window where rendering
* is displayed
* - ` SDL_PROPERTY_RENDERER_CREATE_SURFACE_POINTER ` : the surface where
* rendering is displayed , if you want a software renderer without a window
* - ` SDL_PROPERTY_RENDERER_CREATE_NAME_STRING ` : the name of the rendering
* driver to use , if a specific one is desired
* - ` SDL_PROPERTY_RENDERER_CREATE_PRESENT_VSYNC_BOOLEAN ` : true if you want
* present synchronized with the refresh rate
2024-01-07 18:02:25 -07:00
*
* \ param props the properties to use
* \ returns a valid rendering context or NULL if there was an error ; call
* SDL_GetError ( ) for more information .
*
* \ since This function is available since SDL 3.0 .0 .
*
* \ sa SDL_CreateRenderer
* \ sa SDL_CreateSoftwareRenderer
* \ sa SDL_DestroyRenderer
* \ sa SDL_GetRendererInfo
*/
2023-11-13 13:13:20 -07:00
extern DECLSPEC SDL_Renderer * SDLCALL SDL_CreateRendererWithProperties ( SDL_PropertiesID props ) ;
2015-06-21 09:33:46 -06:00
2024-01-08 10:13:18 -07:00
# define SDL_PROPERTY_RENDERER_CREATE_WINDOW_POINTER "window"
# define SDL_PROPERTY_RENDERER_CREATE_SURFACE_POINTER "surface"
# define SDL_PROPERTY_RENDERER_CREATE_NAME_STRING "name"
# define SDL_PROPERTY_RENDERER_CREATE_PRESENT_VSYNC_BOOLEAN "present_vsync"
2015-06-21 09:33:46 -06:00
/**
2021-03-21 12:18:39 -06:00
* Create a 2 D software rendering context for a surface .
2015-06-21 09:33:46 -06:00
*
2021-03-21 12:18:39 -06:00
* Two other API which can be used to create SDL_Renderer :
* SDL_CreateRenderer ( ) and SDL_CreateWindowAndRenderer ( ) . These can _also_
* create a software renderer , but they are intended to be used with an
* SDL_Window as the final destination and not an SDL_Surface .
2015-06-21 09:33:46 -06:00
*
2021-03-21 12:18:39 -06:00
* \ param surface the SDL_Surface structure representing the surface where
* rendering is done
* \ returns a valid rendering context or NULL if there was an error ; call
* SDL_GetError ( ) for more information .
2015-06-21 09:33:46 -06:00
*
2022-11-22 15:40:14 -07:00
* \ since This function is available since SDL 3.0 .0 .
2021-10-26 19:36:05 -06:00
*
2021-03-21 12:18:39 -06:00
* \ sa SDL_CreateRenderer
* \ sa SDL_CreateWindowRenderer
* \ sa SDL_DestroyRenderer
2015-06-21 09:33:46 -06:00
*/
2022-12-31 12:19:32 -07:00
extern DECLSPEC SDL_Renderer * SDLCALL SDL_CreateSoftwareRenderer ( SDL_Surface * surface ) ;
2015-06-21 09:33:46 -06:00
/**
2021-03-21 12:18:39 -06:00
* Get the renderer associated with a window .
*
* \ param window the window to query
* \ returns the rendering context on success or NULL on failure ; call
* SDL_GetError ( ) for more information .
*
2022-11-22 15:40:14 -07:00
* \ since This function is available since SDL 3.0 .0 .
2021-10-26 19:36:05 -06:00
*
2021-03-21 12:18:39 -06:00
* \ sa SDL_CreateRenderer
2015-06-21 09:33:46 -06:00
*/
2022-12-31 12:19:32 -07:00
extern DECLSPEC SDL_Renderer * SDLCALL SDL_GetRenderer ( SDL_Window * window ) ;
2015-06-21 09:33:46 -06:00
2022-03-23 10:07:56 -06:00
/**
* Get the window associated with a renderer .
*
* \ param renderer the renderer to query
2022-03-23 10:09:05 -06:00
* \ returns the window on success or NULL on failure ; call SDL_GetError ( ) for
* more information .
*
2022-11-22 15:40:14 -07:00
* \ since This function is available since SDL 3.0 .0 .
2022-03-23 10:07:56 -06:00
*/
2022-12-31 12:19:32 -07:00
extern DECLSPEC SDL_Window * SDLCALL SDL_GetRenderWindow ( SDL_Renderer * renderer ) ;
2022-03-23 10:07:56 -06:00
2015-06-21 09:33:46 -06:00
/**
2021-03-21 12:18:39 -06:00
* Get information about a rendering context .
*
* \ param renderer the rendering context
* \ param info an SDL_RendererInfo structure filled with information about the
* current renderer
* \ returns 0 on success or a negative error code on failure ; call
* SDL_GetError ( ) for more information .
*
2022-11-22 15:40:14 -07:00
* \ since This function is available since SDL 3.0 .0 .
2021-10-26 19:36:05 -06:00
*
2021-03-21 12:18:39 -06:00
* \ sa SDL_CreateRenderer
2015-06-21 09:33:46 -06:00
*/
2022-12-31 12:19:32 -07:00
extern DECLSPEC int SDLCALL SDL_GetRendererInfo ( SDL_Renderer * renderer , SDL_RendererInfo * info ) ;
2015-06-21 09:33:46 -06:00
2023-10-11 17:59:51 -06:00
/**
* Get the properties associated with a renderer .
*
2023-11-13 13:13:20 -07:00
* The following read - only properties are provided by SDL :
2024-01-07 18:02:25 -07:00
*
2024-01-08 10:33:29 -07:00
* - ` SDL_PROPERTY_RENDERER_D3D9_DEVICE_POINTER ` : the IDirect3DDevice9
* associated with the renderer
2024-01-08 10:34:23 -07:00
* - ` SDL_PROPERTY_RENDERER_D3D11_DEVICE_POINTER ` : the ID3D11Device associated
* with the renderer
* - ` SDL_PROPERTY_RENDERER_D3D12_DEVICE_POINTER ` : the ID3D12Device associated
* with the renderer
2024-01-08 10:33:29 -07:00
* - ` SDL_PROPERTY_RENDERER_D3D12_COMMAND_QUEUE_POINTER ` : the
* ID3D12CommandQueue associated with the renderer
2024-01-08 10:16:19 -07:00
*
2024-01-07 18:02:25 -07:00
* \ param renderer the rendering context
* \ returns a valid property ID on success or 0 on failure ; call
* SDL_GetError ( ) for more information .
*
* \ since This function is available since SDL 3.0 .0 .
*
* \ sa SDL_GetProperty
* \ sa SDL_SetProperty
*/
2023-10-11 17:59:51 -06:00
extern DECLSPEC SDL_PropertiesID SDLCALL SDL_GetRendererProperties ( SDL_Renderer * renderer ) ;
2024-01-08 10:13:18 -07:00
# define SDL_PROPERTY_RENDERER_D3D9_DEVICE_POINTER "SDL.renderer.d3d9.device"
# define SDL_PROPERTY_RENDERER_D3D11_DEVICE_POINTER "SDL.renderer.d3d11.device"
# define SDL_PROPERTY_RENDERER_D3D12_DEVICE_POINTER "SDL.renderer.d3d12.device"
# define SDL_PROPERTY_RENDERER_D3D12_COMMAND_QUEUE_POINTER "SDL.renderer.d3d12.command_queue"
2015-06-21 09:33:46 -06:00
/**
2021-03-21 12:18:39 -06:00
* Get the output size in pixels of a rendering context .
*
2023-02-24 09:49:41 -07:00
* This returns the true output size in pixels , ignoring any render targets or
* logical size and presentation .
2023-02-03 13:25:46 -07:00
*
* \ param renderer the rendering context
* \ param w a pointer filled in with the width in pixels
* \ param h a pointer filled in with the height in pixels
* \ returns 0 on success or a negative error code on failure ; call
* SDL_GetError ( ) for more information .
*
* \ since This function is available since SDL 3.0 .0 .
*
* \ sa SDL_GetRenderer
*/
extern DECLSPEC int SDLCALL SDL_GetRenderOutputSize ( SDL_Renderer * renderer , int * w , int * h ) ;
/**
* Get the current output size in pixels of a rendering context .
*
2023-02-24 09:49:41 -07:00
* If a rendering target is active , this will return the size of the rendering
* target in pixels , otherwise if a logical size is set , it will return the
* logical size , otherwise it will return the value of
2023-02-03 13:25:46 -07:00
* SDL_GetRenderOutputSize ( ) .
2021-03-21 12:18:39 -06:00
*
* \ param renderer the rendering context
2023-02-03 13:25:46 -07:00
* \ param w a pointer filled in with the current width
* \ param h a pointer filled in with the current height
2021-03-21 12:18:39 -06:00
* \ returns 0 on success or a negative error code on failure ; call
* SDL_GetError ( ) for more information .
*
2022-11-22 15:40:14 -07:00
* \ since This function is available since SDL 3.0 .0 .
2021-03-21 12:18:39 -06:00
*
2023-02-03 13:25:46 -07:00
* \ sa SDL_GetRenderOutputSize
2021-03-21 12:18:39 -06:00
* \ sa SDL_GetRenderer
2015-06-21 09:33:46 -06:00
*/
2023-02-03 13:25:46 -07:00
extern DECLSPEC int SDLCALL SDL_GetCurrentRenderOutputSize ( SDL_Renderer * renderer , int * w , int * h ) ;
2015-06-21 09:33:46 -06:00
/**
2021-03-21 12:18:39 -06:00
* Create a texture for a rendering context .
2015-06-21 09:33:46 -06:00
*
2021-03-21 12:18:39 -06:00
* You can set the texture scaling method by setting
* ` SDL_HINT_RENDER_SCALE_QUALITY ` before creating the texture .
2015-06-21 09:33:46 -06:00
*
2021-03-21 12:18:39 -06:00
* \ param renderer the rendering context
* \ param format one of the enumerated values in SDL_PixelFormatEnum
* \ param access one of the enumerated values in SDL_TextureAccess
* \ param w the width of the texture in pixels
* \ param h the height of the texture in pixels
* \ returns a pointer to the created texture or NULL if no rendering context
* was active , the format was unsupported , or the width or height
* were out of range ; call SDL_GetError ( ) for more information .
2017-08-12 14:05:26 -06:00
*
2022-11-22 15:40:14 -07:00
* \ since This function is available since SDL 3.0 .0 .
2021-10-26 19:36:05 -06:00
*
2021-03-21 12:18:39 -06:00
* \ sa SDL_CreateTextureFromSurface
2023-11-13 13:13:20 -07:00
* \ sa SDL_CreateTextureWithProperties
2021-03-21 12:18:39 -06:00
* \ sa SDL_DestroyTexture
* \ sa SDL_QueryTexture
* \ sa SDL_UpdateTexture
2015-06-21 09:33:46 -06:00
*/
2022-12-31 12:19:32 -07:00
extern DECLSPEC SDL_Texture * SDLCALL SDL_CreateTexture ( SDL_Renderer * renderer , Uint32 format , int access , int w , int h ) ;
2015-06-21 09:33:46 -06:00
/**
2021-03-21 12:18:39 -06:00
* Create a texture from an existing surface .
2015-06-21 09:33:46 -06:00
*
2021-03-21 12:18:39 -06:00
* The surface is not modified or freed by this function .
2015-06-21 09:33:46 -06:00
*
2021-03-21 12:18:39 -06:00
* The SDL_TextureAccess hint for the created texture is
* ` SDL_TEXTUREACCESS_STATIC ` .
2015-06-21 09:33:46 -06:00
*
2021-03-21 12:18:39 -06:00
* The pixel format of the created texture may be different from the pixel
* format of the surface . Use SDL_QueryTexture ( ) to query the pixel format of
* the texture .
2015-06-21 09:33:46 -06:00
*
2021-03-21 12:18:39 -06:00
* \ param renderer the rendering context
* \ param surface the SDL_Surface structure containing pixel data used to fill
* the texture
* \ returns the created texture or NULL on failure ; call SDL_GetError ( ) for
* more information .
*
2022-11-22 15:40:14 -07:00
* \ since This function is available since SDL 3.0 .0 .
2021-10-26 19:36:05 -06:00
*
2021-03-21 12:18:39 -06:00
* \ sa SDL_CreateTexture
2023-11-13 13:13:20 -07:00
* \ sa SDL_CreateTextureWithProperties
2021-03-21 12:18:39 -06:00
* \ sa SDL_DestroyTexture
* \ sa SDL_QueryTexture
2015-06-21 09:33:46 -06:00
*/
2022-12-31 12:19:32 -07:00
extern DECLSPEC SDL_Texture * SDLCALL SDL_CreateTextureFromSurface ( SDL_Renderer * renderer , SDL_Surface * surface ) ;
2015-06-21 09:33:46 -06:00
2023-11-13 13:13:20 -07:00
/**
* Create a texture for a rendering context with the specified properties .
*
* These are the supported properties :
*
2024-01-08 10:34:23 -07:00
* - ` SDL_PROPERTY_TEXTURE_CREATE_FORMAT_NUMBER ` : one of the enumerated values
* in SDL_PixelFormatEnum , defaults to the best RGBA format for the renderer
* - ` SDL_PROPERTY_TEXTURE_CREATE_ACCESS_NUMBER ` : one of the enumerated values
* in SDL_TextureAccess , defaults to SDL_TEXTUREACCESS_STATIC
* - ` SDL_PROPERTY_TEXTURE_CREATE_WIDTH_NUMBER ` : the width of the texture in
* pixels , required
* - ` SDL_PROPERTY_TEXTURE_CREATE_HEIGHT_NUMBER ` : the height of the texture in
* pixels , required
2024-01-07 18:02:25 -07:00
*
* With the direct3d11 renderer :
*
2024-01-08 10:34:23 -07:00
* - ` SDL_PROPERTY_TEXTURE_CREATE_D3D11_TEXTURE_POINTER ` : the ID3D11Texture2D
* associated with the texture , if you want to wrap an existing texture .
* - ` SDL_PROPERTY_TEXTURE_CREATE_D3D11_TEXTURE_U_POINTER ` : the
* ID3D11Texture2D associated with the U plane of a YUV texture , if you want
* to wrap an existing texture .
* - ` SDL_PROPERTY_TEXTURE_CREATE_D3D11_TEXTURE_V_POINTER ` : the
* ID3D11Texture2D associated with the V plane of a YUV texture , if you want
* to wrap an existing texture .
2024-01-07 18:02:25 -07:00
*
* With the direct3d12 renderer :
*
2024-01-08 10:34:23 -07:00
* - ` SDL_PROPERTY_TEXTURE_CREATE_D3D12_TEXTURE_POINTER ` : the ID3D12Resource
* associated with the texture , if you want to wrap an existing texture .
* - ` SDL_PROPERTY_TEXTURE_CREATE_D3D12_TEXTURE_U_POINTER ` : the ID3D12Resource
* associated with the U plane of a YUV texture , if you want to wrap an
* existing texture .
* - ` SDL_PROPERTY_TEXTURE_CREATE_D3D12_TEXTURE_V_POINTER ` : the ID3D12Resource
* associated with the V plane of a YUV texture , if you want to wrap an
2024-01-08 10:16:19 -07:00
* existing texture .
2024-01-07 18:02:25 -07:00
*
* With the opengl renderer :
*
2024-01-08 10:34:23 -07:00
* - ` SDL_PROPERTY_TEXTURE_CREATE_OPENGL_TEXTURE_NUMBER ` : the GLuint texture
* associated with the texture , if you want to wrap an existing texture .
* - ` SDL_PROPERTY_TEXTURE_CREATE_OPENGL_TEXTURE_UV_NUMBER ` : the GLuint
* texture associated with the UV plane of an NV12 texture , if you want to
* wrap an existing texture .
* - ` SDL_PROPERTY_TEXTURE_CREATE_OPENGL_TEXTURE_U_NUMBER ` : the GLuint texture
* associated with the U plane of a YUV texture , if you want to wrap an
* existing texture .
* - ` SDL_PROPERTY_TEXTURE_CREATE_OPENGL_TEXTURE_V_NUMBER ` : the GLuint texture
* associated with the V plane of a YUV texture , if you want to wrap an
2024-01-08 10:16:19 -07:00
* existing texture .
2024-01-07 18:02:25 -07:00
*
* With the opengles2 renderer :
*
2024-01-08 10:34:23 -07:00
* - ` SDL_PROPERTY_TEXTURE_CREATE_OPENGLES2_TEXTURE_NUMBER ` : the GLuint
* texture associated with the texture , if you want to wrap an existing
* texture .
* - ` SDL_PROPERTY_TEXTURE_CREATE_OPENGLES2_TEXTURE_NUMBER ` : the GLuint
* texture associated with the texture , if you want to wrap an existing
* texture .
* - ` SDL_PROPERTY_TEXTURE_CREATE_OPENGLES2_TEXTURE_UV_NUMBER ` : the GLuint
* texture associated with the UV plane of an NV12 texture , if you want to
* wrap an existing texture .
* - ` SDL_PROPERTY_TEXTURE_CREATE_OPENGLES2_TEXTURE_U_NUMBER ` : the GLuint
* texture associated with the U plane of a YUV texture , if you want to wrap
* an existing texture .
* - ` SDL_PROPERTY_TEXTURE_CREATE_OPENGLES2_TEXTURE_V_NUMBER ` : the GLuint
* texture associated with the V plane of a YUV texture , if you want to wrap
* an existing texture .
2024-01-07 18:02:25 -07:00
*
* \ param renderer the rendering context
* \ param props the properties to use
* \ returns a pointer to the created texture or NULL if no rendering context
* was active , the format was unsupported , or the width or height
* were out of range ; call SDL_GetError ( ) for more information .
*
* \ since This function is available since SDL 3.0 .0 .
*
* \ sa SDL_CreateTextureFromSurface
* \ sa SDL_CreateTexture
* \ sa SDL_DestroyTexture
* \ sa SDL_QueryTexture
* \ sa SDL_UpdateTexture
*/
2023-11-13 13:13:20 -07:00
extern DECLSPEC SDL_Texture * SDLCALL SDL_CreateTextureWithProperties ( SDL_Renderer * renderer , SDL_PropertiesID props ) ;
2024-01-08 10:13:18 -07:00
# define SDL_PROPERTY_TEXTURE_CREATE_FORMAT_NUMBER "format"
# define SDL_PROPERTY_TEXTURE_CREATE_ACCESS_NUMBER "access"
# define SDL_PROPERTY_TEXTURE_CREATE_WIDTH_NUMBER "width"
# define SDL_PROPERTY_TEXTURE_CREATE_HEIGHT_NUMBER "height"
# define SDL_PROPERTY_TEXTURE_CREATE_D3D11_TEXTURE_POINTER "d3d11.texture"
# define SDL_PROPERTY_TEXTURE_CREATE_D3D11_TEXTURE_U_POINTER "d3d11.texture_u"
# define SDL_PROPERTY_TEXTURE_CREATE_D3D11_TEXTURE_V_POINTER "d3d11.texture_v"
# define SDL_PROPERTY_TEXTURE_CREATE_D3D12_TEXTURE_POINTER "d3d12.texture"
# define SDL_PROPERTY_TEXTURE_CREATE_D3D12_TEXTURE_U_POINTER "d3d12.texture_u"
# define SDL_PROPERTY_TEXTURE_CREATE_D3D12_TEXTURE_V_POINTER "d3d12.texture_v"
# define SDL_PROPERTY_TEXTURE_CREATE_OPENGL_TEXTURE_NUMBER "opengl.texture"
# define SDL_PROPERTY_TEXTURE_CREATE_OPENGL_TEXTURE_UV_NUMBER "opengl.texture_uv"
# define SDL_PROPERTY_TEXTURE_CREATE_OPENGL_TEXTURE_U_NUMBER "opengl.texture_u"
# define SDL_PROPERTY_TEXTURE_CREATE_OPENGL_TEXTURE_V_NUMBER "opengl.texture_v"
# define SDL_PROPERTY_TEXTURE_CREATE_OPENGLES2_TEXTURE_NUMBER "opengles2.texture"
# define SDL_PROPERTY_TEXTURE_CREATE_OPENGLES2_TEXTURE_NUMBER "opengles2.texture"
# define SDL_PROPERTY_TEXTURE_CREATE_OPENGLES2_TEXTURE_UV_NUMBER "opengles2.texture_uv"
# define SDL_PROPERTY_TEXTURE_CREATE_OPENGLES2_TEXTURE_U_NUMBER "opengles2.texture_u"
# define SDL_PROPERTY_TEXTURE_CREATE_OPENGLES2_TEXTURE_V_NUMBER "opengles2.texture_v"
2024-01-07 18:02:25 -07:00
/**
* Get the properties associated with a texture .
*
* The following read - only properties are provided by SDL :
*
* With the direct3d11 renderer :
*
2024-01-08 10:34:23 -07:00
* - ` SDL_PROPERTY_TEXTURE_D3D11_TEXTURE_POINTER ` : the ID3D11Texture2D
* associated with the texture
* - ` SDL_PROPERTY_TEXTURE_D3D11_TEXTURE_U_POINTER ` : the ID3D11Texture2D
* associated with the U plane of a YUV texture
* - ` SDL_PROPERTY_TEXTURE_D3D11_TEXTURE_V_POINTER ` : the ID3D11Texture2D
* associated with the V plane of a YUV texture
2024-01-07 18:02:25 -07:00
*
* With the direct3d12 renderer :
*
2024-01-08 10:34:23 -07:00
* - ` SDL_PROPERTY_TEXTURE_D3D12_TEXTURE_POINTER ` : the ID3D12Resource
* associated with the texture
* - ` SDL_PROPERTY_TEXTURE_D3D12_TEXTURE_U_POINTER ` : the ID3D12Resource
* associated with the U plane of a YUV texture
* - ` SDL_PROPERTY_TEXTURE_D3D12_TEXTURE_V_POINTER ` : the ID3D12Resource
* associated with the V plane of a YUV texture
2024-01-07 18:02:25 -07:00
*
* With the opengl renderer :
*
2024-01-08 10:34:23 -07:00
* - ` SDL_PROPERTY_TEXTURE_OPENGL_TEXTURE_NUMBER ` : the GLuint texture
* associated with the texture
* - ` SDL_PROPERTY_TEXTURE_OPENGL_TEXTURE_UV_NUMBER ` : the GLuint texture
* associated with the UV plane of an NV12 texture
* - ` SDL_PROPERTY_TEXTURE_OPENGL_TEXTURE_U_NUMBER ` : the GLuint texture
* associated with the U plane of a YUV texture
* - ` SDL_PROPERTY_TEXTURE_OPENGL_TEXTURE_V_NUMBER ` : the GLuint texture
* associated with the V plane of a YUV texture
2024-01-08 12:07:23 -07:00
* - ` SDL_PROPERTY_TEXTURE_OPENGL_TEXTURE_TARGET ` : the GLenum for the texture
* target ( ` GL_TEXTURE_2D ` , ` GL_TEXTURE_RECTANGLE_ARB ` , etc )
2024-01-08 10:34:23 -07:00
* - ` SDL_PROPERTY_TEXTURE_OPENGL_TEX_W_FLOAT ` : the texture coordinate width
* of the texture ( 0.0 - 1.0 )
* - ` SDL_PROPERTY_TEXTURE_OPENGL_TEX_H_FLOAT ` : the texture coordinate height
* of the texture ( 0.0 - 1.0 )
2024-01-07 18:02:25 -07:00
*
* With the opengles2 renderer :
*
2024-01-08 10:34:23 -07:00
* - ` SDL_PROPERTY_TEXTURE_OPENGLES2_TEXTURE_NUMBER ` : the GLuint texture
* associated with the texture
* - ` SDL_PROPERTY_TEXTURE_OPENGLES2_TEXTURE_UV_NUMBER ` : the GLuint texture
* associated with the UV plane of an NV12 texture
* - ` SDL_PROPERTY_TEXTURE_OPENGLES2_TEXTURE_U_NUMBER ` : the GLuint texture
* associated with the U plane of a YUV texture
* - ` SDL_PROPERTY_TEXTURE_OPENGLES2_TEXTURE_V_NUMBER ` : the GLuint texture
* associated with the V plane of a YUV texture
2024-01-08 12:10:31 -07:00
* - ` SDL_PROPERTY_TEXTURE_OPENGLES2_TEXTURE_TARGET ` : the GLenum for the
* texture target ( ` GL_TEXTURE_2D ` , ` GL_TEXTURE_EXTERNAL_OES ` , etc )
2024-01-07 18:02:25 -07:00
*
* \ param texture the texture to query
2023-10-12 13:20:53 -06:00
* \ returns a valid property ID on success or 0 on failure ; call
* SDL_GetError ( ) for more information .
2023-10-11 17:59:51 -06:00
*
* \ since This function is available since SDL 3.0 .0 .
*
* \ sa SDL_GetProperty
* \ sa SDL_SetProperty
*/
extern DECLSPEC SDL_PropertiesID SDLCALL SDL_GetTextureProperties ( SDL_Texture * texture ) ;
2024-01-08 12:07:23 -07:00
# define SDL_PROPERTY_TEXTURE_D3D11_TEXTURE_POINTER "SDL.texture.d3d11.texture"
# define SDL_PROPERTY_TEXTURE_D3D11_TEXTURE_U_POINTER "SDL.texture.d3d11.texture_u"
# define SDL_PROPERTY_TEXTURE_D3D11_TEXTURE_V_POINTER "SDL.texture.d3d11.texture_v"
# define SDL_PROPERTY_TEXTURE_D3D12_TEXTURE_POINTER "SDL.texture.d3d12.texture"
# define SDL_PROPERTY_TEXTURE_D3D12_TEXTURE_U_POINTER "SDL.texture.d3d12.texture_u"
# define SDL_PROPERTY_TEXTURE_D3D12_TEXTURE_V_POINTER "SDL.texture.d3d12.texture_v"
# define SDL_PROPERTY_TEXTURE_OPENGL_TEXTURE_NUMBER "SDL.texture.opengl.texture"
# define SDL_PROPERTY_TEXTURE_OPENGL_TEXTURE_UV_NUMBER "SDL.texture.opengl.texture_uv"
# define SDL_PROPERTY_TEXTURE_OPENGL_TEXTURE_U_NUMBER "SDL.texture.opengl.texture_u"
# define SDL_PROPERTY_TEXTURE_OPENGL_TEXTURE_V_NUMBER "SDL.texture.opengl.texture_v"
# define SDL_PROPERTY_TEXTURE_OPENGL_TEXTURE_TARGET "SDL.texture.opengl.target"
# define SDL_PROPERTY_TEXTURE_OPENGL_TEX_W_FLOAT "SDL.texture.opengl.tex_w"
# define SDL_PROPERTY_TEXTURE_OPENGL_TEX_H_FLOAT "SDL.texture.opengl.tex_h"
# define SDL_PROPERTY_TEXTURE_OPENGLES2_TEXTURE_NUMBER "SDL.texture.opengles2.texture"
# define SDL_PROPERTY_TEXTURE_OPENGLES2_TEXTURE_UV_NUMBER "SDL.texture.opengles2.texture_uv"
# define SDL_PROPERTY_TEXTURE_OPENGLES2_TEXTURE_U_NUMBER "SDL.texture.opengles2.texture_u"
# define SDL_PROPERTY_TEXTURE_OPENGLES2_TEXTURE_V_NUMBER "SDL.texture.opengles2.texture_v"
# define SDL_PROPERTY_TEXTURE_OPENGLES2_TEXTURE_TARGET "SDL.texture.opengles2.target"
2024-01-08 10:13:18 -07:00
2024-01-08 08:17:38 -07:00
/**
* Get the renderer that created an SDL_Texture .
*
* \ param texture the texture to query
2024-01-08 08:18:26 -07:00
* \ returns a pointer to the SDL_Renderer that created the texture , or NULL on
* failure ; call SDL_GetError ( ) for more information .
2024-01-08 08:17:38 -07:00
*
* \ threadsafety It is safe to call this function from any thread .
*
* \ since This function is available since SDL 3.0 .0 .
*
* \ sa SDL_CreateTexture
* \ sa SDL_CreateTextureFromSurface
* \ sa SDL_CreateTextureWithProperties
*/
2024-01-08 12:15:56 -07:00
extern DECLSPEC SDL_Renderer * SDLCALL SDL_GetRendererFromTexture ( SDL_Texture * texture ) ;
2024-01-08 08:17:38 -07:00
2015-06-21 09:33:46 -06:00
/**
2021-03-21 12:18:39 -06:00
* Query the attributes of a texture .
2015-06-21 09:33:46 -06:00
*
2021-03-21 12:18:39 -06:00
* \ param texture the texture to query
* \ param format a pointer filled in with the raw format of the texture ; the
* actual format may differ , but pixel transfers will use this
2022-02-01 09:58:05 -07:00
* format ( one of the SDL_PixelFormatEnum values ) . This argument
* can be NULL if you don ' t need this information .
2021-03-21 12:18:39 -06:00
* \ param access a pointer filled in with the actual access to the texture
2022-02-01 09:58:05 -07:00
* ( one of the SDL_TextureAccess values ) . This argument can be
* NULL if you don ' t need this information .
* \ param w a pointer filled in with the width of the texture in pixels . This
* argument can be NULL if you don ' t need this information .
* \ param h a pointer filled in with the height of the texture in pixels . This
* argument can be NULL if you don ' t need this information .
2021-03-21 12:18:39 -06:00
* \ returns 0 on success or a negative error code on failure ; call
* SDL_GetError ( ) for more information .
2015-06-21 09:33:46 -06:00
*
2022-11-22 15:40:14 -07:00
* \ since This function is available since SDL 3.0 .0 .
2021-10-26 19:36:05 -06:00
*
2021-03-21 12:18:39 -06:00
* \ sa SDL_CreateTexture
2015-06-21 09:33:46 -06:00
*/
2022-12-31 12:19:32 -07:00
extern DECLSPEC int SDLCALL SDL_QueryTexture ( SDL_Texture * texture , Uint32 * format , int * access , int * w , int * h ) ;
2015-06-21 09:33:46 -06:00
/**
2021-03-21 12:18:39 -06:00
* Set an additional color value multiplied into render copy operations .
*
* When this texture is rendered , during the copy operation each source color
* channel is modulated by the appropriate color value according to the
* following formula :
2015-06-21 09:33:46 -06:00
*
2021-03-21 12:18:39 -06:00
* ` srcC = srcC * ( color / 255 ) `
2015-06-21 09:33:46 -06:00
*
2021-03-21 12:18:39 -06:00
* Color modulation is not always supported by the renderer ; it will return - 1
* if color modulation is not supported .
2015-06-21 09:33:46 -06:00
*
2021-03-21 12:18:39 -06:00
* \ param texture the texture to update
* \ param r the red color value multiplied into copy operations
* \ param g the green color value multiplied into copy operations
* \ param b the blue color value multiplied into copy operations
* \ returns 0 on success or a negative error code on failure ; call
* SDL_GetError ( ) for more information .
*
2022-11-22 15:40:14 -07:00
* \ since This function is available since SDL 3.0 .0 .
2021-10-26 19:36:05 -06:00
*
2021-03-21 12:18:39 -06:00
* \ sa SDL_GetTextureColorMod
* \ sa SDL_SetTextureAlphaMod
2015-06-21 09:33:46 -06:00
*/
2022-12-31 12:19:32 -07:00
extern DECLSPEC int SDLCALL SDL_SetTextureColorMod ( SDL_Texture * texture , Uint8 r , Uint8 g , Uint8 b ) ;
2015-06-21 09:33:46 -06:00
/**
2021-03-21 12:18:39 -06:00
* Get the additional color value multiplied into render copy operations .
2015-06-21 09:33:46 -06:00
*
2021-03-21 12:18:39 -06:00
* \ param texture the texture to query
* \ param r a pointer filled in with the current red color value
* \ param g a pointer filled in with the current green color value
* \ param b a pointer filled in with the current blue color value
* \ returns 0 on success or a negative error code on failure ; call
* SDL_GetError ( ) for more information .
2015-06-21 09:33:46 -06:00
*
2022-11-22 15:40:14 -07:00
* \ since This function is available since SDL 3.0 .0 .
2021-10-26 19:36:05 -06:00
*
2021-03-21 12:18:39 -06:00
* \ sa SDL_GetTextureAlphaMod
* \ sa SDL_SetTextureColorMod
2015-06-21 09:33:46 -06:00
*/
2022-12-31 12:19:32 -07:00
extern DECLSPEC int SDLCALL SDL_GetTextureColorMod ( SDL_Texture * texture , Uint8 * r , Uint8 * g , Uint8 * b ) ;
2015-06-21 09:33:46 -06:00
/**
2021-03-21 12:18:39 -06:00
* Set an additional alpha value multiplied into render copy operations .
2015-06-21 09:33:46 -06:00
*
2021-03-21 12:18:39 -06:00
* When this texture is rendered , during the copy operation the source alpha
* value is modulated by this alpha value according to the following formula :
2015-06-21 09:33:46 -06:00
*
2021-03-21 12:18:39 -06:00
* ` srcA = srcA * ( alpha / 255 ) `
2015-06-21 09:33:46 -06:00
*
2021-03-21 12:18:39 -06:00
* Alpha modulation is not always supported by the renderer ; it will return - 1
* if alpha modulation is not supported .
*
* \ param texture the texture to update
* \ param alpha the source alpha value multiplied into copy operations
* \ returns 0 on success or a negative error code on failure ; call
* SDL_GetError ( ) for more information .
*
2022-11-22 15:40:14 -07:00
* \ since This function is available since SDL 3.0 .0 .
2021-10-26 19:36:05 -06:00
*
2021-03-21 12:18:39 -06:00
* \ sa SDL_GetTextureAlphaMod
* \ sa SDL_SetTextureColorMod
2015-06-21 09:33:46 -06:00
*/
2022-12-31 12:19:32 -07:00
extern DECLSPEC int SDLCALL SDL_SetTextureAlphaMod ( SDL_Texture * texture , Uint8 alpha ) ;
2015-06-21 09:33:46 -06:00
/**
2021-07-14 15:07:04 -06:00
* Get the additional alpha value multiplied into render copy operations .
2015-06-21 09:33:46 -06:00
*
2021-03-21 12:18:39 -06:00
* \ param texture the texture to query
* \ param alpha a pointer filled in with the current alpha value
* \ returns 0 on success or a negative error code on failure ; call
* SDL_GetError ( ) for more information .
2015-06-21 09:33:46 -06:00
*
2022-11-22 15:40:14 -07:00
* \ since This function is available since SDL 3.0 .0 .
2021-10-26 19:36:05 -06:00
*
2021-03-21 12:18:39 -06:00
* \ sa SDL_GetTextureColorMod
* \ sa SDL_SetTextureAlphaMod
2015-06-21 09:33:46 -06:00
*/
2022-12-31 12:19:32 -07:00
extern DECLSPEC int SDLCALL SDL_GetTextureAlphaMod ( SDL_Texture * texture , Uint8 * alpha ) ;
2015-06-21 09:33:46 -06:00
/**
2022-12-27 07:21:13 -07:00
* Set the blend mode for a texture , used by SDL_RenderTexture ( ) .
2015-06-21 09:33:46 -06:00
*
2021-03-21 12:18:39 -06:00
* If the blend mode is not supported , the closest supported mode is chosen
* and this function returns - 1.
2015-06-21 09:33:46 -06:00
*
2021-03-21 12:18:39 -06:00
* \ param texture the texture to update
* \ param blendMode the SDL_BlendMode to use for texture blending
* \ returns 0 on success or a negative error code on failure ; call
* SDL_GetError ( ) for more information .
2015-06-21 09:33:46 -06:00
*
2022-11-22 15:40:14 -07:00
* \ since This function is available since SDL 3.0 .0 .
2021-10-26 19:36:05 -06:00
*
2021-03-21 12:18:39 -06:00
* \ sa SDL_GetTextureBlendMode
2022-12-27 07:21:13 -07:00
* \ sa SDL_RenderTexture
2015-06-21 09:33:46 -06:00
*/
2022-12-31 12:19:32 -07:00
extern DECLSPEC int SDLCALL SDL_SetTextureBlendMode ( SDL_Texture * texture , SDL_BlendMode blendMode ) ;
2015-06-21 09:33:46 -06:00
/**
2021-03-21 12:18:39 -06:00
* Get the blend mode used for texture copy operations .
2015-06-21 09:33:46 -06:00
*
2021-03-21 12:18:39 -06:00
* \ param texture the texture to query
* \ param blendMode a pointer filled in with the current SDL_BlendMode
* \ returns 0 on success or a negative error code on failure ; call
* SDL_GetError ( ) for more information .
2015-06-21 09:33:46 -06:00
*
2022-11-22 15:40:14 -07:00
* \ since This function is available since SDL 3.0 .0 .
2021-10-26 19:36:05 -06:00
*
2021-03-21 12:18:39 -06:00
* \ sa SDL_SetTextureBlendMode
2015-06-21 09:33:46 -06:00
*/
2022-12-31 12:19:32 -07:00
extern DECLSPEC int SDLCALL SDL_GetTextureBlendMode ( SDL_Texture * texture , SDL_BlendMode * blendMode ) ;
2015-06-21 09:33:46 -06:00
2019-12-22 14:39:44 -07:00
/**
2021-03-21 12:18:39 -06:00
* Set the scale mode used for texture scale operations .
2019-12-22 14:39:44 -07:00
*
2021-03-21 12:18:39 -06:00
* If the scale mode is not supported , the closest supported mode is chosen .
2019-12-22 14:39:44 -07:00
*
2021-03-21 12:18:39 -06:00
* \ param texture The texture to update .
* \ param scaleMode the SDL_ScaleMode to use for texture scaling .
2023-02-12 02:09:42 -07:00
* \ returns 0 on success or a negative error code on failure ; call
* SDL_GetError ( ) for more information .
2019-12-22 14:39:44 -07:00
*
2022-11-22 15:40:14 -07:00
* \ since This function is available since SDL 3.0 .0 .
2021-10-26 19:36:05 -06:00
*
2021-07-14 15:07:04 -06:00
* \ sa SDL_GetTextureScaleMode
2019-12-22 14:39:44 -07:00
*/
2022-12-31 12:19:32 -07:00
extern DECLSPEC int SDLCALL SDL_SetTextureScaleMode ( SDL_Texture * texture , SDL_ScaleMode scaleMode ) ;
2019-12-22 14:39:44 -07:00
/**
2021-03-21 12:18:39 -06:00
* Get the scale mode used for texture scale operations .
2019-12-22 14:39:44 -07:00
*
2021-03-21 12:18:39 -06:00
* \ param texture the texture to query .
* \ param scaleMode a pointer filled in with the current scale mode .
2023-02-12 02:09:42 -07:00
* \ returns 0 on success or a negative error code on failure ; call
* SDL_GetError ( ) for more information .
2019-12-22 14:39:44 -07:00
*
2022-11-22 15:40:14 -07:00
* \ since This function is available since SDL 3.0 .0 .
2021-10-26 19:36:05 -06:00
*
2021-07-14 15:07:04 -06:00
* \ sa SDL_SetTextureScaleMode
2019-12-22 14:39:44 -07:00
*/
2022-12-31 12:19:32 -07:00
extern DECLSPEC int SDLCALL SDL_GetTextureScaleMode ( SDL_Texture * texture , SDL_ScaleMode * scaleMode ) ;
2019-12-22 14:39:44 -07:00
2015-06-21 09:33:46 -06:00
/**
2021-03-21 12:18:39 -06:00
* Update the given texture rectangle with new pixel data .
2015-06-21 09:33:46 -06:00
*
2021-03-21 12:18:39 -06:00
* The pixel data must be in the pixel format of the texture . Use
* SDL_QueryTexture ( ) to query the pixel format of the texture .
2015-06-21 09:33:46 -06:00
*
2021-03-21 12:18:39 -06:00
* This is a fairly slow function , intended for use with static textures that
* do not change often .
2017-08-10 12:57:19 -06:00
*
2021-03-21 12:18:39 -06:00
* If the texture is intended to be updated often , it is preferred to create
* the texture as streaming and use the locking functions referenced below .
* While this function will work with streaming textures , for optimization
* reasons you may not get the pixels back if you lock the texture afterward .
2015-06-21 09:33:46 -06:00
*
2021-03-21 12:18:39 -06:00
* \ param texture the texture to update
* \ param rect an SDL_Rect structure representing the area to update , or NULL
* to update the entire texture
* \ param pixels the raw pixel data in the format of the texture
* \ param pitch the number of bytes in a row of pixel data , including padding
* between lines
* \ returns 0 on success or a negative error code on failure ; call
* SDL_GetError ( ) for more information .
*
2022-11-22 15:40:14 -07:00
* \ since This function is available since SDL 3.0 .0 .
2021-10-26 19:36:05 -06:00
*
2021-03-21 12:18:39 -06:00
* \ sa SDL_CreateTexture
* \ sa SDL_LockTexture
* \ sa SDL_UnlockTexture
2015-06-21 09:33:46 -06:00
*/
2022-12-31 12:19:32 -07:00
extern DECLSPEC int SDLCALL SDL_UpdateTexture ( SDL_Texture * texture , const SDL_Rect * rect , const void * pixels , int pitch ) ;
2015-06-21 09:33:46 -06:00
/**
2021-07-14 15:07:04 -06:00
* Update a rectangle within a planar YV12 or IYUV texture with new pixel
* data .
2021-03-21 12:18:39 -06:00
*
* You can use SDL_UpdateTexture ( ) as long as your pixel data is a contiguous
* block of Y and U / V planes in the proper order , but this function is
* available if your pixel data is not contiguous .
2015-06-21 09:33:46 -06:00
*
2021-03-21 12:18:39 -06:00
* \ param texture the texture to update
* \ param rect a pointer to the rectangle of pixels to update , or NULL to
* update the entire texture
* \ param Yplane the raw pixel data for the Y plane
* \ param Ypitch the number of bytes between rows of pixel data for the Y
* plane
* \ param Uplane the raw pixel data for the U plane
* \ param Upitch the number of bytes between rows of pixel data for the U
* plane
* \ param Vplane the raw pixel data for the V plane
* \ param Vpitch the number of bytes between rows of pixel data for the V
* plane
2023-02-12 02:09:42 -07:00
* \ returns 0 on success or a negative error code on failure ; call
2021-03-21 12:18:39 -06:00
* SDL_GetError ( ) for more information .
2015-06-21 09:33:46 -06:00
*
2022-11-22 15:40:14 -07:00
* \ since This function is available since SDL 3.0 .0 .
2015-06-21 09:33:46 -06:00
*
2021-03-21 12:18:39 -06:00
* \ sa SDL_UpdateTexture
2015-06-21 09:33:46 -06:00
*/
2022-12-31 12:19:32 -07:00
extern DECLSPEC int SDLCALL SDL_UpdateYUVTexture ( SDL_Texture * texture ,
const SDL_Rect * rect ,
2015-06-21 09:33:46 -06:00
const Uint8 * Yplane , int Ypitch ,
const Uint8 * Uplane , int Upitch ,
const Uint8 * Vplane , int Vpitch ) ;
2021-01-05 03:56:22 -07:00
/**
2021-03-21 12:18:39 -06:00
* Update a rectangle within a planar NV12 or NV21 texture with new pixels .
2021-01-05 03:56:22 -07:00
*
2021-03-21 12:18:39 -06:00
* You can use SDL_UpdateTexture ( ) as long as your pixel data is a contiguous
* block of NV12 / 21 planes in the proper order , but this function is available
* if your pixel data is not contiguous .
2021-01-05 03:56:22 -07:00
*
2021-03-21 12:18:39 -06:00
* \ param texture the texture to update
* \ param rect a pointer to the rectangle of pixels to update , or NULL to
* update the entire texture .
* \ param Yplane the raw pixel data for the Y plane .
2021-07-14 15:07:04 -06:00
* \ param Ypitch the number of bytes between rows of pixel data for the Y
* plane .
2021-03-21 12:18:39 -06:00
* \ param UVplane the raw pixel data for the UV plane .
2021-07-14 15:07:04 -06:00
* \ param UVpitch the number of bytes between rows of pixel data for the UV
* plane .
2023-02-12 02:09:42 -07:00
* \ returns 0 on success or a negative error code on failure ; call
* SDL_GetError ( ) for more information .
2021-10-26 19:36:05 -06:00
*
2022-11-22 15:40:14 -07:00
* \ since This function is available since SDL 3.0 .0 .
2021-01-05 03:56:22 -07:00
*/
2022-12-31 12:19:32 -07:00
extern DECLSPEC int SDLCALL SDL_UpdateNVTexture ( SDL_Texture * texture ,
const SDL_Rect * rect ,
2021-01-05 03:56:22 -07:00
const Uint8 * Yplane , int Ypitch ,
const Uint8 * UVplane , int UVpitch ) ;
2015-06-21 09:33:46 -06:00
/**
2021-03-21 12:18:39 -06:00
* Lock a portion of the texture for * * write - only * * pixel access .
2015-06-21 09:33:46 -06:00
*
2021-03-21 12:18:39 -06:00
* As an optimization , the pixels made available for editing don ' t necessarily
* contain the old texture data . This is a write - only operation , and if you
* need to keep a copy of the texture data you should do that at the
* application level .
2015-06-21 09:33:46 -06:00
*
2021-03-21 12:18:39 -06:00
* You must use SDL_UnlockTexture ( ) to unlock the pixels and apply any
* changes .
2015-06-21 09:33:46 -06:00
*
2021-03-21 12:18:39 -06:00
* \ param texture the texture to lock for access , which was created with
* ` SDL_TEXTUREACCESS_STREAMING `
* \ param rect an SDL_Rect structure representing the area to lock for access ;
* NULL to lock the entire texture
* \ param pixels this is filled in with a pointer to the locked pixels ,
* appropriately offset by the locked area
* \ param pitch this is filled in with the pitch of the locked pixels ; the
* pitch is the length of one row in bytes
* \ returns 0 on success or a negative error code if the texture is not valid
* or was not created with ` SDL_TEXTUREACCESS_STREAMING ` ; call
* SDL_GetError ( ) for more information .
*
2022-11-22 15:40:14 -07:00
* \ since This function is available since SDL 3.0 .0 .
2021-10-26 19:36:05 -06:00
*
2021-07-14 15:07:04 -06:00
* \ sa SDL_UnlockTexture
2015-06-21 09:33:46 -06:00
*/
2022-12-31 12:19:32 -07:00
extern DECLSPEC int SDLCALL SDL_LockTexture ( SDL_Texture * texture ,
const SDL_Rect * rect ,
2015-06-21 09:33:46 -06:00
void * * pixels , int * pitch ) ;
2019-09-30 12:58:44 -06:00
/**
2021-03-21 12:18:39 -06:00
* Lock a portion of the texture for * * write - only * * pixel access , and expose
* it as a SDL surface .
*
* Besides providing an SDL_Surface instead of raw pixel data , this function
* operates like SDL_LockTexture .
*
* As an optimization , the pixels made available for editing don ' t necessarily
* contain the old texture data . This is a write - only operation , and if you
* need to keep a copy of the texture data you should do that at the
* application level .
*
* You must use SDL_UnlockTexture ( ) to unlock the pixels and apply any
* changes .
2019-09-30 12:58:44 -06:00
*
2021-03-21 12:18:39 -06:00
* The returned surface is freed internally after calling SDL_UnlockTexture ( )
* or SDL_DestroyTexture ( ) . The caller should not free it .
2019-09-30 12:58:44 -06:00
*
2023-02-12 02:09:42 -07:00
* \ param texture the texture to lock for access , which must be created with
2021-03-21 12:18:39 -06:00
* ` SDL_TEXTUREACCESS_STREAMING `
* \ param rect a pointer to the rectangle to lock for access . If the rect is
* NULL , the entire texture will be locked
* \ param surface this is filled in with an SDL surface representing the
* locked area
2023-02-12 02:09:42 -07:00
* \ returns 0 on success or a negative error code on failure ; call
* SDL_GetError ( ) for more information .
2019-09-30 12:58:44 -06:00
*
2022-11-22 15:40:14 -07:00
* \ since This function is available since SDL 3.0 .0 .
2021-10-26 19:36:05 -06:00
*
2021-07-14 15:07:04 -06:00
* \ sa SDL_LockTexture
* \ sa SDL_UnlockTexture
2019-09-30 12:58:44 -06:00
*/
extern DECLSPEC int SDLCALL SDL_LockTextureToSurface ( SDL_Texture * texture ,
const SDL_Rect * rect ,
SDL_Surface * * surface ) ;
2015-06-21 09:33:46 -06:00
/**
2021-03-21 12:18:39 -06:00
* Unlock a texture , uploading the changes to video memory , if needed .
*
* * * Warning * * : Please note that SDL_LockTexture ( ) is intended to be
2021-10-26 09:30:06 -06:00
* write - only ; it will not guarantee the previous contents of the texture will
2021-03-21 12:18:39 -06:00
* be provided . You must fully initialize any area of a texture that you lock
* before unlocking it , as the pixels might otherwise be uninitialized memory .
*
2021-07-14 15:07:04 -06:00
* Which is to say : locking and immediately unlocking a texture can result in
* corrupted textures , depending on the renderer in use .
2021-03-21 12:18:39 -06:00
*
* \ param texture a texture locked by SDL_LockTexture ( )
2015-06-21 09:33:46 -06:00
*
2022-11-22 15:40:14 -07:00
* \ since This function is available since SDL 3.0 .0 .
2021-10-26 19:36:05 -06:00
*
2021-03-21 12:18:39 -06:00
* \ sa SDL_LockTexture
2015-06-21 09:33:46 -06:00
*/
2023-02-09 12:16:41 -07:00
extern DECLSPEC void SDLCALL SDL_UnlockTexture ( SDL_Texture * texture ) ;
2015-06-21 09:33:46 -06:00
/**
2021-03-21 12:18:39 -06:00
* Set a texture as the current rendering target .
2015-06-21 09:33:46 -06:00
*
2021-03-21 12:18:39 -06:00
* The default render target is the window for which the renderer was created .
* To stop rendering to a texture and render to the window again , call this
* function with a NULL ` texture ` .
*
* \ param renderer the rendering context
* \ param texture the targeted texture , which must be created with the
2021-07-14 15:07:04 -06:00
* ` SDL_TEXTUREACCESS_TARGET ` flag , or NULL to render to the
* window instead of a texture .
2021-03-21 12:18:39 -06:00
* \ returns 0 on success or a negative error code on failure ; call
* SDL_GetError ( ) for more information .
*
2022-11-22 15:40:14 -07:00
* \ since This function is available since SDL 3.0 .0 .
2015-06-21 09:33:46 -06:00
*
2021-03-21 12:18:39 -06:00
* \ sa SDL_GetRenderTarget
2015-06-21 09:33:46 -06:00
*/
2022-12-31 12:19:32 -07:00
extern DECLSPEC int SDLCALL SDL_SetRenderTarget ( SDL_Renderer * renderer , SDL_Texture * texture ) ;
2015-06-21 09:33:46 -06:00
/**
2021-03-21 12:18:39 -06:00
* Get the current render target .
2015-06-21 09:33:46 -06:00
*
2021-03-21 12:18:39 -06:00
* The default render target is the window for which the renderer was created ,
* and is reported a NULL here .
2015-06-21 09:33:46 -06:00
*
2021-03-21 12:18:39 -06:00
* \ param renderer the rendering context
* \ returns the current render target or NULL for the default render target .
*
2022-11-22 15:40:14 -07:00
* \ since This function is available since SDL 3.0 .0 .
2021-03-21 12:18:39 -06:00
*
* \ sa SDL_SetRenderTarget
2015-06-21 09:33:46 -06:00
*/
2022-12-31 12:19:32 -07:00
extern DECLSPEC SDL_Texture * SDLCALL SDL_GetRenderTarget ( SDL_Renderer * renderer ) ;
2015-06-21 09:33:46 -06:00
/**
2023-02-03 13:25:46 -07:00
* Set a device independent resolution and presentation mode for rendering .
*
2023-02-24 09:49:41 -07:00
* This function sets the width and height of the logical rendering output . A
* render target is created at the specified size and used for rendering and
* then copied to the output during presentation .
2021-03-21 12:18:39 -06:00
*
2023-02-03 13:25:46 -07:00
* You can disable logical coordinates by setting the mode to
2023-05-17 13:59:14 -06:00
* SDL_LOGICAL_PRESENTATION_DISABLED , and in that case you get the full pixel
* resolution of the output window .
2015-06-21 09:33:46 -06:00
*
2023-02-03 13:25:46 -07:00
* You can convert coordinates in an event into rendering coordinates using
* SDL_ConvertEventToRenderCoordinates ( ) .
2015-06-21 09:33:46 -06:00
*
2023-02-03 13:25:46 -07:00
* \ param renderer the rendering context
2021-03-21 12:18:39 -06:00
* \ param w the width of the logical resolution
* \ param h the height of the logical resolution
2023-02-03 13:25:46 -07:00
* \ param mode the presentation mode used
* \ param scale_mode the scale mode used
2021-03-21 12:18:39 -06:00
* \ returns 0 on success or a negative error code on failure ; call
* SDL_GetError ( ) for more information .
2015-06-21 09:33:46 -06:00
*
2022-11-22 15:40:14 -07:00
* \ since This function is available since SDL 3.0 .0 .
2015-06-21 09:33:46 -06:00
*
2023-02-03 13:25:46 -07:00
* \ sa SDL_ConvertEventToRenderCoordinates
* \ sa SDL_GetRenderLogicalPresentation
2015-06-21 09:33:46 -06:00
*/
2023-02-03 13:25:46 -07:00
extern DECLSPEC int SDLCALL SDL_SetRenderLogicalPresentation ( SDL_Renderer * renderer , int w , int h , SDL_RendererLogicalPresentation mode , SDL_ScaleMode scale_mode ) ;
2015-06-21 09:33:46 -06:00
/**
2023-02-03 13:25:46 -07:00
* Get device independent resolution and presentation mode for rendering .
2022-05-12 01:36:49 -06:00
*
2023-02-24 09:49:41 -07:00
* This function gets the width and height of the logical rendering output , or
* the output size in pixels if a logical resolution is not enabled .
2015-06-21 09:33:46 -06:00
*
2023-02-03 13:25:46 -07:00
* \ param renderer the rendering context
2021-03-21 12:18:39 -06:00
* \ param w an int to be filled with the width
* \ param h an int to be filled with the height
2023-02-03 13:25:46 -07:00
* \ param mode a pointer filled in with the presentation mode
* \ param scale_mode a pointer filled in with the scale mode
* \ returns 0 on success or a negative error code on failure ; call
* SDL_GetError ( ) for more information .
2021-03-21 12:18:39 -06:00
*
2022-11-22 15:40:14 -07:00
* \ since This function is available since SDL 3.0 .0 .
2021-03-21 12:18:39 -06:00
*
2023-02-03 13:25:46 -07:00
* \ sa SDL_SetRenderLogicalPresentation
2015-06-21 09:33:46 -06:00
*/
2023-02-03 13:25:46 -07:00
extern DECLSPEC int SDLCALL SDL_GetRenderLogicalPresentation ( SDL_Renderer * renderer , int * w , int * h , SDL_RendererLogicalPresentation * mode , SDL_ScaleMode * scale_mode ) ;
2015-06-21 09:33:46 -06:00
2016-01-05 14:39:18 -07:00
/**
2023-05-16 17:29:52 -06:00
* Get a point in render coordinates when given a point in window coordinates .
2016-01-05 14:39:18 -07:00
*
2023-02-03 13:25:46 -07:00
* \ param renderer the rendering context
* \ param window_x the x coordinate in window coordinates
* \ param window_y the y coordinate in window coordinates
* \ param x a pointer filled with the x coordinate in render coordinates
* \ param y a pointer filled with the y coordinate in render coordinates
* \ returns 0 on success or a negative error code on failure ; call
* SDL_GetError ( ) for more information .
2016-01-05 14:39:18 -07:00
*
2023-02-03 13:25:46 -07:00
* \ since This function is available since SDL 3.0 .0 .
*
* \ sa SDL_SetRenderLogicalPresentation
* \ sa SDL_SetRenderScale
*/
extern DECLSPEC int SDLCALL SDL_RenderCoordinatesFromWindow ( SDL_Renderer * renderer , float window_x , float window_y , float * x , float * y ) ;
/**
2023-05-16 17:29:52 -06:00
* Get a point in window coordinates when given a point in render coordinates .
2023-02-03 13:25:46 -07:00
*
* \ param renderer the rendering context
* \ param x the x coordinate in render coordinates
* \ param y the y coordinate in render coordinates
2023-02-24 09:49:41 -07:00
* \ param window_x a pointer filled with the x coordinate in window
* coordinates
* \ param window_y a pointer filled with the y coordinate in window
* coordinates
2021-03-21 12:18:39 -06:00
* \ returns 0 on success or a negative error code on failure ; call
* SDL_GetError ( ) for more information .
2016-01-05 14:39:18 -07:00
*
2022-11-22 15:40:14 -07:00
* \ since This function is available since SDL 3.0 .0 .
2021-03-21 12:18:39 -06:00
*
2023-02-03 13:25:46 -07:00
* \ sa SDL_SetRenderLogicalPresentation
* \ sa SDL_SetRenderScale
2016-01-05 14:39:18 -07:00
*/
2023-02-03 13:25:46 -07:00
extern DECLSPEC int SDLCALL SDL_RenderCoordinatesToWindow ( SDL_Renderer * renderer , float x , float y , float * window_x , float * window_y ) ;
2016-01-05 14:39:18 -07:00
/**
2023-02-03 13:25:46 -07:00
* Convert the coordinates in an event to render coordinates .
*
* Touch coordinates are converted from normalized coordinates in the window
* to non - normalized rendering coordinates .
2021-03-21 12:18:39 -06:00
*
2023-02-03 13:25:46 -07:00
* Once converted , the coordinates may be outside the rendering area .
*
* \ param renderer the rendering context
* \ param event the event to modify
* \ returns 0 on success or a negative error code on failure ; call
* SDL_GetError ( ) for more information .
2016-01-05 14:39:18 -07:00
*
2022-11-22 15:40:14 -07:00
* \ since This function is available since SDL 3.0 .0 .
2016-01-05 14:39:18 -07:00
*
2023-02-03 13:25:46 -07:00
* \ sa SDL_GetRenderCoordinatesFromWindowCoordinates
2016-01-05 14:39:18 -07:00
*/
2023-02-03 13:25:46 -07:00
extern DECLSPEC int SDLCALL SDL_ConvertEventToRenderCoordinates ( SDL_Renderer * renderer , SDL_Event * event ) ;
2016-01-05 14:39:18 -07:00
2015-06-21 09:33:46 -06:00
/**
2021-03-21 12:18:39 -06:00
* Set the drawing area for rendering on the current target .
2015-06-21 09:33:46 -06:00
*
2021-03-21 12:18:39 -06:00
* \ param renderer the rendering context
* \ param rect the SDL_Rect structure representing the drawing area , or NULL
* to set the viewport to the entire target
* \ returns 0 on success or a negative error code on failure ; call
* SDL_GetError ( ) for more information .
2015-06-21 09:33:46 -06:00
*
2022-11-22 15:40:14 -07:00
* \ since This function is available since SDL 3.0 .0 .
2021-10-26 19:36:05 -06:00
*
2022-12-27 07:21:13 -07:00
* \ sa SDL_GetRenderViewport
2015-06-21 09:33:46 -06:00
*/
2022-12-31 12:19:32 -07:00
extern DECLSPEC int SDLCALL SDL_SetRenderViewport ( SDL_Renderer * renderer , const SDL_Rect * rect ) ;
2015-06-21 09:33:46 -06:00
/**
2021-03-21 12:18:39 -06:00
* Get the drawing area for the current target .
*
* \ param renderer the rendering context
* \ param rect an SDL_Rect structure filled in with the current drawing area
2023-02-03 13:25:46 -07:00
* \ returns 0 on success or a negative error code on failure ; call
* SDL_GetError ( ) for more information .
2015-06-21 09:33:46 -06:00
*
2022-11-22 15:40:14 -07:00
* \ since This function is available since SDL 3.0 .0 .
2021-10-26 19:36:05 -06:00
*
2022-12-27 07:21:13 -07:00
* \ sa SDL_SetRenderViewport
2015-06-21 09:33:46 -06:00
*/
2023-02-03 13:25:46 -07:00
extern DECLSPEC int SDLCALL SDL_GetRenderViewport ( SDL_Renderer * renderer , SDL_Rect * rect ) ;
2015-06-21 09:33:46 -06:00
/**
2021-03-21 12:18:39 -06:00
* Set the clip rectangle for rendering on the specified target .
2015-06-21 09:33:46 -06:00
*
2023-02-03 13:25:46 -07:00
* \ param renderer the rendering context
2021-03-21 12:18:39 -06:00
* \ param rect an SDL_Rect structure representing the clip area , relative to
* the viewport , or NULL to disable clipping
* \ returns 0 on success or a negative error code on failure ; call
* SDL_GetError ( ) for more information .
2015-06-21 09:33:46 -06:00
*
2022-11-22 15:40:14 -07:00
* \ since This function is available since SDL 3.0 .0 .
2021-10-26 19:36:05 -06:00
*
2022-12-27 07:21:13 -07:00
* \ sa SDL_GetRenderClipRect
2022-12-28 20:34:01 -07:00
* \ sa SDL_RenderClipEnabled
2015-06-21 09:33:46 -06:00
*/
2022-12-31 12:19:32 -07:00
extern DECLSPEC int SDLCALL SDL_SetRenderClipRect ( SDL_Renderer * renderer , const SDL_Rect * rect ) ;
2015-06-21 09:33:46 -06:00
/**
2021-03-21 12:18:39 -06:00
* Get the clip rectangle for the current target .
2015-06-21 09:33:46 -06:00
*
2023-02-03 13:25:46 -07:00
* \ param renderer the rendering context
2021-03-21 12:18:39 -06:00
* \ param rect an SDL_Rect structure filled in with the current clipping area
* or an empty rectangle if clipping is disabled
2023-02-03 13:25:46 -07:00
* \ returns 0 on success or a negative error code on failure ; call
* SDL_GetError ( ) for more information .
2015-06-21 09:33:46 -06:00
*
2022-11-22 15:40:14 -07:00
* \ since This function is available since SDL 3.0 .0 .
2021-10-26 19:36:05 -06:00
*
2022-12-28 20:34:01 -07:00
* \ sa SDL_RenderClipEnabled
2022-12-27 07:21:13 -07:00
* \ sa SDL_SetRenderClipRect
2015-06-21 09:33:46 -06:00
*/
2023-02-03 13:25:46 -07:00
extern DECLSPEC int SDLCALL SDL_GetRenderClipRect ( SDL_Renderer * renderer , SDL_Rect * rect ) ;
2015-06-21 09:33:46 -06:00
/**
2021-03-21 12:18:39 -06:00
* Get whether clipping is enabled on the given renderer .
*
2023-02-03 13:25:46 -07:00
* \ param renderer the rendering context
2021-03-21 12:18:39 -06:00
* \ returns SDL_TRUE if clipping is enabled or SDL_FALSE if not ; call
* SDL_GetError ( ) for more information .
2015-06-21 09:33:46 -06:00
*
2022-11-22 15:40:14 -07:00
* \ since This function is available since SDL 3.0 .0 .
2015-06-21 09:33:46 -06:00
*
2022-12-27 07:21:13 -07:00
* \ sa SDL_GetRenderClipRect
* \ sa SDL_SetRenderClipRect
2015-06-21 09:33:46 -06:00
*/
2022-12-31 12:19:32 -07:00
extern DECLSPEC SDL_bool SDLCALL SDL_RenderClipEnabled ( SDL_Renderer * renderer ) ;
2015-06-21 09:33:46 -06:00
/**
2021-03-21 12:18:39 -06:00
* Set the drawing scale for rendering on the current target .
*
* The drawing coordinates are scaled by the x / y scaling factors before they
* are used by the renderer . This allows resolution independent drawing with a
* single coordinate system .
2015-06-21 09:33:46 -06:00
*
2021-03-21 12:18:39 -06:00
* If this results in scaling or subpixel drawing by the rendering backend , it
* will be handled using the appropriate quality hints . For best results use
* integer scaling factors .
2015-06-21 09:33:46 -06:00
*
2023-02-03 13:25:46 -07:00
* \ param renderer the rendering context
2021-03-21 12:18:39 -06:00
* \ param scaleX the horizontal scaling factor
* \ param scaleY the vertical scaling factor
* \ returns 0 on success or a negative error code on failure ; call
* SDL_GetError ( ) for more information .
2015-06-21 09:33:46 -06:00
*
2022-11-22 15:40:14 -07:00
* \ since This function is available since SDL 3.0 .0 .
2015-06-21 09:33:46 -06:00
*
2022-12-27 07:21:13 -07:00
* \ sa SDL_GetRenderScale
2015-06-21 09:33:46 -06:00
*/
2022-12-31 12:19:32 -07:00
extern DECLSPEC int SDLCALL SDL_SetRenderScale ( SDL_Renderer * renderer , float scaleX , float scaleY ) ;
2015-06-21 09:33:46 -06:00
/**
2021-03-21 12:18:39 -06:00
* Get the drawing scale for the current target .
2015-06-21 09:33:46 -06:00
*
2023-02-03 13:25:46 -07:00
* \ param renderer the rendering context
2021-03-21 12:18:39 -06:00
* \ param scaleX a pointer filled in with the horizontal scaling factor
* \ param scaleY a pointer filled in with the vertical scaling factor
2023-02-03 13:25:46 -07:00
* \ returns 0 on success or a negative error code on failure ; call
* SDL_GetError ( ) for more information .
2015-06-21 09:33:46 -06:00
*
2022-11-22 15:40:14 -07:00
* \ since This function is available since SDL 3.0 .0 .
2021-03-21 12:18:39 -06:00
*
2022-12-27 07:21:13 -07:00
* \ sa SDL_SetRenderScale
2015-06-21 09:33:46 -06:00
*/
2023-02-03 13:25:46 -07:00
extern DECLSPEC int SDLCALL SDL_GetRenderScale ( SDL_Renderer * renderer , float * scaleX , float * scaleY ) ;
2021-11-10 13:21:01 -07:00
2015-06-21 09:33:46 -06:00
/**
2021-03-21 12:18:39 -06:00
* Set the color used for drawing operations ( Rect , Line and Clear ) .
*
2021-07-14 15:07:04 -06:00
* Set the color for drawing or filling rectangles , lines , and points , and for
* SDL_RenderClear ( ) .
2021-03-21 12:18:39 -06:00
*
* \ param renderer the rendering context
* \ param r the red value used to draw on the rendering target
* \ param g the green value used to draw on the rendering target
* \ param b the blue value used to draw on the rendering target
* \ param a the alpha value used to draw on the rendering target ; usually
* ` SDL_ALPHA_OPAQUE ` ( 255 ) . Use SDL_SetRenderDrawBlendMode to
* specify how the alpha channel is used
* \ returns 0 on success or a negative error code on failure ; call
* SDL_GetError ( ) for more information .
*
2022-11-22 15:40:14 -07:00
* \ since This function is available since SDL 3.0 .0 .
2021-10-26 19:36:05 -06:00
*
2021-03-21 12:18:39 -06:00
* \ sa SDL_GetRenderDrawColor
* \ sa SDL_RenderClear
2022-12-27 07:21:13 -07:00
* \ sa SDL_RenderLine
* \ sa SDL_RenderLines
* \ sa SDL_RenderPoint
* \ sa SDL_RenderPoints
* \ sa SDL_RenderRect
* \ sa SDL_RenderRects
2021-03-21 12:18:39 -06:00
* \ sa SDL_RenderFillRect
* \ sa SDL_RenderFillRects
2015-06-21 09:33:46 -06:00
*/
2022-12-31 12:19:32 -07:00
extern DECLSPEC int SDLCALL SDL_SetRenderDrawColor ( SDL_Renderer * renderer , Uint8 r , Uint8 g , Uint8 b , Uint8 a ) ;
2015-06-21 09:33:46 -06:00
/**
2021-03-21 12:18:39 -06:00
* Get the color used for drawing operations ( Rect , Line and Clear ) .
2015-06-21 09:33:46 -06:00
*
2021-03-21 12:18:39 -06:00
* \ param renderer the rendering context
* \ param r a pointer filled in with the red value used to draw on the
* rendering target
* \ param g a pointer filled in with the green value used to draw on the
* rendering target
* \ param b a pointer filled in with the blue value used to draw on the
* rendering target
* \ param a a pointer filled in with the alpha value used to draw on the
* rendering target ; usually ` SDL_ALPHA_OPAQUE ` ( 255 )
* \ returns 0 on success or a negative error code on failure ; call
* SDL_GetError ( ) for more information .
2015-06-21 09:33:46 -06:00
*
2022-11-22 15:40:14 -07:00
* \ since This function is available since SDL 3.0 .0 .
2021-10-26 19:36:05 -06:00
*
2021-03-21 12:18:39 -06:00
* \ sa SDL_SetRenderDrawColor
2015-06-21 09:33:46 -06:00
*/
2022-12-31 12:19:32 -07:00
extern DECLSPEC int SDLCALL SDL_GetRenderDrawColor ( SDL_Renderer * renderer , Uint8 * r , Uint8 * g , Uint8 * b , Uint8 * a ) ;
2015-06-21 09:33:46 -06:00
/**
2021-03-21 12:18:39 -06:00
* Set the blend mode used for drawing operations ( Fill and Line ) .
2015-06-21 09:33:46 -06:00
*
2021-03-21 12:18:39 -06:00
* If the blend mode is not supported , the closest supported mode is chosen .
2015-06-21 09:33:46 -06:00
*
2021-03-21 12:18:39 -06:00
* \ param renderer the rendering context
* \ param blendMode the SDL_BlendMode to use for blending
* \ returns 0 on success or a negative error code on failure ; call
* SDL_GetError ( ) for more information .
2015-06-21 09:33:46 -06:00
*
2022-11-22 15:40:14 -07:00
* \ since This function is available since SDL 3.0 .0 .
2021-10-26 19:36:05 -06:00
*
2021-03-21 12:18:39 -06:00
* \ sa SDL_GetRenderDrawBlendMode
2022-12-27 07:21:13 -07:00
* \ sa SDL_RenderLine
* \ sa SDL_RenderLines
* \ sa SDL_RenderPoint
* \ sa SDL_RenderPoints
* \ sa SDL_RenderRect
* \ sa SDL_RenderRects
2021-03-21 12:18:39 -06:00
* \ sa SDL_RenderFillRect
* \ sa SDL_RenderFillRects
2015-06-21 09:33:46 -06:00
*/
2022-12-31 12:19:32 -07:00
extern DECLSPEC int SDLCALL SDL_SetRenderDrawBlendMode ( SDL_Renderer * renderer , SDL_BlendMode blendMode ) ;
2015-06-21 09:33:46 -06:00
/**
2021-03-21 12:18:39 -06:00
* Get the blend mode used for drawing operations .
2015-06-21 09:33:46 -06:00
*
2021-03-21 12:18:39 -06:00
* \ param renderer the rendering context
* \ param blendMode a pointer filled in with the current SDL_BlendMode
* \ returns 0 on success or a negative error code on failure ; call
* SDL_GetError ( ) for more information .
2015-06-21 09:33:46 -06:00
*
2022-11-22 15:40:14 -07:00
* \ since This function is available since SDL 3.0 .0 .
2021-10-26 19:36:05 -06:00
*
2021-03-21 12:18:39 -06:00
* \ sa SDL_SetRenderDrawBlendMode
2015-06-21 09:33:46 -06:00
*/
2022-12-31 12:19:32 -07:00
extern DECLSPEC int SDLCALL SDL_GetRenderDrawBlendMode ( SDL_Renderer * renderer , SDL_BlendMode * blendMode ) ;
2015-06-21 09:33:46 -06:00
/**
2021-03-21 12:18:39 -06:00
* Clear the current rendering target with the drawing color .
*
* This function clears the entire rendering target , ignoring the viewport and
* the clip rectangle .
*
* \ param renderer the rendering context
* \ returns 0 on success or a negative error code on failure ; call
* SDL_GetError ( ) for more information .
2015-06-21 09:33:46 -06:00
*
2022-11-22 15:40:14 -07:00
* \ since This function is available since SDL 3.0 .0 .
2015-06-21 09:33:46 -06:00
*
2021-03-21 12:18:39 -06:00
* \ sa SDL_SetRenderDrawColor
2015-06-21 09:33:46 -06:00
*/
2022-12-31 12:19:32 -07:00
extern DECLSPEC int SDLCALL SDL_RenderClear ( SDL_Renderer * renderer ) ;
2018-10-22 23:34:03 -06:00
/**
2021-03-21 12:18:39 -06:00
* Draw a point on the current rendering target at subpixel precision .
2018-10-22 23:34:03 -06:00
*
2021-03-21 12:18:39 -06:00
* \ param renderer The renderer which should draw a point .
* \ param x The x coordinate of the point .
* \ param y The y coordinate of the point .
2023-02-10 14:26:35 -07:00
* \ returns 0 on success , or - 1 on error
2021-10-26 19:36:05 -06:00
*
2022-11-22 15:40:14 -07:00
* \ since This function is available since SDL 3.0 .0 .
2018-10-22 23:34:03 -06:00
*/
2022-12-31 12:19:32 -07:00
extern DECLSPEC int SDLCALL SDL_RenderPoint ( SDL_Renderer * renderer , float x , float y ) ;
2018-10-22 23:34:03 -06:00
/**
2021-03-21 12:18:39 -06:00
* Draw multiple points on the current rendering target at subpixel precision .
2018-10-22 23:34:03 -06:00
*
2021-03-21 12:18:39 -06:00
* \ param renderer The renderer which should draw multiple points .
* \ param points The points to draw
* \ param count The number of points to draw
2023-02-12 02:09:42 -07:00
* \ returns 0 on success or a negative error code on failure ; call
* SDL_GetError ( ) for more information .
2021-10-26 19:36:05 -06:00
*
2022-11-22 15:40:14 -07:00
* \ since This function is available since SDL 3.0 .0 .
2018-10-22 23:34:03 -06:00
*/
2022-12-31 12:19:32 -07:00
extern DECLSPEC int SDLCALL SDL_RenderPoints ( SDL_Renderer * renderer , const SDL_FPoint * points , int count ) ;
2018-10-22 23:34:03 -06:00
/**
2021-03-21 12:18:39 -06:00
* Draw a line on the current rendering target at subpixel precision .
2018-10-22 23:34:03 -06:00
*
2021-03-21 12:18:39 -06:00
* \ param renderer The renderer which should draw a line .
* \ param x1 The x coordinate of the start point .
* \ param y1 The y coordinate of the start point .
* \ param x2 The x coordinate of the end point .
* \ param y2 The y coordinate of the end point .
2023-02-10 14:26:35 -07:00
* \ returns 0 on success , or - 1 on error
2021-10-26 19:36:05 -06:00
*
2022-11-22 15:40:14 -07:00
* \ since This function is available since SDL 3.0 .0 .
2018-10-22 23:34:03 -06:00
*/
2022-12-31 12:19:32 -07:00
extern DECLSPEC int SDLCALL SDL_RenderLine ( SDL_Renderer * renderer , float x1 , float y1 , float x2 , float y2 ) ;
2018-10-22 23:34:03 -06:00
/**
2021-03-21 12:18:39 -06:00
* Draw a series of connected lines on the current rendering target at
* subpixel precision .
2018-10-22 23:34:03 -06:00
*
2021-03-21 12:18:39 -06:00
* \ param renderer The renderer which should draw multiple lines .
* \ param points The points along the lines
* \ param count The number of points , drawing count - 1 lines
2023-02-12 02:09:42 -07:00
* \ returns 0 on success or a negative error code on failure ; call
* SDL_GetError ( ) for more information .
2021-10-26 19:36:05 -06:00
*
2022-11-22 15:40:14 -07:00
* \ since This function is available since SDL 3.0 .0 .
2018-10-22 23:34:03 -06:00
*/
2022-12-31 12:19:32 -07:00
extern DECLSPEC int SDLCALL SDL_RenderLines ( SDL_Renderer * renderer , const SDL_FPoint * points , int count ) ;
2018-10-22 23:34:03 -06:00
/**
2021-03-21 12:18:39 -06:00
* Draw a rectangle on the current rendering target at subpixel precision .
2018-10-22 23:34:03 -06:00
*
2021-03-21 12:18:39 -06:00
* \ param renderer The renderer which should draw a rectangle .
2021-07-14 15:07:04 -06:00
* \ param rect A pointer to the destination rectangle , or NULL to outline the
* entire rendering target .
2023-02-10 14:26:35 -07:00
* \ returns 0 on success , or - 1 on error
2021-10-26 19:36:05 -06:00
*
2022-11-22 15:40:14 -07:00
* \ since This function is available since SDL 3.0 .0 .
2018-10-22 23:34:03 -06:00
*/
2022-12-31 12:19:32 -07:00
extern DECLSPEC int SDLCALL SDL_RenderRect ( SDL_Renderer * renderer , const SDL_FRect * rect ) ;
2018-10-22 23:34:03 -06:00
/**
2021-03-21 12:18:39 -06:00
* Draw some number of rectangles on the current rendering target at subpixel
* precision .
2018-10-22 23:34:03 -06:00
*
2021-03-21 12:18:39 -06:00
* \ param renderer The renderer which should draw multiple rectangles .
* \ param rects A pointer to an array of destination rectangles .
* \ param count The number of rectangles .
2023-02-12 02:09:42 -07:00
* \ returns 0 on success or a negative error code on failure ; call
* SDL_GetError ( ) for more information .
2021-10-26 19:36:05 -06:00
*
2022-11-22 15:40:14 -07:00
* \ since This function is available since SDL 3.0 .0 .
2018-10-22 23:34:03 -06:00
*/
2022-12-31 12:19:32 -07:00
extern DECLSPEC int SDLCALL SDL_RenderRects ( SDL_Renderer * renderer , const SDL_FRect * rects , int count ) ;
2018-10-22 23:34:03 -06:00
/**
2021-07-14 15:07:04 -06:00
* Fill a rectangle on the current rendering target with the drawing color at
* subpixel precision .
2018-10-22 23:34:03 -06:00
*
2021-03-21 12:18:39 -06:00
* \ param renderer The renderer which should fill a rectangle .
* \ param rect A pointer to the destination rectangle , or NULL for the entire
* rendering target .
2023-02-10 14:26:35 -07:00
* \ returns 0 on success , or - 1 on error
2021-10-26 19:36:05 -06:00
*
2022-11-22 15:40:14 -07:00
* \ since This function is available since SDL 3.0 .0 .
2018-10-22 23:34:03 -06:00
*/
2022-12-31 12:19:32 -07:00
extern DECLSPEC int SDLCALL SDL_RenderFillRect ( SDL_Renderer * renderer , const SDL_FRect * rect ) ;
2018-10-22 23:34:03 -06:00
/**
2021-03-21 12:18:39 -06:00
* Fill some number of rectangles on the current rendering target with the
* drawing color at subpixel precision .
2018-10-22 23:34:03 -06:00
*
2021-03-21 12:18:39 -06:00
* \ param renderer The renderer which should fill multiple rectangles .
* \ param rects A pointer to an array of destination rectangles .
* \ param count The number of rectangles .
2023-02-12 02:09:42 -07:00
* \ returns 0 on success or a negative error code on failure ; call
* SDL_GetError ( ) for more information .
2021-10-26 19:36:05 -06:00
*
2022-11-22 15:40:14 -07:00
* \ since This function is available since SDL 3.0 .0 .
2018-10-22 23:34:03 -06:00
*/
2022-12-31 12:19:32 -07:00
extern DECLSPEC int SDLCALL SDL_RenderFillRects ( SDL_Renderer * renderer , const SDL_FRect * rects , int count ) ;
2018-10-22 23:34:03 -06:00
/**
2021-03-21 12:18:39 -06:00
* Copy a portion of the texture to the current rendering target at subpixel
* precision .
2018-10-22 23:34:03 -06:00
*
2021-03-21 12:18:39 -06:00
* \ param renderer The renderer which should copy parts of a texture .
* \ param texture The source texture .
* \ param srcrect A pointer to the source rectangle , or NULL for the entire
* texture .
* \ param dstrect A pointer to the destination rectangle , or NULL for the
* entire rendering target .
2023-02-10 14:26:35 -07:00
* \ returns 0 on success , or - 1 on error
2021-10-26 19:36:05 -06:00
*
2022-11-22 15:40:14 -07:00
* \ since This function is available since SDL 3.0 .0 .
2018-10-22 23:34:03 -06:00
*/
2023-03-02 09:56:54 -07:00
extern DECLSPEC int SDLCALL SDL_RenderTexture ( SDL_Renderer * renderer , SDL_Texture * texture , const SDL_FRect * srcrect , const SDL_FRect * dstrect ) ;
2018-10-22 23:34:03 -06:00
/**
2021-07-14 15:07:04 -06:00
* Copy a portion of the source texture to the current rendering target , with
* rotation and flipping , at subpixel precision .
2018-10-22 23:34:03 -06:00
*
2021-03-21 12:18:39 -06:00
* \ param renderer The renderer which should copy parts of a texture .
* \ param texture The source texture .
* \ param srcrect A pointer to the source rectangle , or NULL for the entire
* texture .
* \ param dstrect A pointer to the destination rectangle , or NULL for the
* entire rendering target .
2021-07-14 15:07:04 -06:00
* \ param angle An angle in degrees that indicates the rotation that will be
* applied to dstrect , rotating it in a clockwise direction
* \ param center A pointer to a point indicating the point around which
* dstrect will be rotated ( if NULL , rotation will be done
* around dstrect . w / 2 , dstrect . h / 2 ) .
2024-01-20 07:33:19 -07:00
* \ param flip An SDL_FlipMode value stating which flipping actions should be
* performed on the texture
2023-02-12 02:09:42 -07:00
* \ returns 0 on success or a negative error code on failure ; call
* SDL_GetError ( ) for more information .
2021-10-26 19:36:05 -06:00
*
2022-11-22 15:40:14 -07:00
* \ since This function is available since SDL 3.0 .0 .
2018-10-22 23:34:03 -06:00
*/
2022-12-31 12:19:32 -07:00
extern DECLSPEC int SDLCALL SDL_RenderTextureRotated ( SDL_Renderer * renderer , SDL_Texture * texture ,
2023-03-02 09:56:54 -07:00
const SDL_FRect * srcrect , const SDL_FRect * dstrect ,
2022-12-31 12:19:32 -07:00
const double angle , const SDL_FPoint * center ,
2024-01-20 07:31:37 -07:00
const SDL_FlipMode flip ) ;
2018-10-22 23:34:03 -06:00
2021-04-01 01:55:00 -06:00
/**
2021-08-18 16:13:05 -06:00
* Render a list of triangles , optionally using a texture and indices into the
* vertex array Color and alpha modulation is done per vertex
* ( SDL_SetTextureColorMod and SDL_SetTextureAlphaMod are ignored ) .
2021-04-01 01:55:00 -06:00
*
2022-03-27 10:52:04 -06:00
* \ param renderer The rendering context .
2021-08-18 16:13:05 -06:00
* \ param texture ( optional ) The SDL texture to use .
* \ param vertices Vertices .
* \ param num_vertices Number of vertices .
* \ param indices ( optional ) An array of integer indices into the ' vertices '
* array , if NULL all vertices will be rendered in sequential
* order .
* \ param num_indices Number of indices .
2023-02-10 14:26:35 -07:00
* \ returns 0 on success , or - 1 if the operation is not supported
2021-04-01 01:55:00 -06:00
*
2022-11-22 15:40:14 -07:00
* \ since This function is available since SDL 3.0 .0 .
2021-10-26 19:36:05 -06:00
*
2022-01-10 13:40:05 -07:00
* \ sa SDL_RenderGeometryRaw
2021-08-18 16:13:05 -06:00
* \ sa SDL_Vertex
2021-04-01 01:55:00 -06:00
*/
extern DECLSPEC int SDLCALL SDL_RenderGeometry ( SDL_Renderer * renderer ,
SDL_Texture * texture ,
const SDL_Vertex * vertices , int num_vertices ,
const int * indices , int num_indices ) ;
2021-03-16 08:07:44 -06:00
/**
2021-08-18 16:13:05 -06:00
* Render a list of triangles , optionally using a texture and indices into the
* vertex arrays Color and alpha modulation is done per vertex
* ( SDL_SetTextureColorMod and SDL_SetTextureAlphaMod are ignored ) .
*
2022-03-27 10:52:04 -06:00
* \ param renderer The rendering context .
2021-08-18 16:13:05 -06:00
* \ param texture ( optional ) The SDL texture to use .
* \ param xy Vertex positions
* \ param xy_stride Byte size to move from one element to the next element
* \ param color Vertex colors ( as SDL_Color )
* \ param color_stride Byte size to move from one element to the next element
* \ param uv Vertex normalized texture coordinates
* \ param uv_stride Byte size to move from one element to the next element
* \ param num_vertices Number of vertices .
* \ param indices ( optional ) An array of indices into the ' vertices ' arrays ,
* if NULL all vertices will be rendered in sequential order .
* \ param num_indices Number of indices .
* \ param size_indices Index size : 1 ( byte ) , 2 ( short ) , 4 ( int )
2023-02-12 02:09:42 -07:00
* \ returns 0 on success or a negative error code on failure ; call
* SDL_GetError ( ) for more information .
2021-10-26 19:36:05 -06:00
*
2022-11-22 15:40:14 -07:00
* \ since This function is available since SDL 3.0 .0 .
2022-01-10 13:35:04 -07:00
*
* \ sa SDL_RenderGeometry
* \ sa SDL_Vertex
2021-03-16 08:07:44 -06:00
*/
2021-04-01 01:49:16 -06:00
extern DECLSPEC int SDLCALL SDL_RenderGeometryRaw ( SDL_Renderer * renderer ,
2021-03-16 08:07:44 -06:00
SDL_Texture * texture ,
2021-04-01 01:49:16 -06:00
const float * xy , int xy_stride ,
2021-12-14 02:31:55 -07:00
const SDL_Color * color , int color_stride ,
2021-04-01 01:49:16 -06:00
const float * uv , int uv_stride ,
int num_vertices ,
2021-04-23 04:00:14 -06:00
const void * indices , int num_indices , int size_indices ) ;
2021-03-16 08:07:44 -06:00
2015-06-21 09:33:46 -06:00
/**
2021-03-21 12:18:39 -06:00
* Read pixels from the current rendering target to an array of pixels .
2015-06-21 09:33:46 -06:00
*
2021-03-21 12:18:39 -06:00
* * * WARNING * * : This is a very slow operation , and should not be used
2022-03-18 11:30:05 -06:00
* frequently . If you ' re using this on the main rendering target , it should be
* called after rendering and before SDL_RenderPresent ( ) .
2015-06-21 09:33:46 -06:00
*
2021-03-21 12:18:39 -06:00
* ` pitch ` specifies the number of bytes between rows in the destination
2021-07-23 12:29:04 -06:00
* ` pixels ` data . This allows you to write to a subrectangle or have padded
2021-03-21 12:18:39 -06:00
* rows in the destination . Generally , ` pitch ` should equal the number of
* pixels per row in the ` pixels ` data times the number of bytes per pixel ,
* but it might contain additional padding ( for example , 24 bit RGB Windows
* Bitmap data pads all rows to multiples of 4 bytes ) .
2015-06-21 09:33:46 -06:00
*
2021-03-21 12:18:39 -06:00
* \ param renderer the rendering context
2023-02-03 13:25:46 -07:00
* \ param rect an SDL_Rect structure representing the area in pixels relative
* to the to current viewport , or NULL for the entire viewport
2021-03-21 12:18:39 -06:00
* \ param format an SDL_PixelFormatEnum value of the desired format of the
* pixel data , or 0 to use the format of the rendering target
* \ param pixels a pointer to the pixel data to copy into
* \ param pitch the pitch of the ` pixels ` parameter
* \ returns 0 on success or a negative error code on failure ; call
* SDL_GetError ( ) for more information .
2021-10-26 19:36:05 -06:00
*
2022-11-22 15:40:14 -07:00
* \ since This function is available since SDL 3.0 .0 .
2015-06-21 09:33:46 -06:00
*/
2022-12-31 12:19:32 -07:00
extern DECLSPEC int SDLCALL SDL_RenderReadPixels ( SDL_Renderer * renderer ,
const SDL_Rect * rect ,
2015-06-21 09:33:46 -06:00
Uint32 format ,
void * pixels , int pitch ) ;
/**
2021-07-14 15:07:04 -06:00
* Update the screen with any rendering performed since the previous call .
2021-03-21 12:18:39 -06:00
*
* SDL ' s rendering functions operate on a backbuffer ; that is , calling a
2023-01-25 10:58:29 -07:00
* rendering function such as SDL_RenderLine ( ) does not directly put a line on
* the screen , but rather updates the backbuffer . As such , you compose your
* entire scene and * present * the composed backbuffer to the screen as a
2021-03-21 12:18:39 -06:00
* complete picture .
*
* Therefore , when using SDL ' s rendering API , one does all drawing intended
* for the frame , and then calls this function once per frame to present the
* final drawing to the user .
*
* The backbuffer should be considered invalidated after each present ; do not
* assume that previous contents will exist between frames . You are strongly
* encouraged to call SDL_RenderClear ( ) to initialize the backbuffer before
* starting each new frame ' s drawing , even if you plan to overwrite every
* pixel .
*
* \ param renderer the rendering context
2023-02-06 12:24:12 -07:00
* \ returns 0 on success or a negative error code on failure ; call
* SDL_GetError ( ) for more information .
2021-03-21 12:18:39 -06:00
*
2023-01-25 11:15:34 -07:00
* \ threadsafety You may only call this function on the main thread .
2021-10-26 19:36:05 -06:00
*
2023-01-25 10:58:29 -07:00
* \ since This function is available since SDL 3.0 .0 .
2023-01-24 20:13:25 -07:00
*
2021-03-21 12:18:39 -06:00
* \ sa SDL_RenderClear
2022-12-27 07:21:13 -07:00
* \ sa SDL_RenderLine
* \ sa SDL_RenderLines
* \ sa SDL_RenderPoint
* \ sa SDL_RenderPoints
* \ sa SDL_RenderRect
* \ sa SDL_RenderRects
2021-03-21 12:18:39 -06:00
* \ sa SDL_RenderFillRect
* \ sa SDL_RenderFillRects
* \ sa SDL_SetRenderDrawBlendMode
* \ sa SDL_SetRenderDrawColor
2015-06-21 09:33:46 -06:00
*/
2023-02-06 12:24:12 -07:00
extern DECLSPEC int SDLCALL SDL_RenderPresent ( SDL_Renderer * renderer ) ;
2015-06-21 09:33:46 -06:00
/**
2021-03-21 12:18:39 -06:00
* Destroy the specified texture .
*
* Passing NULL or an otherwise invalid texture will set the SDL error message
* to " Invalid texture " .
*
* \ param texture the texture to destroy
2015-06-21 09:33:46 -06:00
*
2022-11-22 15:40:14 -07:00
* \ since This function is available since SDL 3.0 .0 .
2021-10-26 19:36:05 -06:00
*
2021-03-21 12:18:39 -06:00
* \ sa SDL_CreateTexture
* \ sa SDL_CreateTextureFromSurface
2015-06-21 09:33:46 -06:00
*/
2023-02-09 08:53:47 -07:00
extern DECLSPEC void SDLCALL SDL_DestroyTexture ( SDL_Texture * texture ) ;
2015-06-21 09:33:46 -06:00
/**
2021-03-21 12:18:39 -06:00
* Destroy the rendering context for a window and free associated textures .
2015-06-21 09:33:46 -06:00
*
2022-08-21 08:05:04 -06:00
* If ` renderer ` is NULL , this function will return immediately after setting
* the SDL error message to " Invalid renderer " . See SDL_GetError ( ) .
2022-08-20 11:50:04 -06:00
*
2021-03-21 12:18:39 -06:00
* \ param renderer the rendering context
*
2022-11-22 15:40:14 -07:00
* \ since This function is available since SDL 3.0 .0 .
2021-10-26 19:36:05 -06:00
*
2021-03-21 12:18:39 -06:00
* \ sa SDL_CreateRenderer
2015-06-21 09:33:46 -06:00
*/
2023-02-09 08:53:47 -07:00
extern DECLSPEC void SDLCALL SDL_DestroyRenderer ( SDL_Renderer * renderer ) ;
2015-06-21 09:33:46 -06:00
2018-10-04 14:34:44 -06:00
/**
2023-11-25 20:41:23 -07:00
* Force the rendering context to flush any pending commands and state .
2021-03-21 12:18:39 -06:00
*
2021-07-14 15:07:04 -06:00
* You do not need to ( and in fact , shouldn ' t ) call this function unless you
2023-11-25 20:41:23 -07:00
* are planning to call into OpenGL / Direct3D / Metal / whatever directly , in
2021-07-14 15:07:04 -06:00
* addition to using an SDL_Renderer .
2021-03-21 12:18:39 -06:00
*
2023-11-20 18:26:12 -07:00
* This is for a very - specific case : if you are using SDL ' s render API , and
* you plan to make OpenGL / D3D / whatever calls in addition to SDL render API
2023-11-25 20:41:23 -07:00
* calls . If this applies , you should call this function between calls to
2023-11-20 18:26:12 -07:00
* SDL ' s render API and the low - level API you ' re using in cooperation .
*
* In all other cases , you can ignore this function .
2018-10-04 14:34:44 -06:00
*
2023-11-30 08:22:19 -07:00
* This call makes SDL flush any pending rendering work it was queueing up to
* do later in a single batch , and marks any internal cached state as invalid ,
* so it ' ll prepare all its state again later , from scratch .
2023-11-25 20:41:23 -07:00
*
* This means you do not need to save state in your rendering code to protect
2023-11-30 08:22:19 -07:00
* the SDL renderer . However , there lots of arbitrary pieces of Direct3D and
* OpenGL state that can confuse things ; you should use your best judgement
* and be prepared to make changes if specific state needs to be protected .
2023-11-25 20:41:23 -07:00
*
2021-03-21 12:18:39 -06:00
* \ param renderer the rendering context
* \ returns 0 on success or a negative error code on failure ; call
* SDL_GetError ( ) for more information .
2018-10-04 14:34:44 -06:00
*
2022-11-22 15:40:14 -07:00
* \ since This function is available since SDL 3.0 .0 .
2018-10-04 14:34:44 -06:00
*/
2023-11-25 20:41:23 -07:00
extern DECLSPEC int SDLCALL SDL_FlushRenderer ( SDL_Renderer * renderer ) ;
2018-10-04 14:34:44 -06:00
2017-12-08 15:30:10 -07:00
/**
2021-03-21 12:18:39 -06:00
* Get the CAMetalLayer associated with the given Metal renderer .
2017-12-08 15:30:10 -07:00
*
2021-03-21 12:18:39 -06:00
* This function returns ` void * ` , so SDL doesn ' t have to include Metal ' s
* headers , but it can be safely cast to a ` CAMetalLayer * ` .
2017-12-08 15:30:10 -07:00
*
2021-03-21 12:18:39 -06:00
* \ param renderer The renderer to query
2021-07-14 15:07:04 -06:00
* \ returns a ` CAMetalLayer * ` on success , or NULL if the renderer isn ' t a
* Metal renderer
2017-12-08 15:30:10 -07:00
*
2022-11-22 15:40:14 -07:00
* \ since This function is available since SDL 3.0 .0 .
2021-10-26 19:36:05 -06:00
*
2022-12-27 07:21:13 -07:00
* \ sa SDL_GetRenderMetalCommandEncoder
2017-12-08 15:30:10 -07:00
*/
2022-12-31 12:19:32 -07:00
extern DECLSPEC void * SDLCALL SDL_GetRenderMetalLayer ( SDL_Renderer * renderer ) ;
2017-12-08 15:30:10 -07:00
/**
2021-03-21 12:18:39 -06:00
* Get the Metal command encoder for the current frame
2017-12-08 15:30:10 -07:00
*
2021-03-21 12:18:39 -06:00
* This function returns ` void * ` , so SDL doesn ' t have to include Metal ' s
* headers , but it can be safely cast to an ` id < MTLRenderCommandEncoder > ` .
2017-12-08 15:30:10 -07:00
*
2021-11-10 13:21:01 -07:00
* Note that as of SDL 2.0 .18 , this will return NULL if Metal refuses to give
* SDL a drawable to render to , which might happen if the window is
2021-11-09 09:50:49 -07:00
* hidden / minimized / offscreen . This doesn ' t apply to command encoders for
2023-08-06 08:45:11 -06:00
* render targets , just the window ' s backbuffer . Check your return values !
2021-11-09 09:50:49 -07:00
*
2021-03-21 12:18:39 -06:00
* \ param renderer The renderer to query
2021-07-14 15:07:04 -06:00
* \ returns an ` id < MTLRenderCommandEncoder > ` on success , or NULL if the
2021-11-09 09:50:49 -07:00
* renderer isn ' t a Metal renderer or there was an error .
2017-12-08 15:30:10 -07:00
*
2022-11-22 15:40:14 -07:00
* \ since This function is available since SDL 3.0 .0 .
2021-10-26 19:36:05 -06:00
*
2022-12-27 07:21:13 -07:00
* \ sa SDL_GetRenderMetalLayer
2017-12-08 15:30:10 -07:00
*/
2022-12-31 12:19:32 -07:00
extern DECLSPEC void * SDLCALL SDL_GetRenderMetalCommandEncoder ( SDL_Renderer * renderer ) ;
2015-06-21 09:33:46 -06:00
2021-03-07 16:20:45 -07:00
/**
* Toggle VSync of the given renderer .
*
* \ param renderer The renderer to toggle
2021-09-14 16:51:17 -06:00
* \ param vsync 1 for on , 0 for off . All other values are reserved
2023-02-12 02:09:42 -07:00
* \ returns 0 on success or a negative error code on failure ; call
* SDL_GetError ( ) for more information .
2021-10-26 19:36:05 -06:00
*
2022-11-22 15:40:14 -07:00
* \ since This function is available since SDL 3.0 .0 .
2021-03-07 16:20:45 -07:00
*/
2022-12-31 12:19:32 -07:00
extern DECLSPEC int SDLCALL SDL_SetRenderVSync ( SDL_Renderer * renderer , int vsync ) ;
2021-03-07 16:20:45 -07:00
2023-01-02 12:21:02 -07:00
/**
* Get VSync of the given renderer .
*
* \ param renderer The renderer to toggle
2023-01-25 10:58:29 -07:00
* \ param vsync an int filled with 1 for on , 0 for off . All other values are
* reserved
2023-02-12 02:09:42 -07:00
* \ returns 0 on success or a negative error code on failure ; call
* SDL_GetError ( ) for more information .
2023-01-02 12:21:02 -07:00
*
* \ since This function is available since SDL 3.0 .0 .
*/
extern DECLSPEC int SDLCALL SDL_GetRenderVSync ( SDL_Renderer * renderer , int * vsync ) ;
2015-06-21 09:33:46 -06:00
/* Ends C function definitions when using C++ */
# ifdef __cplusplus
}
# endif
2022-12-22 09:38:59 -07:00
# include <SDL3/SDL_close_code.h>
2015-06-21 09:33:46 -06:00
2016-11-20 22:34:54 -07:00
# endif /* SDL_render_h_ */