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

            天行健 君子當(dāng)自強(qiáng)而不息

            高級著色語言HLSL入門(2)

            16.2 編譯HLSL 著色器

            16.2.1 常量表

            每個(gè)著色器有一個(gè)常量表,用來保存它的變量。D3DX庫通過ID3DXConstantTable接口,提供給應(yīng)用程序訪問著色器的常量表。通過這個(gè)接口我們能夠在應(yīng)用程序中設(shè)置著色器源代碼中的變量。

            我們現(xiàn)在描述ID3DXConstantTable接口的方法列表的實(shí)現(xiàn),全部的列表請查閱Direct3D文檔。

            16.2.1.1 取得常量句柄

            為了在應(yīng)用程序中設(shè)置著色器中的一個(gè)特定變量,需要有一種方法去引用它,我們能夠在應(yīng)用程序中用D3DXHANDLE引用一個(gè)在著色器中的變量,下面的方法返回一個(gè)著色器中的變量的D3DXHANDLE,使用時(shí),需要傳遞一個(gè)變量的名字作為參數(shù):

            D3DXHANDLE ID3DXConstantTable::GetConstantByName(

                 D3DXHANDLE hConstant, // scope of constant

                 LPCSTR pName          // name of constant

            );

            Hconstant——我們要取得的父結(jié)構(gòu)中變量句柄的D3DXHANDLE標(biāo)識。例如,如果我們想獲得一個(gè)特定數(shù)據(jù)結(jié)構(gòu)中單一數(shù)據(jù)成員的句柄,我們可以傳遞結(jié)構(gòu)實(shí)例的句柄。如果我們獲得一個(gè)頂級變量的句柄,給這個(gè)參數(shù)設(shè)為NULL。

            PName——我們想獲得的句柄的著色器代碼中的變量的名字。

            Gets a constant by looking up its name.

            D3DXHANDLE GetConstantByName(
            D3DXHANDLE hConstant,
            LPCSTR pName
            );

            Parameters

            hConstant
            [in] Unique identifier to the parent data structure. If the constant is a top-level parameter (there is no parent data structure), use NULL.
            pName
            [in] Name of the constant.

            Return Values

            Returns a unique identifier to the constant.

            例如,如果在著色器中變量的名字為ViewProjMatrix,并且這是頂級變量,我們這么寫:

            // 取得著色器中ViewProjMatrix變量的句柄

            D3DXHANDLE h0;

            h0 = ConstTable->GetConstantByName(0, "ViewProjMatrix");

             

            16.2.1.2 設(shè)置常量

            一旦應(yīng)用程序有了一個(gè)D3DXHANDLE,要引用著色器代碼中的具體變量,我們可以在應(yīng)用程序中使用ID3DXConstantTable::SetXXX方法設(shè)置變量。如果我們想設(shè)置一個(gè)向量數(shù)組類型的變量,方法名是SetVectorArray。

            ID3DXConstantTable::SetXXX的一般語法是:

            HRESULT ID3DXConstantTable::SetXXX(

                 LPDIRECT3DDEVICE9 pDevice,

                 D3DXHANDLE hConstant,

                 XXX value

            );

            PDevice:常量表所關(guān)聯(lián)的設(shè)備的指針。

            HConstant:我們正在設(shè)置的變量句柄的引用。

            Value:我們要把變量設(shè)置成的值,XXX是我們設(shè)置的要替換的變量類型名,對于有些類型(bool, int, float),傳遞變量值的COPY,另外一些類型(vectors, matrices, structures),傳遞值的指針。

             

            下面的列表描述了我們能用ID3DXConstantTable接口設(shè)置的類型列表。這里假定我們有一個(gè)有效的設(shè)備,和一個(gè)有效句柄。

            SetBool—Used to set a Boolean value. Sample call:

            bool b = true;

            ConstTable->SetBool(Device, handle, b);

            Sets a Boolean value.

            HRESULT SetBool(
            LPDIRECT3DDEVICE9 pDevice,
            D3DXHANDLE hConstant,
            BOOL b
            );

            Parameters

            pDevice
            [in] Pointer to an IDirect3DDevice9 interface, representing the device associated with the constant table.
            hConstant
            [in] Unique identifier to the constant. See D3DXHANDLE.
            b
            [in] Boolean value.

            Return Values

            If the method succeeds, the return value is D3D_OK. If the method fails, the return value can be D3DERR_INVALIDCALL.


            SetBoolArray—Used to set a Boolean array. Sample call:

            bool b[3] = {true, false, true};

            ConstTable->SetBoolArray(Device, handle, b, 3);

            Sets an array of Boolean values.

            HRESULT SetBoolArray(
            LPDIRECT3DDEVICE9 pDevice,
            D3DXHANDLE hConstant,
            CONST BOOL* pB,
            UINT Count
            );

            Parameters

            pDevice
            [in] Pointer to an IDirect3DDevice9 interface, representing the device associated with the constant table.
            hConstant
            [in] Unique identifier to the array of constants. See D3DXHANDLE.
            pB
            [in] Array of Boolean values.
            Count
            [in] Number of Boolean values in the array.

            Return Values

            If the method succeeds, the return value is D3D_OK. If the method fails, the return value can be D3DERR_INVALIDCALL.


            SetFloat—Used to set a float. Sample call:

            float f = 3.14f;

            ConstTable->SetFloat(Device, handle, f);

             

            Sets a floating-point number.

            HRESULT SetFloat(
            LPDIRECT3DDEVICE9 pDevice,
            D3DXHANDLE hConstant,
            FLOAT f
            );

            Parameters

            pDevice
            [in] Pointer to an IDirect3DDevice9 interface, representing the device associated with the constant table.
            hConstant
            [in] Unique identifier to the constant. See D3DXHANDLE.
            f
            [in] Floating-point number.

            Return Values

            If the method succeeds, the return value is D3D_OK. If the method fails, the return value can be D3DERR_INVALIDCALL.


            SetFloatArray—Used to set a float array. Sample call:

            float f[2] = {1.0f, 2.0f};

            ConstTable->SetFloatArray(Device, handle, f, 2);

            Sets an array of floating-point numbers.

            HRESULT SetFloatArray(
            LPDIRECT3DDEVICE9 pDevice,
            D3DXHANDLE hConstant,
            CONST FLOAT* pf,
            UINT Count
            );

            Parameters

            pDevice
            [in] Pointer to an IDirect3DDevice9 interface, representing the device associated with the constant table.
            hConstant
            [in] Unique identifier to the array of constants. See D3DXHANDLE.
            pf
            [in] Array of floating-point numbers.
            Count
            [in] Number of floating-point values in the array.

            Return Values

            If the method succeeds, the return value is D3D_OK. If the method fails, the return value can be D3DERR_INVALIDCALL.


            SetInt—Used to set an integer. Sample call:

            int x = 4;

            ConstTable->SetInt(Device, handle, x);

            Sets an integer value.

            HRESULT SetInt(
            LPDIRECT3DDEVICE9 pDevice,
            D3DXHANDLE hConstant,
            INT n
            );

            Parameters

            pDevice
            [in] Pointer to an IDirect3DDevice9 interface, representing the device associated with the constant table.
            hConstant
            [in] Unique identifier to the constant. See D3DXHANDLE.
            n
            [in] Integer.

            Return Values

            If the method succeeds, the return value is D3D_OK. If the method fails, the return value can be D3DERR_INVALIDCALL.

             

            SetMatrix—Used to set a 4 × 4 matrix. Sample call:

            D3DXMATRIX M(…);

            ConstTable->SetMatrix(Device, handle, &M);

            Sets a nontransposed matrix.

            HRESULT SetMatrix(
            LPDIRECT3DDEVICE9 pDevice,
            D3DXHANDLE hConstant,
            CONST D3DXMATRIX* pMatrix
            );

            Parameters

            pDevice
            [in] Pointer to an IDirect3DDevice9 interface, representing the device associated with the constant table.
            hConstant
            [in] Unique identifier to the matrix of constants. See D3DXHANDLE.
            pMatrix
            [in] Pointer to a nontransposed matrix. See D3DXMATRIX.

            Return Values

            If the method succeeds, the return value is D3D_OK. If the method fails, the return value can be D3DERR_INVALIDCALL.


            SetMatrixArray—Used to set a 4 × 4 matrix array. Sample call:

            D3DXMATRIX M[4];

            // ...Initialize matrices

            ConstTable->SetMatrixArray(Device, handle, M, 4);

            Sets an array of nontransposed matrices.

            HRESULT SetMatrixArray(
            LPDIRECT3DDEVICE9 pDevice,
            D3DXHANDLE hConstant,
            CONST D3DXMATRIX* pMatrix,
            UINT Count
            );

            Parameters

            pDevice
            [in] Pointer to an IDirect3DDevice9 interface, representing the device associated with the constant table.
            hConstant
            [in] Unique identifier to the array of constant matrices.
            pMatrix
            [in] Array of nontransposed matrices.
            Count
            [in] Number of matrices in the array.

            Return Values

            If the method succeeds, the return value is D3D_OK. If the method fails, the return value can be D3DERR_INVALIDCALL.


            SetMatrixPointerArray—Used to set an array of 4 × 4 matrix pointers. Sample call:

            D3DXMATRIX* M[4];

            // ...Allocate and initialize matrix pointers

            ConstTable->SetMatrixPointerArray(Device, handle, M, 4);

            Sets an array of pointers to nontransposed matrices.

            HRESULT SetMatrixPointerArray(
            LPDIRECT3DDEVICE9 pDevice,
            D3DXHANDLE hConstant,
            CONST D3DXMATRIX ** ppMatrix,
            UINT Count
            );

            Parameters

            pDevice
            [in] Pointer to an IDirect3DDevice9 interface, representing the device associated with the constant table.
            hConstant
            [in] Unique identifier to an array of constant matrices.
            ppMatrix
            [in] Array of pointers to nontransposed matrices.
            Count
            [in] Number of matrices in the array.

            Return Values

            If the method succeeds, the return value is D3D_OK. If the method fails, the return value can be D3DERR_INVALIDCALL.

            Remarks

            A nontransposed matrix contains row-major data; that is, each vector is contained in a row.


            posted on 2008-04-05 16:18 lovedday 閱讀(3826) 評論(4)  編輯 收藏 引用

            評論

            # re: 高級著色語言HLSL入門(2)[未登錄] 2009-01-08 16:51 sam

            寫得不錯(cuò),但有個(gè)問題,如果傳大數(shù)據(jù)到像素作色器好像不行。

            如一個(gè)float[12][256].的數(shù)據(jù)。好像ps_2_0只能設(shè)置最大30個(gè)成員的數(shù)組。有什么方法定義大常量數(shù)據(jù)嗎?  回復(fù)  更多評論   

            # re: 高級著色語言HLSL入門(2)[未登錄] 2009-01-08 16:53 sam

            QQ:36046869  回復(fù)  更多評論   

            # re: 高級著色語言HLSL入門(2) 2009-02-02 11:37 笑笑

            QQ:490861526  回復(fù)  更多評論   

            # re: 高級著色語言HLSL入門(2) 2010-11-18 15:36 oppo

            受教了~ 多謝天兄~  回復(fù)  更多評論   

            公告

            導(dǎo)航

            統(tǒng)計(jì)

            常用鏈接

            隨筆分類(178)

            3D游戲編程相關(guān)鏈接

            搜索

            最新評論

            亚洲国产精品一区二区久久hs| 色噜噜狠狠先锋影音久久| 国产精品久久久99| 精品久久久久久久久久久久久久久| 久久精品国产色蜜蜜麻豆| 久久久亚洲裙底偷窥综合| 日日躁夜夜躁狠狠久久AV| 大蕉久久伊人中文字幕| 日本精品久久久久影院日本| 久久精品国产亚洲av麻豆小说| 精品久久久久久久中文字幕 | 久久精品国产亚洲AV大全| 久久99国产精品久久99果冻传媒| 国产一区二区精品久久岳| 一本色道久久综合狠狠躁篇| 青青国产成人久久91网| 日韩欧美亚洲国产精品字幕久久久| 777午夜精品久久av蜜臀| 伊人久久精品影院| 久久国产精品久久精品国产| 波多野结衣久久一区二区| 久久午夜无码鲁丝片午夜精品| 99久久www免费人成精品| 国产午夜久久影院| 国内精品久久久久影院老司| 久久不射电影网| 久久精品无码午夜福利理论片| 久久99九九国产免费看小说| 久久99亚洲综合精品首页| 国产午夜福利精品久久2021| 久久精品99久久香蕉国产色戒| 一级A毛片免费观看久久精品| 99久久国产综合精品网成人影院| 久久Av无码精品人妻系列| 伊人久久大香线蕉综合热线| 久久人人爽人人爽人人片AV高清| 久久精品国产只有精品66| 亚洲欧美日韩精品久久| 国产精品美女久久久免费| 国产精品久久久久久久午夜片| 伊人久久免费视频|