Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
A ferramenta de compilador de efeitos (fxc.exe) foi projetada para compilação offline de sombreadores HLSL.
Compilando com o compilador atual
Os modelos de sombreador suportados pelo compilador atual são mostrados em Profiles. Este exemplo compila um sombreador de pixel para o destino do modelo de sombreador 5.1.
fxc /T ps_5_1 /Fo PixelShader1.fxc PixelShader1.hlsl
Neste exemplo:
- ps_5_1 é o perfil alvo.
- PixelShader1.fxc é o arquivo de objeto de saída que contém o sombreador compilado.
- PixelShader1.hlsl é a fonte.
fxc /Od /Zi /T ps_5_1 /Fo PixelShader1.fxc PixelShader1.hlsl
As opções de depuração incluem opções adicionais para desativar otimizações do compilador (Od) e habilitar informações de depuração (Zi), como números de linha e símbolos.
Para obter uma lista completa das opções de linha de comando, consulte a página Sintaxe .
Compilando com o compilador herdado
A partir do Direct3D 10, alguns modelos de sombreador não são mais suportados. Estes incluem modelos de sombreador de pixel: ps_1_1, ps_1_2, ps_1_3 e ps_1_4 que suportam recursos muito limitados e dependem de hardware. O compilador foi redesenhado com shader model 2 (ou superior), o que permite maior eficiência com a compilação. Isso, é claro, exigirá que você esteja executando em hardware que suporte modelos de sombreador 2 e superiores.
Observe também que você deve consultar as notas de versão do SDK associadas à sua versão do compilador FXC para o comportamento afetado pela opção /Gec.
Usando a ferramenta effect-compiler como subprocesso
Se fxc.exe for gerado como um subprocesso por um aplicativo, é importante garantir que o aplicativo verifique e leia todos os dados nos pipes de saída ou de erro passados para a função CreateProcess. Se a aplicação apenas esperar que o subprocesso termine e um dos tubos ficar cheio, o subprocesso nunca terminará.
O código de exemplo a seguir ilustra a espera por um subprocesso e a leitura dos tubos de saída e erro anexados ao subprocesso. O conteúdo da matriz WaitHandles corresponde às alças para o subprocesso, o tubo para stdout e o tubo para stderr.
HANDLE WaitHandles[] = {
piProcInfo.hProcess, hReadOutPipe, hReadErrorPipe
};
const DWORD BUFSIZE = 4096;
BYTE buff[BUFSIZE];
while (1)
{
DWORD dwBytesRead, dwBytesAvailable;
dwWaitResult = WaitForMultipleObjects(3, WaitHandles, FALSE, 60000L);
// Read from the pipes...
while (PeekNamedPipe(hReadOutPipe, NULL, 0, NULL, &dwBytesAvailable, NULL) && dwBytesAvailable)
{
ReadFile(hReadOutPipe, buff, BUFSIZE - 1, &dwBytesRead, 0);
streamOut << std::string((char*)buff, (size_t)dwBytesRead);
}
while (PeekNamedPipe(hReadErrorPipe, NULL, 0, NULL, &dwBytesAvailable, NULL) && dwBytesAvailable)
{
ReadFile(hReadErrorPipe, buff, BUFSIZE - 1, &dwBytesRead, 0);
streamError << std::string((char*)buff, (size_t)dwBytesRead);
}
// Process is done, or we timed out:
if (dwWaitResult == WAIT_OBJECT_0 || dwWaitResult == WAIT_TIMEOUT)
break;
}
Para obter informações adicionais sobre como gerar um processo, consulte a página de referência do CreateProcess.