Jump to content
  • Advertisement
Sign in to follow this  
CornyKorn21

DX10 Render Question

This topic is 3861 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

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);
}

Share this post


Link to post
Share on other sites
Advertisement
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

Share this post


Link to post
Share on other sites
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().

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!