Home » Community » Forums » DirectX and XNA » DX10 Render Question
  Intel sponsors gamedev.net search:   
[Control Panel] [Register] [Bookmarks] [Who's Online] [Active Topics] [Stats] [FAQ] [Search]

Add Forum to Favorites |  Send Topic To a Friend | View Forum FAQ | Track this topic


 Last Thread Next Thread 
 DX10 Render Question
Post New Topic  Post Reply 
I've got a simple DirectX 10 3D program I wrote for class in order to display a varying number of triangles on screen then print out the FPS. I'm having an issue when I attempt to print text to screen. My triangles no longer render and I receive the following error messages in my output window:
D3D10: ERROR: ID3D10Device::Draw: Input Assembler - Vertex Shader linkage error: Signatures between stages are incompatible. The reason is that the input stage requires Semantic/Index (POSITION,0) as input, but it is not provided by the output stage. [ EXECUTION ERROR #342: DEVICE_SHADER_LINKAGE_SEMANTICNAME_NOT_FOUND ]
D3D10: ERROR: ID3D10Device::Draw: Input Assembler - Vertex Shader linkage error: Signatures between stages are incompatible. The reason is that Semantic 'COLOR' is defined for mismatched hardware registers between the output stage and input stage. [ EXECUTION ERROR #343: DEVICE_SHADER_LINKAGE_REGISTERINDEX ]

Any suggestions?

If I do not attempt to run my DrawTextString function everything runs fine.

Code:
void DX10App::DrawTextString(int x, int y, D3DXCOLOR color, const WCHAR* strOutput)
{
	LPCWSTR text = LPCWSTR(strOutput);
	FontSprite->Begin(0);
	RECT rect = {x, y, 100, 50};
	Font->DrawText(FontSprite, text, -1, &rect, DT_LEFT, color);
	FontSprite->End();
}

void DX10App::Render()
{
	D3DXMATRIX mTranslateStart;
	D3DXMATRIX mScale;
	D3DXMATRIX World1;

	D3DXMatrixIdentity(&World1);

	float ClearColor[4] = {0.0f, 0.125f, 0.3f, 1.0f};
	d3dDevice->ClearRenderTargetView(RenderTargetView, ClearColor);
	
	if(myApp->GetTriMode() == 0)
	{
		D3DXMatrixScaling(&mScale, 1.0f / triWidth, 1.0f / triHeight, 1.0f);
		D3DXMatrixTranslation(&mTranslateStart, -1.0f / (triWidth / (triWidth + 1.0f)), (triHeight - 1.0f) / triHeight, 0.0f);

		WorldVariable->SetMatrix((float*)&World1);

		D3D10_TECHNIQUE_DESC techDesc;
		Technique->GetDesc(&techDesc);

		D3DXMatrixIdentity(&World1);
		D3DXMatrixMultiply(&World1, &World1, &mScale);
		D3DXMatrixMultiply(&World1, &World1, &mTranslateStart);
		
		for(int i = 0; i < triHeight; ++i)
		{
			for(int j = 0; j < triWidth; ++j)
			{	
				//D3DXMatrixMultiply(&g_World1, &g_World1, &mTranslateRight);
				World1._41 += 2.0f / triWidth;

				WorldVariable->SetMatrix((float*)&World1);

				for(UINT p = 0; p < techDesc.Passes; ++p)
				{
					Technique->GetPassByIndex(p)->Apply(0);
					d3dDevice->Draw(3, 0);
				}
			}

			//D3DXMatrixMultiply(&g_World1, &g_World1, &mTranslateLeft);
			World1._41 += -2.0f;
			//D3DXMatrixMultiply(&g_World1, &g_World1, &mTranslateDown);
			World1._42 += -2.0f / triHeight;
		}
	}
	else if(myApp->GetTriMode() == 1)
	{
		D3D10_TECHNIQUE_DESC techDesc;
		Technique->GetDesc(&techDesc);

		WorldVariable->SetMatrix((float*)&World1);

		for(UINT p = 0; p < techDesc.Passes; ++p)
		{
			Technique->GetPassByIndex(p)->Apply(0);
			d3dDevice->Draw((int)triHeight * (int)triWidth * 3, 0);
		}
	}

	WCHAR str[255];
	swprintf_s(str, 255, L"FPS: %.2f NumTris: %d", FPS, (triWidth * triHeight));

	DrawTextString(0, 0, D3DXCOLOR(1.0f, 0.0f, 0.0f, 1.0f), str);

	::SetWindowText(m_hWnd, str);

	SwapChain->Present(0, 0);
}


 User Rating: 1017   |  Rate This User  Send Private MessageView Profile Report this Post to a Moderator | Link

Mabye (remember, mabye) you should deactivate the shader, becouse, mabye, using NULL as ID3DXSprite, the shader code can't work on the text.
mmm ok it's wrong you are using sprite...

It's a my opinion so i do not know if it can work, but you can try in this way:

Just add this code before the DrawText, and use NULL as Sprite.

device->PSSetShader(NULL);
device->VSSetShader(NULL);
device->GSSetShader(NULL);


After the DrawText call, use
shader->GetTechniqueByIndex(0)->GetPassByName(0)->Apply();


Let me know about it.




Yes, i use DirectX10 from 1 week :D


 User Rating: 945   |  Rate This User  Send Private MessageView Profile Report this Post to a Moderator | Link

That didn't seem to make any difference.

Thanks though.

 User Rating: 1017   |  Rate This User  Send Private MessageView Profile Report this Post to a Moderator | Link

It's because ID3DXFont/ID3DXSprite is modifying the state of the device - and not restoring it afterwards. To rectify this, pass in D3DX10_SPRITE_SAVE_STATE when calling ID3DSprite::Begin().


NextWar: The Quest for Earth available now for the Xbox 360.

 User Rating: 1357   |  Rate This User  Send Private MessageView Profile Report this Post to a Moderator | Link

Thanks for your help. That was exactly it.

 User Rating: 1017   |  Rate This User  Send Private MessageView Profile Report this Post to a Moderator | Link

All times are ET (US)

Post Reply
 Last Thread Next Thread 
Forum Rules:
You may not post new threads
You may post replies
You may not edit your posts
You may not use HTML in your posts
Jump To:
Administrative Options: