처음부터 시작 했으므로 코드에 일부 텍스트의 총계가 표시 될 것입니다. 스프라이트 지원을 추가했습니다. 내가 만난 문제는 내 HLSL을 인식하지 못하는 것입니다. 나는 기술을 설정하고, 시작하고, 패스를 시작하고, 스프라이트를 그리고, 플러시하고, 패스를 끝내고, 기술을 사용했다. 그리고 D3D는 VS 출력에서이 작은 "Use FF to PS converter"를 제공합니다. VS와 동일합니다. 저는 HLSL로 진보 된 것을하려고하지 않고 있습니다. 단지 그것을 사용하고 좀 더 익숙해 져서 그것을 구현하는 방법을 확실히 알고 있어야합니다. 그것은 C++ 0x 자동입니다. 그렇기 때문에 자동 타입 공제 (저는 게으 르기 때문에)입니다. RenderAndCleanUp가 스프라이트를 순환 간단한 템플릿 함수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());
가되어야한다는 것과 파괴, 나머지를 표현하며 커먼> 스프라이트 모든 스프라이트 객체의 단순한 벡터이다. DXTrace는 절대로 작동하지 않으므로 함수가 실패하지 않는다는 것을 보증합니다. 또한 컨트롤 패널을 최대 디버깅으로 설정했습니다.
D3DXHANDLE을 검사했으며 모두 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
내가 놓친 경우가 아니면 예상대로 작동하지 않는 것을 정확히 말하지 않는 것 같습니다 ... – jcoder
그들은 실제로 어떤 방식 으로든 HLSL을로드하거나 호출하지 않기 때문입니다. 그들은 단지 FF를 사용합니다. 예를 들어 픽셀 쉐이더를 항상 파란색으로 변경했지만 효과가 없습니다. – DeadMG