Autor Wątek: Direct3D 11 - Tutorial 2 i 3 - brak pewnych informacji  (Przeczytany 504 razy)

Offline FireBoll8

  • Użytkownik

# Lipiec 29, 2010, 21:19:26
Witam mam pytanie odnośnie tutorialu  z MSDN dotyczącego Direct3D 11. Otóż po przeczytaniu tutoriala 2 i 3 pomyślałem se że zabiorę się za stworzenie aplikacji podchodzącej pod wiedzę tych tutków - czyli narysowanie na ekranie prostego trójkąta ... oczywiście chciałem spojrzeć jak oni to robią .... patrzę i rozumiem wszystko to co zostało opisane w tutkach , interesuje mnie jednak jedna zdefiniowana funkcja której nie rozumiem do końca po co to jest .. nazwa wskazuje że kompiluje shadery z plików ... no ale mi to za wiele nie mówi ;/
HRESULT CompileShaderFromFile( WCHAR* szFileName, LPCSTR szEntryPoint, LPCSTR szShaderModel, ID3DBlob** ppBlobOut )
{
    HRESULT hr = S_OK;

    DWORD dwShaderFlags = D3DCOMPILE_ENABLE_STRICTNESS;
#if defined( DEBUG ) || defined( _DEBUG )
    // Set the D3DCOMPILE_DEBUG flag to embed debug information in the shaders.
    // Setting this flag improves the shader debugging experience, but still allows
    // the shaders to be optimized and to run exactly the way they will run in
    // the release configuration of this program.
    dwShaderFlags |= D3DCOMPILE_DEBUG;
#endif

    ID3DBlob* pErrorBlob;
    hr = D3DX11CompileFromFile( szFileName, NULL, NULL, szEntryPoint, szShaderModel,
        dwShaderFlags, 0, NULL, ppBlobOut, &pErrorBlob, NULL );
    if( FAILED(hr) )
    {
        if( pErrorBlob != NULL )
            OutputDebugStringA( (char*)pErrorBlob->GetBufferPointer() );
        if( pErrorBlob ) pErrorBlob->Release();
        return hr;
    }
    if( pErrorBlob ) pErrorBlob->Release();

    return S_OK;
}


W ich przykładowym kodzie nie ma także tego :

float4 VS( float4 Pos : POSITION ) : SV_POSITION
    {
        return Pos;
    }


float4 PS( float4 Pos : SV_POSITION ) : SV_Target
    {
        return float4( 1.0f, 1.0f, 0.0f, 1.0f );    // Yellow, with Alpha = 1
    }


A opisują to w samouczku ... Zdaję mi się że tworzy to jakieś dane pod vertex shader i pixel shader ale nie jetem właśnie pewien ... , chyba w pierwszym przypadku chodzi o pozycje wierzchołków a w drugim po prostu ustalają kolor czyż nie ?- Ale w takim razie dlaczego tego nie wywołali ? Mogły ktoś bardziej doświadczony pomóc i opisać funkcję powyżej ?
« Ostatnia zmiana: Lipiec 29, 2010, 21:23:22 wysłana przez FireBoll8 »

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Zielony

  • Użytkownik
    • Ghurund Engine

# Lipiec 29, 2010, 22:10:05
Dwa krótkie fragmenty kodu są napisane w HLSL i najprawdopodobniej są w oddzielnych plikach. To są właśnie shadery definiujące sposób narysowania trójkąta na ekranie. Ich wywołaniem nie trzeba się martwić - wystarczy skompilować kod shadera z pliku, załadować, uzupełnić danymi, a reszta 'zrobi się sama' przy wywołaniach rysowania.

Offline FireBoll8

  • Użytkownik

# Lipiec 29, 2010, 22:25:09
Aha rozumiem czyli najprawdopodobniej  te dwa fragmenty kodu znajdują się w pliku fx. Dzięki za wytłumaczenie teraz rozumiem do czego jest ta funkcja ładująca shadery ;]