[DX11 입문 제15장] 인스턴싱.. IA 조립이 안됩니다..

GPG 시리즈 관련 질답, 논의 공간.

Moderator: 류광

holycaous
Posts: 10
Joined: 2016-02-24 07:02

인스턴싱.. IA 조립이 안됩니다..

Post by holycaous »

이 문제로 수시로, 골머리를 앓았습니다..
하도 안되서 소프트웨어 인스턴싱을 했는데..
그랬더니 프레임이 전혀 나오질 않습니다..

그래서, 다시 책을 차근차근보며, 레퍼런스를 비교해보며 뭐가 잘못된질 봐도 모르겠습니다.
구글링을해도 고만고만한거 같고..

휴, 지금 가장 큰 문제는 입력조립기가 완성이 되지 않습니다.
아무리봐도 뭐가 문젠지 모르겠어서.. 답답해서, 여쭤봅니다..

도대체 제가 뭘 잘못 생각하고 있는건가요..
입력조립기가, 계속 '매개변수가 틀립니다' 라는 오류로만 나옵니다..

디버깅을 해봐도 값은 정상적으로 들어가는걸로 보여서 더욱 혼란스럽습니다.

Code: Select all

// 다이렉트 자료형
struct VertexPNT
{
	XMFLOAT3 Pos;
	XMFLOAT3 Normal;
	XMFLOAT2 Tex;
	XMFLOAT3 Tangent;
	XMFLOAT3 BiNormal;
};

// 쉐이더 자료형
struct TLInsVertexIn
{
	float3 PosL				  : POSITION;
	float3 NormalL			  : NORMAL;
	float2 Tex				  : TEXCOORD;
	float3 Tangent			  : TANGENT;
	float3 BiNormal			  : BINORMAL;
	row_major float4x4 World  : WORLD;
	uint InstanceId		      : SV_InstanceID;
};

Code: Select all

else if (mShaderMode == e_ShaderPongTexIns || mShaderMode == e_ShaderCartoonTexIns)
		{
			D3D11_INPUT_ELEMENT_DESC vertexDesc[] =
			{
				{ "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT   , 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA  , 0 },
				{ "NORMAL"  , 0, DXGI_FORMAT_R32G32B32_FLOAT   , 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA  , 0 },
				{ "TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT      , 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA  , 0 },
				{ "TANGENT" , 0, DXGI_FORMAT_R32G32B32_FLOAT   , 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA  , 0 },
				{ "BINORMAL", 0, DXGI_FORMAT_R32G32B32_FLOAT   , 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA  , 0 },
				{ "WORLD"   , 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 1, 0                           , D3D11_INPUT_PER_INSTANCE_DATA, 1 }
			};

			// Create the input layout
			NEW_IA(tEffectStorage, vertexDesc, _countof(vertexDesc));
		}

Code: Select all

// IA 생성
	void NEW_IA(EffectStorage* tEffectStorage, D3D11_INPUT_ELEMENT_DESC* vertexDesc, int _FVFNum)
	{
		// Create the input layout
		D3DX11_PASS_DESC passDesc;
		tEffectStorage->mTech->GetPassByIndex(0)->GetDesc(&passDesc);
		HR(cCoreStorage::GetInstance()->md3dDevice->CreateInputLayout(
			vertexDesc,
			_FVFNum,
			passDesc.pIAInputSignature,
			passDesc.IAInputSignatureSize,
			&tEffectStorage->mInputLayout));
	}
류광
Posts: 3805
Joined: 2001-07-25 09:00
Location: GPGstudy
Contact:

Post by 류광 »

본문과 MSDN을 보면서 차근 차근 해보세요. 일단 위의 코드에서 눈에 띄는 것은... vertexDesc에 "WORLD"가 하나 뿐인데, 세계 행렬은 4x4 행렬이므로 DXGI_FORMAT_R32G32B32A32_FLOAT가 네 개 있어야 하지 않나요?
holycaous
Posts: 10
Joined: 2016-02-24 07:02

아.....

Post by holycaous »

가장 간단한 이치였는데, 바보같이..
이해 했다고 생각한게, 헛 이해를 하고 있었네요.

답변 감사합니다.
Post Reply