在Direct3D9中使用像素着色器作为纹理

时间:2015-03-06 16:03:27

标签: textures shader direct3d hlsl

我尝试使用像素着色器来显示图像。我已经四处寻找有关如何做到这一点的信息,我发现了这个:

https://msdn.microsoft.com/en-us/library/windows/desktop/bb219690%28v=vs.85%29.aspx

这是来自那里的hlsl脚本:

texture MyTexture;

sampler MySampler = 
sampler_state 
{ 
    Texture = <MyTexture>;
    MinFilter = Linear;
    MagFilter = Linear;
    AddressU = Clamp;
    AddressV = Clamp;
};

float4 TextureLookupPS( float2 vTexCoord : TEXCOORD0 ) : COLOR
{
    return tex2D( MySampler, vTexCoord );
} 

对于主要功能,我想我这样做:

PS_OUTPUT psmain(in VS_OUTPUT In)
{
    PS_OUTPUT Out;
    Out.Color = tex2D(mySample, In.texture);

    return Out;
};

在C ++中,如何传递MyTexture的值? 我是否使用D3DXCreateTextureFromFile加载IDirect3DTexture9 *?如何将这些信息提供给像素着色器?

1 个答案:

答案 0 :(得分:1)

我知道这个问题是2个月大,但我会在这里留下参考:

创建ID3DXEffect后:

D3DXHANDLE texHandle = m_pShader->GetParameterByName(0, "MyTexture")

这将为您提供着色器纹理的句柄,以便您可以在渲染函数中设置它:

m_pEffect->SetTexture(texHandle, m_pTexture);

m_pEffect是您的ID3DXEffect指针。

注意:m_pTextureLPDIRECT3DTEXTURE9对象,您可以像这样初始化:

D3DXCreateTextureFromFileA(m_pDevice, "mytexture.bmp", &m_pTexture)

我根据用户zdd对此进行了回答:https://stackoverflow.com/a/18754193/2240519