2012-07-11 3 views
1
내가 컴파일 후 블롭 포인터에서 * ID3D11VertexShader을 만들고 ID3D11PixelShader *과 같이 할 수 D3DX11CompileFromFile 기능을 사용하고

: vsFilename가 유효한 표준 : : 문자열이고 m_vertexShader는 ID3D11ShaderVertex입니다D3DX11CompileFromFile의 네 번째 매개 변수는 무엇입니까?

ID3D10Blob * vertexShaderBuffer; 
ID3D10Blob * errorMessage; 

if(FAILED(D3DX11CompileFromFile(vsFilename.c_str(), NULL, NULL, "LightVertexShader", "vs_5_0", D3D10_SHADER_ENABLE_STRICTNESS, 0, NULL, &vertexShaderBuffer, &errorMessage, NULL))) 
    return false; 

if(FAILED(device->CreateVertexShader(vertexShaderBuffer->GetBufferPointer(), vertexShaderBuffer->GetBufferSize(), NULL, &m_vertexShader))) 
    return false; 

을 * . 네 번째 매개 변수가 무엇인지 궁금합니다. 어디에서 사용합니까, 언제 사용합니까? 그것이 무엇인지 상관 없습니까? 내 코드에서 어디에서 호출했는지, 사용자가 고유하지 않은 다른 목적이 없다면 사용자가 지정해야하는 것을 원하지 않기 때문에 묻습니다.

답변

3

그것은 예를 들어

파일의 정점 셰이더 기능의 이름, 당신이) (D3DX11CompileFromFile (shaderFileName.c_str 같은 함수 호출로 쉐이더 파일

... 

PS_INPUT VS(VS_INPUT input) 
{ 

    PS_INPUT output = (PS_INPUT) 0; 
    ... 

에서 동일한 코드가있는 경우, nullptr, nullptr, "VS", ...); 당신은 셰이더 파일에서 버텍스 셰이더로 작업을 시작하는 DirectX에 대해 설명합니다.

+0

오, 이제 알겠습니다. 그리고 쓰레기. 그게 내가 쉐이더 인터페이스를 설정하는 방법을 깨뜨렸다. 몇 가지를 바꿔야합니다. 고마워요! – FatalCatharsis

1

MSDN의 설명서를 확인 했습니까? 쉐이더 실행을 시작하는 셰이더 엔트리 포인트 함수의

이름 : D3DX11CompileFromFile 기능에 대한 참조는 pFunctionName 매개 변수에 대해이 말한다. effect를 컴파일하면, D3DX11CompileFromFile는 pFunctionName를 무시한다. 호출 된 함수가 포인터 매개 변수를 사용하지 않으면 포인터 매개 변수를 NULL로 설정하는 것이 좋은 프로그래밍 방법이므로 pFunctionName을 NULL로 설정하는 것이 좋습니다.

+0

예치. 내가 효과를 컴파일하지 않기 때문에 첫 문장 만 적용됩니다. 셰이더 - 엔트리 포인트 함수 란 무엇이며, 왜 나중에 사용하기 위해 그것을 알아야 할 필요가 있을까요? – FatalCatharsis

관련 문제