我已经开始了,我的代码将能够显示一些文本的总数。我一直在加入对精灵的支持。我碰到的麻烦是,它似乎没有认出我的HLSL。我设定了技巧,开始了它,开始了传球,画出了精灵,冲过他们,结束了传球,技术。而D3D在VS输出中带来了这个小小的“使用FF到PS转换器”。 VS也一样。我并没有试图用我的HLSL做任何先进的事情 - 只是使用它并对它稍微熟悉一点,并确保我知道如何实现它。这是C++ 0x自动,顺便说一下,所以自动类型扣除(因为我很懒)。HLSL和ID3DXFont/ID3DXSprite
#define D3DCALL(a) { auto __ = a; if (FAILED(__)) DXTrace(__FILE__, __LINE__, __, WIDEN(#a), TRUE); }
D3DCALL(spriteeffect->SetTechnique(spritetechnique));
D3DCALL(spriteeffect->Begin(&passes, NULL));
D3DCALL(spriteeffect->BeginPass(0)); // We know this is zero.
D3DCALL(sprite->Begin(D3DXSPRITE_OBJECTSPACE | D3DXSPRITE_DO_NOT_ADDREF_TEXTURE | D3DXSPRITE_SORT_TEXTURE | D3DXSPRITE_ALPHABLEND | D3DXSPRITE_SORT_DEPTH_FRONTTOBACK));
RenderAndCleanUp(common->sprites);
D3DCALL(sprite->End());
D3DCALL(spriteeffect->EndPass());
D3DCALL(spriteeffect->End());
其中RenderAndCleanUp是一个简单的模板函数,通过精灵循环,破坏那些需要是,并使其余部分,和共>精灵是所有子画面对象的简单向量。由于DXTrace永远不会关闭,我会保证没有任何功能失败。我还将控制面板设置为最大调试。
我检查了D3DXHANDLEs,它们都是非NULL。它不报告任何编译错误或任何错误或警告。
// Contains the HLSL for sprites.
// Based on transform.fx, by Frank Luna.
// FX parameter (global variable to the shader).
uniform extern float4x4 gWVP;
// Structure
struct OutputVS
{
float4 posH : POSITION0;
float4 color : COLOR0;
};
// Vertex shader
OutputVS SpriteVS(float3 post : POSITION0,
float4 col : COLOR0)
{
// Zero out our output.
OutputVS outVS = (OutputVS)0;
outVS.posH = mul(float4(post, 1.0f), gWVP); // Transform
outVS.color = col;
// Done--return the output.
return outVS;
}
// Pixel shader - take the original colour of the pixel and just return it. Nothing fancy.
float4 SpritePS(float4 col : COLOR0) : COLOR
{
return col;
}
technique Sprite
{
pass P0
{
// Specify the vertex and pixel shader associated
// with this pass.
vertexShader = compile vs_3_0 SpriteVS();
pixelShader = compile ps_3_0 SpritePS();
}
}
这是查看Direct3D9的本机C++。
“因为我很懒”因为你在做正确的事。 :P – GManNickG 2010-02-23 20:30:21
你似乎没有确切地说明它如何不如你所期望的那样工作,除非我错过了它...... – jcoder 2010-03-19 08:42:23
因为它们实际上没有以任何方式加载或调用HLSL。他们只是使用FF。例如,我修改了像素着色器始终返回蓝色,但没有效果。 – DeadMG 2010-03-20 23:33:50