通过着色器DirectX 9传递纹理
Passing Texture through Shader DirectX 9
我正在尝试渲染通过像素着色器传递的纹理。
目前我的着色器如下:
float4 EffectProcess( float2 Tex : TEXCOORD0 ) : COLOR0
{
return float4(1,0,0,1);
}
technique MyTechnique
{
pass p0
{
VertexShader = null;
PixelShader = compile ps_2_0 EffectProcess();
}
}
如您所见,这是一个非常基本的着色器,它迫使像素为红色。
UINT uiPasses = 0;
res= g_lpEffect->Begin(&uiPasses, 0);
for (UINT uiPass = 0; uiPass < uiPasses; uiPass++)
{
res = g_lpEffect->BeginPass(uiPass);
res = sprite->Begin(D3DXSPRITE_SORT_TEXTURE);
res = sprite->Draw(tex, NULL, 0x0, 0x0, 0xFFFFFFFF);
res = sprite->End();
res = g_lpEffect->EndPass();
}
res = g_lpEffect->End();
我正在使用着色器像这样绘制纹理。我不确定这是做到这一点的正确方法,并且在该主题上找到了很少的资源。
着色器正在正确创建,并且纹理同样,所有调用都会返回s_ok的hresult,但是当我运行代码时,纹理显示出完美的显示,而不会被红色覆盖。
默认情况下,精灵和效果既均可在 Begin
被调用时自行设置,然后在调用 End
时将其恢复。因此,我怀疑sprite->Begin(D3DXSPRITE_SORT_TEXTURE);
会禁用效果处理,并且您的像素着色器从未被调用。您可以尝试将D3DXSPRITE_DONOTMODIFY_RENDERSTATE
之类的东西传递到Begin
中,以防止其修改管道状态,尽管这可能会破坏精灵渲染。最好完全摆脱精灵并编写自己的精灵着色器(顶点和像素(,因为如今固定管道渲染大部分是弃用的。
相关文章:
- 在 DirectX 中跨线程传递纹理的数据竞赛
- DirectX:用计算着色器写入纹理
- DirectX 11比例纹理2d
- 在 DirectX 中加载 WIC 后创建纹理
- 通过着色器DirectX 9传递纹理
- NV12 纹理在 DirectX 11.1 中不起作用
- 是否有任何 DirectX 11 (HLSL 5.0) 等效于 DirectX 9 纹理"string function"语法?
- DirectX 11 - 如何创建非常简单的 2D 纹理
- DirectX 11 将多个纹理加载到 Texture2DArray 中
- DirectX透明纹理-使植物看起来很好看
- DirectX 10.1 / C++:如何在 ID3D10Resource* 纹理上渲染精灵上的文本
- 将纹理数组发送到DirectX 11中的着色器
- Directx 11,将多个纹理发送到着色器
- DirectX 渲染到纹理
- 如何将 frontBuffer 数据复制到纹理 DirectX 9
- 使用精灵时变形的纹理(Directx 9)
- DirectX在C++中如何在两个对象上渲染不同的纹理
- directx 11使用PSSetShaderResources更改纹理
- DirectX剪辑空间纹理坐标
- 以编程方式创建纹理DirectX