IGameInput::GetCurrentReading

Retrieves the most recent reading from the input stream that matches a caller-supplied filter.

Syntax

HRESULT GetCurrentReading(  
         GameInputKind inputKind,  
         IGameInputDevice* device,  
         IGameInputReading** reading  
)  

Parameters

inputKind   _In_
Type: GameInputKind

One of the enumeration values that designates the type of input device being used such as a controller, keyboard, mouse, or gamepad. Enumeration values can be combined to designate multiple types of input. When multiple input kinds are specified, any readings that contain at least one of the input kinds will be matched and returned.

device   _In_opt_
Type: IGameInputDevice*

An optional filter that returns readings from a specific device.

reading   _COM_Outptr_
Type: IGameInputReading**

The input reading to be returned. Returns NULL on failure.

Return value

Type: HRESULT

Function result.

Remarks

This function is used to initially access the input stream. You may use this function with the GetNextReading and GetPreviousReading methods to walk the input stream without missing inputs. Alternatively, you may continue to call GetCurrentReading to keep getting the most current reading if your game can permit some missing input.

The following code example demonstrates how to poll for the current gamepad state.

Microsoft::WRL::ComPtr<IGameInput> gameInput; 
 
void PollGamepadInput() noexcept 
{ 
    Microsoft::WRL::ComPtr<IGameInputReading> reading; 
 
    if (SUCCEEDED(gameInput->GetCurrentReading( 
        GameInputKindGamepad, 
        nullptr, 
        &reading))) 
    { 
        // Application-specific code to process the reading. 
    } 
}

The following code example demonstrates how to poll for the current gamepad state from a specific device.

Microsoft::WRL::ComPtr<IGameInput> gameInput; 
Microsoft::WRL::ComPtr<IGameInputDevice> gamepad; 
 
void PollGamepadInput() noexcept 
{ 
    Microsoft::WRL::ComPtr<IGameInputReading> reading; 
 
    if (SUCCEEDED(gameInput->GetCurrentReading( 
        GameInputKindGamepad, 
        gamepad.Get(), 
        &reading))) 
    { 
        // Lock onto the first device we find input from, since this 
        // must be the one the player is using (if it's generating input). 
        if (!gamepad) 
        { 
            reading->GetDevice(&gamepad); 
        } 
 
        // Application-specific code to process the reading. 
    } 
 
    else 
    { 
        // Go back to looking for a device to lock onto, if the previous one is gone. 
        gamepad = nullptr; 
    } 
}

The following code example demonstrates how to poll for all gamepad states from a specific device.

Microsoft::WRL::ComPtr<IGameInput> gameInput; 
Microsoft::WRL::ComPtr<IGameInputDevice> gamepad; 
Microsoft::WRL::ComPtr<IGameInputReading> prevReading; 
 
void PollGamepadInput() noexcept 
{ 
    if (!prevReading) 
    { 
        if (SUCCEEDED(gameInput->GetCurrentReading( 
            GameInputKindGamepad, 
            nullptr, 
            &prevReading))) 
        { 
            gamepad.Attach(prevReading->GetDevice()); 
 
            // Application-specific code to process the initial reading. 
        } 
    } 
 
    else 
    { 
        Microsoft::WRL::ComPtr<IGameInputReading> nextReading; 
        HRESULT hr = gameInput->GetNextReading( 
            prevReading.Get(), 
            GameInputKindGamepad, 
            gamepad.Get(), 
            &nextReading); 
 
        if (SUCCEEDED(hr)) 
        { 
            // Application-specific code to process the next reading. 
 
            prevReading = nextReading; 
        } 
 
        else if (hr != GAMEINPUT_E_READING_NOT_FOUND) 
        { 
            gamepad = nullptr; 
            prevReading = nullptr; 
        } 
    } 
}

Requirements

Header: GameInput.h

Library: xgameruntime.lib

Supported platforms: Windows, Xbox One family consoles and Xbox Series consoles

See also

Input API Overview
IGameInput_GetNextReading
IGameInput_GetPreviousReading
IGameInput