Jump to content

  • Log In with Google      Sign In   
  • Create Account


DX10 Render Question


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
4 replies to this topic

#1 CornyKorn   Members   -  Reputation: 476

Like
0Likes
Like

Posted 18 March 2008 - 11:21 AM

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


Sponsor:

#2 XVincentX   Members   -  Reputation: 129

Like
0Likes
Like

Posted 19 March 2008 - 10:39 AM

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


#3 CornyKorn   Members   -  Reputation: 476

Like
0Likes
Like

Posted 19 March 2008 - 01:45 PM

That didn't seem to make any difference.

Thanks though.

#4 Sc4Freak   Members   -  Reputation: 643

Like
0Likes
Like

Posted 19 March 2008 - 06:26 PM

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 Windows Phone 7.

#5 CornyKorn   Members   -  Reputation: 476

Like
0Likes
Like

Posted 21 March 2008 - 12:54 AM

Thanks for your help. That was exactly it.




Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS