XGameStreamingGetLastFrameDisplayed

获取串流客户端屏幕上最近显示的帧的帧管道令牌。

语法

HRESULT XGameStreamingGetLastFrameDisplayed(  
         XGameStreamingClientId client,  
         D3D12XBOX_FRAME_PIPELINE_TOKEN* framePipelineToken  
)  

参数

client _In_
类型:XGameStreamingClientId

正在查询的流式处理客户端设备的 ID。

framePipelineToken _Out_
类型:D3D12XBOX_FRAME_PIPELINE_TOKEN*

客户端设备上最后显示的帧管道令牌。

返回值

类型:HRESULT

如果成功,则返回 S_OK;否则返回错误代码。

可能的错误

错误代码 错误值 错误原因
E_GAMESTREAMING_NOT_INITIALIZED 0x89245400 XGameStreaming 运行时尚未初始化。 在调用其他 API 之前,请先调用 XGameStreamingInitialize
E_GAMESTREAMING_CLIENT_NOT_CONNECTED 0x89245401 指定客户端未连接。
E_GAMESTREAMING_NO_DATA 0x89245402 请求的数据目前不可用, 稍后或许可用。

备注

当玩家流式处理游戏时,如果游戏需要在确认用户屏幕上显示的特定帧后更改游戏行为,则可以使用 XGameStreamingGetLastFrameDisplayed

当游戏可能使用此项的一些示例包括:

  • 视觉计时器已过期,并且玩家在过期之间没有执行任何操作。
  • 未在合适的时间段内执行操作。
  • 在超出边界的情况下玩家继续他们的动作并且没有执行任何恢复操作。

XGameStreamingGetLastFrameDisplayed 在尝试确定何时应执行操作时使用,但未使用。 如果游戏需要确定在玩家完成了输入时要显示的内容,则游戏应使用 XGameStreamingGetAssociatedFrame

示例

// In this example, when processing input, the game would like to pass along the last frame 
// that was being displayed to the player so that their simulation engine can take that into account.
 

// The framePipelineToken was initially captured at the callback of WaitFrameEventX

void Game::Update(DX::StepTimer const& timer)
{
    ...

    D3D12XBOX_FRAME_PIPELINE_TOKEN framePipelineToken = D3D12XBOX_FRAME_PIPELINE_TOKEN_NULL;
    if SUCCEEDED(XGameStreamingGetLastFrameDisplayed(clientId, &framePipelineToken)
    {
        SimulateBasedOnLastFrameDisplayed(framePipelineToken);
    }
    else 
    {
        // don't have last token, potentially simulate based on current frame

        SimulateBasedOnCurrentFrame();
    }

    
      
    ...
}

要求

头文件:xgamestreaming.h

库:xgameruntime.lib

支持平台:Windows、Xbox One 系列主机和 Xbox Series 主机

另请参阅

XGameStreamingGetAssociatedFrame
XGameStreaming
游戏流式传输延迟补偿概述