青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

4D星宇

c++

  C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
  57 隨筆 :: 0 文章 :: 39 評論 :: 0 Trackbacks

有Effect版:
    DWORD         g_dwShaderFlags; // Shader compilate and link flags
      LPD3DXBUFFER  g_pCompiledFragments = NULL; 

    D3DXGatherFragmentsFromFile( L"FragmentLinker.fx", NULL,
                NULL, g_dwShaderFlags, &g_pCompiledFragments, NULL );

D3DXGatherFragmentsFromFile requires the .fx file, pointers to the #define and #include handlers (both set to NULL in this example), and the shader compile flags. The method returns a buffer which contains the compiled shader fragment. The method can return a second buffer with compile errors, which is set to NULL in this example because it is not used. D3DXGatherFragments is overloaded to handle loading fragments from a string, a file, or a resource.

Set your debugger to break on this method to look for compile errors in the debugger. The compiler can catch errors in syntax, but it cannot check for registers that are shared incorrectly due to the fact that it has no way to predict which parameters a user may want to share between fragments.

You need a fragment linker to manage the compiled fragments. Create the fragment linker by calling D3DXCreateFragmentLinker:

ID3DXFragmentLinker* g_pFragmentLinker = NULL;     // Fragment linker interface
IDirect3DDevice9*    pd3dDevice        = NULL;

    // Initialize the device before using it
 ...
 
    // Create the fragment linker interface
    D3DXCreateFragmentLinker( pd3dDevice, 0, &g_pFragmentLinker );

Then simply add the compiled fragments to the fragment linker using ID3DXFragmentLinker::AddFragments.

    // Add the compiled fragments to a list
    g_pFragmentLinker->AddFragments(    
              (DWORD*)g_pCompiledFragments->GetBufferPointer() );

ID3DXFragmentLinker::AddFragments requires a pointer to the DWORD stream that contains the compiled shader.

After compiling fragments and creating a fragment linker, there are several ways to link fragments. One way to link a vertex shader fragment is to call ID3DXFragmentLinker::LinkVertexShader. Here is an example that links two vertex shader fragments:

    // Get a handle to each fragment   
    D3DXHANDLE fragmentHandle[2];
 fragmentHandle[0] =
     (D3DXHANDLE)g_pFragmentLinker->GetFragmentHandleByName("Ambient");
 fragmentHandle[1] =
     (D3DXHANDLE)g_pFragmentLinker->GetFragmentHandleByName("AmbientDiffuseFragment");
   
    // Link the fragments together to form a vertex shader
    IDirect3DVertexShader9* pVertexShader = NULL;
    g_pFragmentLinker->LinkVertexShader( "vs_1_1", g_dwShaderFlags,
           fragmentHandle, 2, &pVertexShader, NULL );

This requires a shader compile target, the shader compile and link flags, and a handle to each of the fragments to link. If the fragments are successfully linked, ID3DXFragmentLinker::LinkVertexShader returns a vertex shader (IDirect3DVertexShader9). The vertex shader needs to be set in the effect before rendering. But before this, here's how the shader is declared in the effect:

VertexShader MyVertexShader; // Vertex shader set by the application

The effect technique contains all the state set for a pass. This pass specifies the vertex shader like this:

technique RenderScene
{
    pass P0
    {
        VertexShader = <MyVertexShader>;   
        PixelShader = compile ps_1_1 ModulateTexture();   
    }

With the effect's vertex shader created and initialized, the render code also sets the uniform constants and calls the render loop. Set the uniform constants similar to this:

    // Update the uniform shader constants.
    g_pEffect->SetMatrix( "g_mWorldViewProjection", &mWorldViewProjection );
    g_pEffect->SetMatrix( "g_mWorld", &mWorld );
    g_pEffect->SetFloat( "g_fTime", (float)fTime );   
Then render the effect by setting the current technique and pass:

    // Render the scene
    if( SUCCEEDED( pd3dDevice->BeginScene() ) )
    { 
        // Apply the technique contained in the effect
        UINT cPasses, iPass;
        g_pEffect->Begin(&cPasses, 0);

        for (iPass = 0; iPass < cPasses; iPass++)
        {
            g_pEffect->BeginPass(iPass);

            // Render the mesh with the applied technique
            g_pMesh->DrawSubset(0);

            g_pEffect->EndPass();
        }
        g_pEffect->End();

        pd3dDevice->EndScene();
    }

When setting uniform shader constants, it is more efficient to cache a handle to the parameter by calling ID3DXBaseEffect::GetParameterByName. This avoids the string lookup that is necessary when calling effect methods like ID3DXBaseEffect::SetMatrix.

  // Instead of setting a uniform constant like this in the render loop
  g_pEffect->SetMatrix( "g_mWorldViewProjection", &mWorldViewProjection );

  // Get a handle to a uniform constant outside of the render loop
  D3DXHANDLE hParameter;
  GetParameterByName( hParameter,"g_mWorldViewProjection");

  ...
 
  // Use the handle to set the uniform constant in the render loop
  g_pEffect->SetMatrix(hParameter);

無Effect版:
 LPD3DXCONSTANTTABLE pConstantTable;
    LPD3DXBUFFER pShaderBuf;
    IDirect3DVertexShader9* pVertexShader = NULL;

    // Compile the fragments to a buffer.
    D3DXGatherFragmentsFromFile( L"FragmentLinker.fx", NULL, NULL,
         g_dwShaderFlags, &g_pCompiledFragments, NULL );
   
    g_pFragmentLinker->AddFragments((DWORD*)g_pCompiledFragments->GetBufferPointer());
    g_pFragmentLinker->LinkShader(
     "vs_1_1",
     g_dwShaderFlags,
     aHandles,
     NUM_FRAGMENTS,
     &pShaderBuf,
     NULL);
    D3DXGetShaderConstantTable(
     (DWORD*)pShaderBuf->GetBufferPointer(),
     &pConstantTable );
   
    pDevice->CreateVertexShader(
     (DWORD*)pShaderBuf->GetBufferPointer(),
     &pVertexShader);
    RELEASE(pShaderBuf);

posted on 2008-05-12 19:51 bloodbao 閱讀(473) 評論(0)  編輯 收藏 引用 所屬分類: c++
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            日韩视频免费大全中文字幕| 欧美视频免费在线| 国产精品福利在线观看| 亚洲黄色成人| 久久精品三级| 亚洲欧美资源在线| 国产精品久久久久一区二区三区共| 亚洲国产日韩一区| 久久久精品一区| 午夜久久电影网| 国产精品久久久久久久久久免费| 日韩视频在线一区| 亚洲黄一区二区三区| 久久久久se| 国产专区欧美精品| 久久久久久电影| 久久国产精品久久久久久久久久| 国产伦精品一区二区三区四区免费 | 一区二区不卡在线视频 午夜欧美不卡'| 欧美在线视频免费观看| 国产精品综合久久久| 亚洲一区精品视频| 亚洲午夜一级| 国产日韩在线一区| 久久久噜噜噜久久狠狠50岁| 欧美亚洲日本国产| 国内精品福利| 免费国产自线拍一欧美视频| 久久久综合香蕉尹人综合网| 欧美日韩国产一区精品一区 | 新狼窝色av性久久久久久| 欧美日韩免费视频| 欧美尤物一区| 国产精品99久久久久久有的能看| 欧美午夜精品久久久久久超碰| 亚洲女人小视频在线观看| 亚洲一区综合| 黄色精品在线看| 亚洲第一福利视频| 欧美日韩综合在线免费观看| 亚洲综合欧美日韩| 欧美成人免费在线视频| 午夜精品视频在线观看| 免费观看30秒视频久久| 欧美一区二区播放| 欧美日韩亚洲不卡| 欧美国产日韩一区二区| 国产日本欧洲亚洲| 一区二区日韩欧美| 99视频精品免费观看| 久久精品一区二区国产| 性欧美8khd高清极品| 欧美日韩不卡在线| 欧美韩国在线| 亚洲高清不卡av| 久久成人国产精品| 久久精品国产96久久久香蕉| 国产精品成人观看视频免费| 亚洲国产精品综合| 亚洲国产精品精华液网站| 久久xxxx精品视频| 久久福利一区| 国产精品一区在线观看你懂的| 日韩一级在线观看| 亚洲视频在线视频| 欧美精品在线看| 亚洲精品视频二区| 日韩视频精品在线观看| 欧美成在线视频| 欧美国产日本韩| 亚洲激情精品| 欧美~级网站不卡| 欧美成人免费视频| 亚洲黄色精品| 欧美激情综合| 亚洲精品视频在线观看免费| 亚洲激情视频在线| 欧美高清在线观看| 91久久久久久久久久久久久| 亚洲精品黄网在线观看| 欧美精品99| 夜夜夜久久久| 亚洲免费中文| 国产网站欧美日韩免费精品在线观看| 亚洲性线免费观看视频成熟| 欧美亚洲一区二区三区| 国产一区二区高清不卡| 久久精品青青大伊人av| 欧美刺激午夜性久久久久久久| 亚洲国产网站| 欧美三区在线| 欧美一区=区| 欧美肥婆bbw| 在线亚洲自拍| 国产欧美日韩视频一区二区三区 | 久久久久国产成人精品亚洲午夜| 国产一区二区久久久| 久久一区二区三区四区| 亚洲日本成人女熟在线观看| 亚洲自拍偷拍色片视频| 国产一区二区毛片| 欧美激情一区二区三区在线视频| 99在线精品免费视频九九视| 欧美在线免费视屏| 亚洲日本一区二区| 国产嫩草一区二区三区在线观看| 久久九九免费| 日韩手机在线导航| 久久一综合视频| 一区二区免费在线播放| 国内精品久久久久久久影视麻豆| 欧美xart系列高清| 欧美一级视频| 亚洲老司机av| 蜜桃av一区二区三区| 亚洲视频一区在线| 亚洲高清电影| 国产欧美日韩视频| 欧美日一区二区三区在线观看国产免| 久久精品人人做人人爽| 中文精品视频一区二区在线观看| 免播放器亚洲一区| 欧美中文字幕视频| 亚洲午夜精品网| 亚洲精品中文字幕在线| 国语自产精品视频在线看| 欧美亚一区二区| 欧美伦理一区二区| 久久久中精品2020中文| 午夜精品一区二区在线观看| 亚洲精品系列| 亚洲黄色高清| 牛牛影视久久网| 久久人91精品久久久久久不卡| 亚洲男人的天堂在线| 日韩视频在线免费| 亚洲精品综合| 亚洲成在人线av| 黄色av一区| 国外成人网址| 国产欧美精品xxxx另类| 欧美人成网站| 欧美国产先锋| 欧美高清在线观看| 久久久久综合一区二区三区| 久久都是精品| 久久久久一区二区| 久久影院午夜论| 久久久夜色精品亚洲| 久久午夜羞羞影院免费观看| 久久久久久综合| 玖玖在线精品| 欧美精品日韩精品| 欧美精品系列| 欧美视频一区二区在线观看 | 久久久久欧美精品| 久久精品国产成人| 久久深夜福利| 欧美激情欧美狂野欧美精品| 欧美成人精品在线| 欧美三级电影精品| 国产精品一区一区| 激情欧美日韩| 亚洲日本理论电影| 亚洲一级免费视频| 午夜久久福利| 久久久综合精品| 欧美**字幕| 亚洲精品一区二区三区樱花 | 久久综合999| 亚洲国产另类久久久精品极度| 亚洲精品视频一区| 亚洲欧美日韩中文播放| 久久久午夜精品| 欧美精品色一区二区三区| 国产精品久久久999| 狠狠综合久久| 一区二区三区毛片| 久久久亚洲国产天美传媒修理工| 亚洲第一黄网| 亚洲一区二区毛片| 老**午夜毛片一区二区三区| 欧美日韩国产精品成人| 国产欧美一区二区三区另类精品| 精品成人在线| 在线视频欧美精品| 美女久久一区| 一区二区三区国产| 免费不卡视频| 国产精品入口尤物| 亚洲日本成人在线观看| 欧美一区二区三区免费看 | 欧美亚洲三级| 亚洲国产精品久久91精品| 亚洲一区二区精品在线| 欧美国产精品人人做人人爱| 国产精品一级| 一区二区三区四区五区视频| 久久久久久有精品国产| 一区二区三区欧美亚洲|