Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Narzędzie kompilatora efektów (fxc.exe) jest przeznaczone do kompilacji cieniowania HLSL w trybie offline.
Kompilowanie przy użyciu bieżącego kompilatora
Modele cieniowania obsługiwane przez bieżący kompilator są wyświetlane w Profiles. W tym przykładzie kompiluje cieniowanie pikseli dla modelu cieniowania 5.1 docelowego.
fxc /T ps_5_1 /Fo PixelShader1.fxc PixelShader1.hlsl
W tym przykładzie:
- ps_5_1 jest profilem docelowym.
- PixelShader1.fxc to wyjściowy plik obiektu zawierający skompilowany shader.
- PixelShader1.hlsl jest źródłem.
fxc /Od /Zi /T ps_5_1 /Fo PixelShader1.fxc PixelShader1.hlsl
Opcje debugowania obejmują dodatkowe opcje wyłączania optymalizacji kompilatora (Od) i włączania informacji debugowania (Zi), takich jak numery wierszy i symbole.
Aby uzyskać pełną listę opcji wiersza polecenia, zobacz stronę Składnia.
Kompilowanie przy użyciu starszego kompilatora
Począwszy od wersji Direct3D 10, niektóre modele cieniowania nie są już obsługiwane. Obejmują one modele cieniowania pikseli: ps_1_1, ps_1_2, ps_1_3 i ps_1_4, które obsługują bardzo ograniczone zasoby i są zależne od sprzętu. Kompilator został przeprojektowany z modelem cieniowania 2 (lub nowszym), co umożliwia zwiększenie wydajności kompilacji. Będzie to wymagało oczywiście pracy na sprzęcie obsługującym modele cieniowania 2 i nowsze.
Proszę również pamiętać, aby zapoznać się z informacjami o wersji zestawu SDK związanymi z Państwa wersją kompilatora FXC, z uwzględnieniem zachowania, na które ma wpływ przełącznik /Gec.
Korzystanie z narzędzia kompilatora efektów w podprocesie
Jeśli fxc.exe jest wywoływana jako podproces przez aplikację, ważne jest, aby upewnić się, że aplikacja sprawdza i odczytuje wszystkie dane w potokach danych wyjściowych lub błędów przekazanych do funkcji CreateProcess. Jeśli aplikacja czeka tylko na zakończenie podprocesu, a jeden z potoków stanie się pełny, podproces nigdy nie zakończy się.
Poniższy przykładowy kod ilustruje oczekiwanie na podproces i odczytywanie potoków danych wyjściowych i błędów dołączonych do podprocesu. Zawartość tablicy WaitHandles odpowiada uchwytom dla podprocesu, potoku dla stdout i potoku dla 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;
}
Aby uzyskać dodatkowe informacje na temat tworzenia procesu, zobacz stronę referencyjną CreateProcess.