zoukankan      html  css  js  c++  java
  • 理解Directx之BeginScene/EndScene

    Directx的详细资料少得可怜,D3D9的BeginScene/EndScene写的含糊其词,终于在MSDN Embedded CE 6.0找到了点信息。

    Applications notify Microsoft® Direct3D® Mobile that scene rendering is about to begin by calling the IDirect3DMobileDevice::BeginScene method. BeginScene causes the system to check its internal data structures and the availability and validity of rendering surfaces. It also sets an internal flag to signal that a scene is in progress. After you begin a scene, you can call the various rendering methods to render the primitives or individual vertices that make up the objects in the scene. Attempts to call rendering methods when a scene is not in progress fail. For more information, see Rendering Primitives.

    After you complete the scene, call the IDirect3DMobileDevice::EndScene method. The EndScene method flushes cached data, verifies the integrity of rendering surfaces, and clears an internal flag that signals when a scene is in progress.

    All rendering methods must be bracketed by calls to the BeginScene and EndScene methods. If surfaces are lost or internal errors occur, the scene methods return error values. If BeginScene fails, the scene does not begin, and subsequent calls to EndScene will fail.

    To summarize these cases:

    • If BeginScene returns any error, you must not call EndScene because the scene has not successfully begun.
    • If BeginScene succeeds, but you get an error while rendering the scene, you must call EndScene.
    • If EndScene fails, for any reason, you need not call it again.

    For example, some simple scene code might look like the following example.

      1: HRESULT hr;
    
      2: 
    
      3: if(SUCCEEDED(pDevice->BeginScene()))
    
      4: {
    
      5:     // Render primitives only if the scene
    
      6:     // starts successfully.
    
      7:     
    
      8:     // Close the scene.
    
      9:     hr = pDevice->EndScene(); 
    
     10:     if(FAILED(hr))
    
     11:         return hr;
    
     12: }

    You cannot embed scenes; that is, you must complete rendering a scene before you can begin another one. Calling EndScene when BeginScene has not been called returns an error value. Likewise, calling BeginScene when a previous scene has not been completed with the EndScene method results in an error.


    有个困扰了我几天的一个问题,我的RT Object有时会BeginScene失败,错误码D3DERR_INVALIDCALL。但是在代码中看不到Beg/End的嵌套,也许是其他原因,如果有哪位大牛遇到类似的问题请赐教。



  • 相关阅读:
    WebApi调用及发布
    List<T> 去除重复数据
    C#正则表达式去除XML标签
    SSIS 发送邮件
    域登录验证.net版
    js获取select选中的值
    ionic常见错误
    mac安装brew homebrew
    flutter ios编译报错集
    dart 格式化输出
  • 原文地址:https://www.cnblogs.com/hucn/p/2049205.html
Copyright © 2011-2022 走看看