/// Gets the main graphics command queue associated with this effect runtime.
/// This may potentially be different from the presentation queue and should be used to execute graphics commands on.
/// </summary>
virtualcommand_queue*get_command_queue()=0;
/// <summary>
/// Applies post-processing effects to the specified render targets and prevents the usual rendering of effects before swap chain presentation of the current frame.
/// This can be used to force ReShade to render effects at a certain point during the frame to e.g. avoid effects being applied to user interface elements of the application.
/// </summary>
/// <remarks>
/// The resource the render target views point to has to be in the <see cref="resource_usage::render_target"/> state.
/// This call may modify current state on the command list (pipeline, render targets, descriptor tables, ...), so it may be necessary for an add-on to backup and restore state around it if the application does not bind all state again afterwards already.
/// Calling this with <paramref name="rtv"/> set to zero will cause nothing to be rendered, but uniform variables to still be updated.
/// Calling this triggers a <see cref="addon_event::reshade_begin_effects" /> and <see cref="addon_event::reshade_finish_effects" /> event in other add-ons.
/// <param name="cmd_list">Command list to add effect rendering commands to.</param>
/// <param name="rtv">Render target view to use for passes that write to the back buffer with <c>SRGBWriteEnabled</c> state set to <see langword="false"/> (this should be a render target view of the target resource, created with a non-sRGB format variant).</param>
/// <param name="rtv_srgb">Render target view to use for passes that write to the back buffer with <c>SRGBWriteEnabled</c> state set to <see langword="true"/> (this should be a render target view of the target resource, created with a sRGB format variant).</param>
/// Captures a screenshot of the current back buffer resource and returns its image data.
/// </summary>
/// <param name="pixels">Pointer to an array of <c>width * height * bpp</c> bytes the image data is written to (where <c>bpp</c> is the number of bytes per pixel of the back buffer format).</param>
virtualboolcapture_screenshot(void*pixels)=0;
/// <summary>
/// Gets the current buffer dimensions of the swap chain.
/// Enumerates all uniform variables of loaded effects and calls the specified <paramref name="callback"/> function with a handle for each one.
/// </summary>
/// <param name="effect_name">File name of the effect file to enumerate uniform variables from, or <see langword="nullptr"/> to enumerate those of all loaded effects.</param>
/// <param name="callback">Function to call for every uniform variable.</param>
/// <param name="user_data">Optional pointer passed to the callback function.</param>
/// Enumerates all uniform variables of loaded effects and calls the specified callback function with a handle for each one.
/// </summary>
/// <param name="effect_name">File name of the effect file to enumerate uniform variables from, or <see langword="nullptr"/> to enumerate those of all loaded effects.</param>
/// <param name="lambda">Function to call for every uniform variable.</param>
/// Finds a specific uniform variable in the loaded effects and returns a handle to it.
/// </summary>
/// <remarks>
/// This will not find uniform variables when performance mode is enabled, since in that case uniform variables are replaced with constants during effect compilation.
/// <param name="effect_name">File name of the effect file the variable is declared in, or <see langword="nullptr"/> to search in all loaded effects.</param>
/// <param name="variable_name">Name of the uniform variable declaration to find.</param>
/// <returns>Opaque handle to the uniform variable, or zero in case it was not found.</returns>
/// Gets information about the data type of a uniform <paramref name="variable"/>.
/// </summary>
/// <param name="variable">Opaque handle to the uniform variable.</param>
/// <param name="out_base_type">Optional pointer to a variable that is set to the base type of the uniform variable (<see cref="format::r32_typeless"/>, <see cref="format::r32_sint"/>, <see cref="format::r32_uint"/> or <see cref="format::r32_float"/>).</param>
/// <param name="out_rows">Optional pointer to a variable that is set to the number of vector rows of the uniform variable type.</param>
/// <param name="out_columns">Optional pointer to a variable that is set to the number of matrix column of the uniform variable type.</param>
/// <param name="out_array_length">Optional pointer to a variable that is set to the number of array elements of the uniform variable type.</param>
/// Gets the name of a uniform <paramref name="variable"/>.
/// </summary>
/// <param name="variable">Opaque handle to the uniform variable.</param>
/// <param name="name">Pointer to a string buffer that is filled with the name of the uniform variable, or <see langword="nullptr"/> to query the necessary size.</param>
/// <param name="name_size">Pointer to an integer that contains the size of the string buffer and is set to the actual length of the string, including the null-terminator.</param>
/// Gets the value from a string annotation attached to the specified uniform <paramref name="variable"/>.
/// </summary>
/// <param name="variable">Opaque handle to the uniform variable.</param>
/// <param name="name">Name of the annotation.</param>
/// <param name="value">Pointer to a string buffer that is filled with the value of the annotation, or <see langword="nullptr"/> to query the necessary size.</param>
/// <param name="value_size">Pointer to an integer that contains the size of the string buffer and is set to the actual length of the string, including the null-terminator.</param>
/// <returns><see langword="true"/> if the annotation exists on the uniform variable, <see langword="false"/> otherwise.</returns>
/// Enumerates all texture variables of loaded effects and calls the specified <paramref name="callback"/> function with a handle for each one.
/// </summary>
/// <param name="effect_name">File name of the effect file to enumerate texture variables from, or <see langword="nullptr"/> to enumerate those of all loaded effects.</param>
/// <param name="callback">Function to call for every texture variable.</param>
/// <param name="user_data">Optional pointer passed to the callback function.</param>
/// Enumerates all texture variables of loaded effects and calls the specified callback function with a handle for each one.
/// </summary>
/// <param name="effect_name">File name of the effect file to enumerate texture variables from, or <see langword="nullptr"/> to enumerate those of all loaded effects.</param>
/// <param name="lambda">Function to call for every texture variable.</param>
/// Finds a specific texture variable in the loaded effects and returns a handle to it.
/// </summary>
/// <param name="effect_name">File name of the effect file the variable is declared in, or <see langword="nullptr"/> to search in all loaded effects.</param>
/// <param name="variable_name">Name of the texture variable declaration to find.</param>
/// <returns>Opaque handle to the texture variable, or zero in case it was not found.</returns>
/// Gets the name of a texture <paramref name="variable"/>.
/// </summary>
/// <param name="variable">Opaque handle to the texture variable.</param>
/// <param name="name">Pointer to a string buffer that is filled with the name of the texture variable, or <see langword="nullptr"/> to query the necessary size.</param>
/// <param name="name_size">Pointer to an integer that contains the size of the string buffer and is set to the actual length of the string, including the null-terminator.</param>
/// Gets the value from a string annotation attached to the specified texture <paramref name="variable"/>.
/// </summary>
/// <param name="variable">Opaque handle to the texture variable.</param>
/// <param name="name">Name of the annotation.</param>
/// <param name="value">Pointer to a string buffer that is filled with the value of the annotation, or <see langword="nullptr"/> to query the necessary size.</param>
/// <param name="value_size">Pointer to an integer that contains the size of the string buffer and is set to the actual length of the string, including the null-terminator.</param>
/// <returns><see langword="true"/> if the annotation exists on the texture variable, <see langword="false"/> otherwise.</returns>
/// Uploads image data to the specified texture <paramref name="variable"/>.
/// </summary>
/// <param name="variable">Opaque handle to the texture variable.</param>
/// <param name="width">Width of the image data.</param>
/// <param name="height">Height of the image data.</param>
/// <param name="pixels">Pointer to an array of <c>width * height * bpp</c> bytes the image data is read from (where <c>bpp</c> is the number of bytes per pixel of the texture format).</param>
/// Binds new shader resource views to all texture variables that use the specified <paramref name="semantic"/>.
/// </summary>
/// <remarks>
/// The resource the shader resource views point to has to be in the <see cref="resource_usage::shader_resource"/> state at the time <see cref="render_effects"/> or <see cref="render_technique"/> is executed.
/// </remarks>
/// <param name="semantic">ReShade FX semantic to filter textures to update by (<c>texture name : SEMANTIC</c>).</param>
/// <param name="srv">Shader resource view to use for samplers with <c>SRGBTexture</c> state set to <see langword="false"/> (this should be a shader resource view of the target resource, created with a non-sRGB format variant).</param>
/// <param name="srv_srgb">Shader resource view to use for samplers with <c>SRGBTexture</c> state set to <see langword="true"/> (this should be a shader resource view of the target resource, created with a sRGB format variant).</param>
/// Enumerates all techniques of loaded effects and calls the specified <paramref name="callback"/> function with a handle for each one.
/// </summary>
/// <param name="effect_name">File name of the effect file to enumerate techniques from, or <see langword="nullptr"/> to enumerate those of all loaded effects.</param>
/// <param name="callback">Function to call for every technique.</param>
/// <param name="user_data">Optional pointer passed to the callback function.</param>
/// Enumerates all techniques of loaded effects and calls the specified callback function with a handle for each one.
/// </summary>
/// <param name="effect_name">File name of the effect file to enumerate techniques from, or <see langword="nullptr"/> to enumerate those of all loaded effects.</param>
/// <param name="lambda">Function to call for every technique.</param>
/// Finds a specific technique in the loaded effects and returns a handle to it.
/// </summary>
/// <param name="effect_name">File name of the effect file the technique is declared in, or <see langword="nullptr"/> to search in all loaded effects.</param>
/// <param name="technique_name">Name of the technique to find.</param>
/// <returns>Opaque handle to the technique, or zero in case it was not found.</returns>
/// Gets the name of a <paramref name="technique"/>.
/// </summary>
/// <param name="technique">Opaque handle to the technique.</param>
/// <param name="name">Pointer to a string buffer that is filled with the name of the technique, or <see langword="nullptr"/> to query the necessary size.</param>
/// <param name="name_size">Pointer to an integer that contains the size of the string buffer and is set to the actual length of the string, including the null-terminator.</param>
/// Gets the value from a string annotation attached to the specified <paramref name="technique"/>.
/// </summary>
/// <param name="technique">Opaque handle to the technique.</param>
/// <param name="name">Name of the annotation.</param>
/// <param name="value">Pointer to a string buffer that is filled with the value of the annotation, or <see langword="nullptr"/> to query the necessary size.</param>
/// <param name="value_size">Pointer to an integer that contains the size of the string buffer and is set to the actual length of the string, including the null-terminator.</param>
/// <returns><see langword="true"/> if the annotation exists on the technique, <see langword="false"/> otherwise.</returns>
/// <param name="name">Name of the definition.</param>
/// <param name="value">Pointer to a string buffer that is filled with the value of the definition, or <see langword="nullptr"/> to query the necessary size.</param>
/// <param name="value_size">Pointer to an integer that contains the size of the string buffer and is set to the actual length of the string, including the null-terminator.</param>
/// <returns><see langword="true"/> if the preprocessor definition is defined, <see langword="false"/> otherwise.</returns>
/// Applies a <paramref name="technique"/> to the specified render targets (regardless of the state of this technique).
/// </summary>
/// <remarks>
/// The width and height of the specified render target should match those used to render all other effects!
/// The resource the render target views point to has to be in the <see cref="resource_usage::render_target"/> state.
/// This call may modify current state on the command list (pipeline, render targets, descriptor tables, ...), so it may be necessary for an add-on to backup and restore state around it if the application does not bind all state again afterwards already.
/// <param name="technique">Opaque handle to the technique.</param>
/// <param name="cmd_list">Command list to add effect rendering commands to.</param>
/// <param name="rtv">Render target view to use for passes that write to the back buffer with <c>SRGBWriteEnabled</c> state set to <see langword="false"/>.</param>
/// <param name="rtv_srgb">Render target view to use for passes that write to the back buffer with <c>SRGBWriteEnabled</c> state set to <see langword="true"/>, or zero in which case the view from <paramref name="rtv"/> is used.</param>
/// <param name="enabled">Set to <see langword="true"/> to enable effects, or <see langword="false"/> to disable them.</param>
virtualvoidset_effects_state(boolenabled)=0;
/// <summary>
/// Gets the file path to the currently active preset.
/// </summary>
/// <param name="path">Pointer to a string buffer that is filled with the file path to the preset, or <see langword="nullptr"/> to query the necessary size.</param>
/// <param name="path_size">Pointer to an integer that contains the size of the string buffer and is set to the actual length of the string, including the null-terminator.</param>
/// Makes ReShade block any keyboard and mouse input from reaching the game for the duration of the next frame.
/// Call this every frame for as long as input should be blocked. This can be used to ensure input is only applied to overlays created in a <see cref="addon_event::reshade_overlay"/> callback.
/// </summary>
virtualvoidblock_input_next_frame()=0;
/// <summary>
/// Gets the virtual key code of the last key that was pressed.
/// </summary>
virtualuint32_tlast_key_pressed()const=0;
/// <summary>
/// Gets the virtual key code of the last key that was released.
/// </summary>
virtualuint32_tlast_key_released()const=0;
/// <summary>
/// Gets the effect file name of a uniform <paramref name="variable"/>.
/// </summary>
/// <param name="variable">Opaque handle to the uniform variable.</param>
/// <param name="effect_name">Pointer to a string buffer that is filled with the effect file name of the uniform variable, or <see langword="nullptr"/> to query the necessary size.</param>
/// <param name="effect_name_size">Pointer to an integer that contains the size of the string buffer and is set to the actual length of the string, including the null-terminator.</param>
/// Gets the effect file name of a texture <paramref name="variable"/>.
/// </summary>
/// <param name="variable">Opaque handle to the texture variable.</param>
/// <param name="effect_name">Pointer to a string buffer that is filled with the effect file name of the texture variable, or <see langword="nullptr"/> to query the necessary size.</param>
/// <param name="effect_name_size">Pointer to an integer that contains the size of the string buffer and is set to the actual length of the string, including the null-terminator.</param>
/// Gets the effect file name of a <paramref name="technique"/>.
/// </summary>
/// <param name="technique">Opaque handle to the technique.</param>
/// <param name="effect_name">Pointer to a string buffer that is filled with the effect file name of the technique, or <see langword="nullptr"/> to query the necessary size.</param>
/// <param name="effect_name_size">Pointer to an integer that contains the size of the string buffer and is set to the actual length of the string, including the null-terminator.</param>
/// Saves the current preset with the current state of the loaded techniques and uniform variables.
/// </summary>
virtualvoidsave_current_preset()const=0;
/// <summary>
/// Gets the value of a preprocessor definition for the specified effect.
/// </summary>
/// <param name="effect_name">File name of the effect file the preprocessor definition is defined for.</param>
/// <param name="name">Name of the definition.</param>
/// <param name="value">Pointer to a string buffer that is filled with the value of the definition, or <see langword="nullptr"/> to query the necessary size.</param>
/// <param name="value_size">Pointer to an integer that contains the size of the string buffer and upon completion is set to the actual length of the string, including the null-terminator.</param>
/// <returns><see langword="true"/> if the preprocessor definition is defined, <see langword="false"/> otherwise.</returns>