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

4D星宇

c++

  C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
  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 閱讀(470) 評論(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>
            牛人盗摄一区二区三区视频| 日韩视频专区| 久久中文在线| 欧美国产日韩一区二区在线观看 | 欧美日韩一区精品| 久久久久久香蕉网| 久久久久久69| 麻豆精品视频| 欧美剧在线观看| 欧美日韩一卡二卡| 国产精品99一区| 欧美性视频网站| 亚洲国产国产亚洲一二三| 亚洲精品视频免费| 欧美一区二区三区视频| 久久精品亚洲精品国产欧美kt∨| 久久女同互慰一区二区三区| 亚洲国产一成人久久精品| 日韩一级二级三级| 亚洲国产片色| 久久久久久久精| 日韩视频第一页| 久久精品欧美日韩| 欧美日韩一区二区国产| 国产精品久久综合| 国产精品一二一区| 亚洲人成人99网站| 新狼窝色av性久久久久久| 久久中文字幕一区二区三区| 亚洲激情另类| 久久久综合精品| 国产精品va在线播放| 在线观看日韩| 久久爱91午夜羞羞| 一区二区欧美日韩视频| 久久久久天天天天| 午夜视频一区在线观看| 欧美另类69精品久久久久9999| 国产精品视频一二| 亚洲少妇诱惑| 亚洲精品影院在线观看| 久久在线免费观看| 国产亚洲欧美日韩在线一区| 亚洲一二三级电影| 亚洲视频国产视频| 国产精品日韩欧美综合| 亚洲欧美激情视频| 午夜精品久久久久久久久久久| 亚洲国产精品久久久久久女王| 欧美一区二区三区精品电影| 国产精品最新自拍| 久久先锋影音| 久久性色av| 国产精品久久久久7777婷婷| 亚洲欧美久久久| 久久精品国产69国产精品亚洲| 欧美成人亚洲成人| 夜夜嗨av一区二区三区四区| 亚洲麻豆国产自偷在线| 国产精品女主播一区二区三区| 欧美亚洲专区| 欧美福利视频| 小黄鸭精品aⅴ导航网站入口| 亚洲一区二区免费视频| 国内精品久久久久影院色| 亚洲国产高清一区| 欧美久久在线| 久久美女性网| 国产精品久久久久久久久久久久久 | 中文日韩电影网站| 久久成人免费网| 在线观看的日韩av| 亚洲性感美女99在线| 欧美福利视频在线观看| 久久精品网址| 国产精品久久999| 亚洲欧洲精品一区二区三区| 国产日韩综合| 欧美成人有码| 激情久久综合| 久久精品亚洲精品国产欧美kt∨| 亚洲精品中文字幕在线| 久久亚洲一区| 麻豆久久久9性大片| 国产一区二区欧美日韩| 一区二区三区久久精品| 日韩一区二区久久| 欧美精品一区二| 亚洲视频第一页| 久久岛国电影| 亚洲高清影视| 欧美另类99xxxxx| 亚洲一区二区三区四区中文| 中国av一区| 国产午夜精品久久| 久久蜜臀精品av| 欧美一区二区在线看| 欧美韩日亚洲| 亚洲永久视频| 久热精品在线视频| 亚洲精品日日夜夜| 国产老女人精品毛片久久| 久久久久久电影| 蜜桃久久av一区| 小辣椒精品导航| 亚洲激情网站免费观看| 国产精品成人免费精品自在线观看| 一区二区三区色| 欧美日韩一区二区高清| 久久精品免费电影| 亚洲一区二区在| 亚洲精品一区二区三区樱花| 久久久www成人免费精品| 99精品欧美一区二区蜜桃免费| 国产精品自在线| 国产精品成人免费精品自在线观看| 中文av一区特黄| 亚洲日韩中文字幕在线播放| 免费欧美网站| 久久国产精品毛片| 亚洲欧洲午夜| 91久久国产综合久久| 一区二区三区在线免费视频| 国产精品久久久久久久久久尿| 母乳一区在线观看| 欧美精品一区在线观看| 欧美大片免费观看在线观看网站推荐| 久久精品1区| 男女视频一区二区| 免费在线欧美视频| 欧美国产精品劲爆| 欧美交受高潮1| 国产精品国产三级国产| 国产女优一区| 亚洲国产日韩欧美一区二区三区| 亚洲激情一区| 午夜精品福利一区二区三区av | 亚洲一区二区三区四区中文| 99国产精品一区| 亚洲欧美日韩精品久久久久| 欧美制服第一页| 亚洲国产视频一区二区| 亚洲一级黄色| 国产精品久久一级| 久久久久久久激情视频| 国产午夜久久| 久久久久久久尹人综合网亚洲 | 欧美在线综合| 亚洲一区三区电影在线观看| 欧美日韩精品系列| 99视频在线观看一区三区| 亚洲日韩欧美视频一区| 欧美大成色www永久网站婷| 亚洲国产网站| 在线视频精品一| 国产一区二区三区四区三区四| 久久久免费精品| 欧美黄色成人网| 亚洲综合第一| 久久综合网络一区二区| 夜夜嗨av一区二区三区四区| 亚洲视频香蕉人妖| 亚洲第一页自拍| 亚洲综合欧美| 日韩一区二区免费高清| 欧美亚洲一级片| 一卡二卡3卡四卡高清精品视频| 亚洲精品国精品久久99热| 国产模特精品视频久久久久| 欧美激情成人在线视频| 欧美日韩一区二区免费在线观看| 亚洲欧美日韩在线观看a三区| 久久国产精品久久国产精品| 亚洲天堂成人| 欧美理论在线播放| 亚洲国产精品欧美一二99| 国产精品自在欧美一区| 日韩视频久久| 在线播放亚洲一区| 欧美中文在线观看| 欧美夜福利tv在线| 欧美三级在线| 在线一区观看| 一本色道久久综合亚洲精品不| 卡一卡二国产精品| 久久成人这里只有精品| 国产日韩欧美在线播放| 亚洲一区二区视频在线观看| 欧美午夜精品电影| 亚洲欧洲精品天堂一级 | 久久精品成人一区二区三区| 亚洲制服少妇| 国产精品综合视频| 久久久噜噜噜久久| 久久一区二区三区av| 国色天香一区二区| 农村妇女精品| 亚洲色图自拍| 久久亚洲精品伦理| 亚洲卡通欧美制服中文|