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

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>
            性欧美xxxx视频在线观看| 国产精品黄色| 久久综合给合| 欧美高清不卡| 欧美日韩一二三四五区| 国产精品美女久久久久久2018| 国产日韩欧美在线观看| 亚洲二区精品| 一本大道久久a久久精二百| 亚洲欧美日韩高清| 欧美96在线丨欧| 亚洲精品韩国| 亚洲欧美日韩精品久久亚洲区| 亚洲精品乱码久久久久久蜜桃91| 欧美韩日一区二区| 亚洲一区二区欧美日韩| 久久中文久久字幕| 一区二区三区视频在线播放| 欧美亚洲一区| 欧美视频久久| 亚洲免费观看高清完整版在线观看熊 | 欧美黑人在线观看| 中文日韩电影网站| 欧美高清视频在线| 欧美一区三区三区高中清蜜桃| 在线观看亚洲一区| 久久精品日韩欧美| 99精品热视频只有精品10| 久久综合综合久久综合| 日韩亚洲一区二区| 亚洲国产精品电影| 久久精品国产2020观看福利| 国产精品女主播| 欧美 日韩 国产一区二区在线视频 | 老色鬼久久亚洲一区二区| 亚洲一级黄色av| 欧美日韩国产天堂| a91a精品视频在线观看| 午夜精品一区二区三区四区 | 久久精品亚洲一区| 国产亚洲日本欧美韩国| 久久久xxx| 久久国产精品久久w女人spa| 日韩亚洲欧美综合| 久久久www成人免费毛片麻豆| 制服丝袜激情欧洲亚洲| 蜜臀av一级做a爰片久久 | 欧美日韩一区二区三区| 快射av在线播放一区| 国产精品国产精品| 最新国产成人av网站网址麻豆 | 欧美与欧洲交xxxx免费观看| 国产一级揄自揄精品视频| 亚洲日韩视频| 亚洲日本中文字幕免费在线不卡| 欧美+亚洲+精品+三区| 国产精品手机在线| 久久精品视频亚洲| 国产精品五月天| 一级日韩一区在线观看| 日韩天堂在线观看| 欧美成人性网| 性一交一乱一区二区洋洋av| 欧美日韩岛国| 日韩亚洲欧美成人| 国内自拍一区| 亚洲欧洲日本专区| 亚洲破处大片| 亚洲自拍另类| 亚洲国产欧美一区| 在线一区二区三区四区| 精品999在线播放| 亚洲精品自在久久| 国内精品久久久久影院色| 亚洲黄色三级| 亚洲九九爱视频| 欧美日韩一本到| 一区二区免费在线播放| 亚洲一区二区三区中文字幕| 国产精品理论片| 亚洲欧美激情一区二区| 欧美中文字幕在线| 欧美日韩福利视频| 亚洲一区二区三区精品动漫| 在线国产欧美| 欧美黄色成人网| 99re6热在线精品视频播放速度| 一本色道久久综合亚洲精品高清 | 亚洲精品小视频| 欧美日韩国产精品一区| 一本一道久久综合狠狠老精东影业| 亚洲字幕在线观看| 欧美国产大片| 亚洲一区二区三区在线看| 久久精品123| 亚洲激情第一区| 国产精品久久福利| 久久精品视频网| 亚洲欧洲一区| 久久久久久国产精品一区| 亚洲第一成人在线| 欧美午夜美女看片| 亚洲精品日韩精品| 久久成人免费网| 亚洲精品视频中文字幕| 国产精品美女www爽爽爽| 久久精品人人做人人爽| 亚洲美女毛片| 久久久久久久999精品视频| 亚洲精品乱码久久久久久按摩观 | 欧美成年视频| 亚洲欧美日韩视频二区| 亚洲女同在线| 亚洲国产欧洲综合997久久| 国产精品第十页| 久久综合网络一区二区| 亚洲女爱视频在线| 亚洲国产高清aⅴ视频| 亚洲级视频在线观看免费1级| 国产精品jizz在线观看美国 | 国产欧美在线看| 香蕉久久夜色精品| 亚洲精品小视频在线观看| 久久久国产一区二区| 亚洲一级黄色| 亚洲麻豆一区| 亚洲激情啪啪| 黄色免费成人| 国产一区二区av| 国产精品久久| 欧美体内谢she精2性欧美| 麻豆久久婷婷| 久久影院午夜论| 久久aⅴ乱码一区二区三区| 亚洲视频免费观看| 亚洲免费成人av| 日韩一级精品| 亚洲麻豆av| 亚洲精品欧美日韩专区| 欧美国产欧美综合| 亚洲午夜在线| 在线视频日本亚洲性| 国产美女扒开尿口久久久| 久久久久久久久久久一区| 欧美高清视频在线播放| 久久一区二区精品| 久久婷婷国产综合国色天香| 欧美一区二区三区久久精品| 在线观看视频一区| 欧美日韩中文在线| 欧美日韩一区二区三区在线| 欧美日本亚洲| 久久国产主播精品| 久久精品30| 久久只有精品| 欧美成人四级电影| 欧美日韩一区二区三区| 国产精品第13页| 国产日韩欧美一区二区三区四区| 国产欧美日本一区视频| 国产一区二区激情| 亚洲国产99精品国自产| 91久久久久| 亚洲一区二区三区国产| 午夜精品久久久久久久久久久久久| 亚洲国产综合在线看不卡| 亚洲精品美女久久久久| 在线亚洲免费| 久久黄金**| 欧美暴力喷水在线| 亚洲精品欧美激情| 午夜在线精品偷拍| 麻豆国产va免费精品高清在线| 欧美精品一区二区三区在线看午夜 | 亚洲欧美日韩国产精品| 久久国产精品电影| 欧美精品v日韩精品v韩国精品v | 欧美国产免费| 欧美激情影院| 一区二区三区免费观看| 性刺激综合网| 欧美精品九九| 国产婷婷色一区二区三区四区| 亚洲国产三级网| 午夜国产精品视频| 欧美激情视频一区二区三区免费| 99在线|亚洲一区二区| 欧美一区深夜视频| 欧美亚洲第一区| 在线欧美电影| 欧美一级久久| 亚洲日本va在线观看| 欧美伊人精品成人久久综合97| 欧美阿v一级看视频| 国产欧美一区二区三区视频| 亚洲毛片视频| 男女av一区三区二区色多| 亚洲一区二区三区三| 欧美人在线视频| 亚洲韩日在线|