• <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>

            戰(zhàn)魂小筑

            討論群:309800774 知乎關(guān)注:http://zhihu.com/people/sunicdavy 開源項(xiàng)目:https://github.com/davyxu

               :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
              257 隨筆 :: 0 文章 :: 506 評(píng)論 :: 0 Trackbacks

            Direct3D中的Shader是這樣的:

            1. ASM Shader是最元老的也是DX8主要使用Shader

            2. fxc編譯器可以同時(shí)編譯ASM,HLSL和fx腳本,其中HLSL和fx可以查看編譯后的GPU匯編代碼

            3. D3D9中,fx是HLSL的一種渲染腳本,簡(jiǎn)化了HLSL設(shè)置及常量綁定,并且附帶RenderStateBlock及設(shè)置

            但只能用于制作簡(jiǎn)單的Shader

            4. DirectXSDK中有一個(gè)概念混淆:C++例子中的BasicHLSL使用的其實(shí)還是fx,HLSLwithoutEffects例子才是真正的純HLSL

            5.fx與HLSL程序鑒別:

            使用fx程序必定含有:D3DXCreateEffectXXX 系列函數(shù), ID3DXEffect對(duì)象,渲染中能看到SetTechnique,BeginPass,EndPass之類的字眼

            使用純HLSL程序含有:D3DXCompileShader,ID3DXConstantTable對(duì)象,GetConstantByName,GetConstantDesc之類的字眼

            6. 在fx中包含有 VertexShader,PixelShader代碼及profile,entry,RenderState設(shè)置及簡(jiǎn)單的繪制過程(pass)。一次編譯后,VS,PS,Texture,Sampler及常量都是在ID3DXEffect對(duì)象中自動(dòng)完成,無(wú)需手動(dòng)設(shè)置。

            7. HLSL可以將VS及PS代碼寫入1個(gè).hlsl文件。注意,以下這種代碼可以在HLSL中編譯過,但實(shí)際沒有任何效果

               1:  sampler_state
               2:  {
               3:      Texture = <tex>;
               4:      MipFilter = LINEAR;
               5:      MinFilter = LINEAR;
               6:      MagFilter = LINEAR;
               7:  };

            這點(diǎn)可以參考AMD RenderMonkey中只在shader中使用sampler而忽略texture。

            8. fx中往shader設(shè)置紋理使用的是ID3DXBaseEffect::SetTexture下的這個(gè)函數(shù)

               1:  HRESULT SetTexture(
               2:    D3DXHANDLE hParameter,
               3:    LPDIRECT3DBASETEXTURE9 pTexture
               4:  );

            但是在HLSL中,這點(diǎn)就變得很麻煩,需要手動(dòng)設(shè)置,可以參考這篇文章

            Shader代碼片段:

               1:  sampler Samp0 = sampler_state
               2:  {
               3:      Texture = <Tex0>;
               4:      MipFilter = LINEAR;
               5:      MinFilter = LINEAR;
               6:      MagFilter = LINEAR;
               7:  };

            編譯HLSL代碼后得到ConstantTable,然后取出句柄:

               1:  ScalarHandle = pixelConstTable->GetConstantByName(0, "Scalar");
               2:   
               3:  Samp0Handle = pixelConstTable->GetConstantByName(0, "Samp0");
               4:   
               5:  Samp1Handle = pixelConstTable->GetConstantByName(0, "Samp1");

            再?gòu)木浔〕鰏ymbol的描述:

               1:  UINT count;
               2:   
               3:  pixelConstTable->GetConstantDesc(Samp0Handle, & Samp0Desc, &count);
               4:   
               5:  pixelConstTable->GetConstantDesc(Samp1Handle, & Samp1Desc, &count);

            通過上面的描述,將紋理變量的寄存器偏移作為紋理的stage

            8.  優(yōu)化常量設(shè)置速度的方法一般就是根據(jù)字符串取出句柄,以后每次渲染時(shí),只通過句柄設(shè)置。但I(xiàn)D3DXConstantTable最后還是通過

            IDirect3DDevice9::SetPixelShaderConstantX 系列函數(shù)來(lái)實(shí)現(xiàn)的

               1:  HRESULT SetPixelShaderConstantF(
               2:    UINT StartRegister,
               3:    CONST float * pConstantData,
               4:    UINT Vector4fCount
               5:  );

            9. HLSL將一段包含VS和PS代碼編譯完成后,將得到VS和PS兩個(gè)單獨(dú)的ID3DXConstantTable

            posted on 2010-03-05 14:26 戰(zhàn)魂小筑 閱讀(3280) 評(píng)論(0)  編輯 收藏 引用 所屬分類: C++/ 編程語(yǔ)言渲染 Shader 引擎
            99国产欧美久久久精品蜜芽| 久久久久久久尹人综合网亚洲 | 国产巨作麻豆欧美亚洲综合久久| 激情五月综合综合久久69| 91精品日韩人妻无码久久不卡| 66精品综合久久久久久久| 久久久精品视频免费观看| 久久免费大片| 色婷婷噜噜久久国产精品12p| 国产精品乱码久久久久久软件| 久久久久亚洲精品日久生情| 久久国产乱子伦精品免费强 | 久久综合视频网站| 久久精品国产精品亚洲| 一级a性色生活片久久无少妇一级婬片免费放 | 97久久精品人人澡人人爽 | 久久久久免费精品国产| AA级片免费看视频久久| 精品无码久久久久久久久久| 亚洲&#228;v永久无码精品天堂久久| 无码任你躁久久久久久| 99精品久久精品一区二区| 亚洲精品高清国产一线久久| 国产精品女同一区二区久久| 国产精品成人99久久久久| 精品久久久久久无码专区| 无码八A片人妻少妇久久| 国产午夜免费高清久久影院| 亚洲va久久久噜噜噜久久天堂| 国产精品福利一区二区久久| 国产91久久综合| 一本久久a久久精品综合香蕉| 激情综合色综合久久综合| 久久SE精品一区二区| jizzjizz国产精品久久| 亚洲中文字幕无码久久2020 | 国产精品伊人久久伊人电影| 国产A三级久久精品| 久久天天躁夜夜躁狠狠躁2022 | 国产69精品久久久久久人妻精品 | 久久精品国产清自在天天线 |