代码之家  ›  专栏  ›  技术社区  ›  Goz

d3d10 hlsl:如何通过反射将纹理绑定到全局纹理2d?

  •  2
  • Goz  · 技术社区  · 15 年前

    好吧,假设我在材质球的某个地方有一个如下的语句(注意,我正在启用遗留支持,以便在dx9和dx10之间共享材质球):

    Texture2D   DiffuseMap;
    

    我可以毫无问题地编译该材质球,但对于如何将shaderResourceView绑定到“diff散映射”我有点茫然。当我“反射”明暗器时,我宁愿假设它会出现在常量缓冲区中的变量中。没有。事实上,我在任何地方都找不到它。那么,我如何知道应该绑定shaderResourceView的纹理“stage”(使用dx9术语)?

    编辑:我发现我可以使用“getresourcebindingdesc”来标识采样器的名称。我不确定这对我有什么帮助:(

    伊迪丝2:同样的,我也没注意到在DX9下也是一样的……我只能拿取样器。

    edit3:我的纹理2d和取样器如下:

    Texture2D DiffuseMap  : DiffuseTexture;
    sampler   DiffuseSampler  = sampler_state
    {
        Texture   = (DiffuseMap);
        MinFilter = Linear;
        MaxFilter = Linear;
    };
    

    现在在效果框架中,我可以通过语义“扩散文本”得到纹理2d。然后我可以设置一个resourceview(d3d10)/texture(d3d9)到texture2d。唉,似乎没有任何方法来处理“语义”使用bog标准的shaders(这将是很好的知道d3d是如何做到的,但研究d3d11效果框架迄今为止没有给我带来任何帮助。它似乎是从二进制(即编译后的数据)中读取的,我自己只能看到“diffusinesampler”。

    1 回复  |  直到 15 年前
        1
  •  1
  •   elmattic    15 年前

    嗯,让我换个说法。在C++方面,你有一堆加载的纹理和相关的SRVS。现在,您要设置一个明暗器(来自DX9),而不看明暗器是如何编写的,绑定SRV(漫反射到漫反射槽、镜面反射、普通贴图)您命名它。对吗?

    我想正如你说的,你最好的选择是 GetResourceBindingDesc :

    HRESULT GetResourceBindingDesc(
      [in]  UINT ResourceIndex,
      [in]  D3D10_SHADER_INPUT_BIND_DESC *pDesc
    );
    

    我想你必须重复每一个 ResourceIndex (从0开始,然后是1、2等),如果 HRESULT S_OK 然后你有 pDesc.BindPoint 它将代表相关SRV在 ppShaderResourceViews 数组 *SetShaderResources 打电话。和 pDesc.Name (就像“diff散模式”)给你关联信息。