Shader laden mit DirectX 11



  • Ein schönen morgen an alle,

    ich wollte euch mal fragen wie man mit Direct3D 11 ein Shader laden kann ohne auf die D3DX11 Funktionen zurück zu greifen. Ich hab dazu nichts in der Dukomentation gefunden. Weil wenn ich mit D3DX ein Schader laden will, der Shader nie geladen wird

    EDIT: Ich hab rausgefunden das man mit ID3DBlob* ein Shader laden kann, nur bei mir kommt die Fehlermeldung das der Bezeichner nicht gefunden wird... Ich hab alles Pfade richtig gelegt, benutzen tu ich das DirectX SDK Februar 2010... Wisst ihr voran das liegen könnte

    Vielen Dank im voraus
    Mfg Darkblade



  • Das mit den ID3DBlob* hab ich gelöst... Ich hab es nochmal mit D3DX versucht, aber der will den Shader nicht laden, weiß vllt einer von euch warum?
    Hier ist der Codeausschnit:

    ID3D11VertexShader* VertexShader;
    ID3D10Blob* VertexShaderBuffer;
    
    DWORD ShaderFlags = D3D10_SHADER_ENABLE_STRICTNESS;
    #if defined(DEBUG) || defined(_DEBUG)
    	ShaderFlags |= D3D10_SHADER_DEBUG;
    #endif	
    
    	HRESULT hr;
    
    	hr = D3DX11CompileFromFile(L"Shader.fx", NULL,     NULL, "RenderSceneVS", "vs_4_0_level_9_1", ShaderFlags, 0, NULL,
    		&VertexShaderBuffer, NULL, NULL);
    

    Der Shader liegt im selben Verzeichniss und ich kann ihn auch mit den DirectX Viewer öffnen

    Vielen Dank im voraus
    Mfg Darkblade



  • Im vorletzten Parameter kannst du einen Blob für die Compilerfehlermeldungen übergeben. Die wären evtl. interessant...



  • Ok hab ich gemacht, aber wie komm ich mit den Blob an den Fehler dran... Sieht jetzt so aus

    ID3D11VertexShader* VertexShader;
    ID3D10Blob* VertexShaderBuffer;
    ID3D10Blob* Fehler;
    
    DWORD ShaderFlags = D3D10_SHADER_ENABLE_STRICTNESS;
    #if defined(DEBUG) || defined(_DEBUG)
        ShaderFlags |= D3D10_SHADER_DEBUG;
    #endif    
    
        HRESULT hr;
    
        hr = D3DX11CompileFromFile(L"Shader.fx", NULL,     NULL, "RenderSceneVS", "vs_4_0_level_9_1", ShaderFlags, 0, NULL,
            &VertexShaderBuffer, &Fehler, NULL);
    

    Wie kann ich mit den Blob die Compilermeldung anzeigen lassen?

    Mfg Darkblade



  • Der Blob enthält dann einfach ein normales char bzw wchar_t Array...



  • Bei mir enthält der Blob kein char oder wchar Array



  • Inwiefern? Was genau bekommst du eigentlich für einen Fehler?



  • Also D3DX11CompileFromFile gibt als Fehler E_FAIL zurück
    VertexShaderBuffer hat den Wert NULL und der andere Blob hat die werte
    [0] = 0x5b44801c
    [1] = 0x5b44806a
    [2] = 0x5b448081

    Das ist vermutlich das Array was du gemeint hast? Der Name der Datei ist auch richtig eingegeben, liegt auch im selben Verzeichniss... Ich weiß echt nicht warum, dass nicht funktioniert 😞



  • Ich versteh nicht ganz wo dein Problem liegt. Der Blob is doch einfach nur ein haufen Bytes. Also hol dir den Pointer auf diesen Haufen und caste ihn in einen char* bzw. wchar_t* um...



  • Ok, hab die Fehlermeldung jetzt ^^
    "SimpleSample.fx(17, 1): error X3086: typisierte Texturen sind im strikten Modus veraltet"



  • Ok hab es hinbekommen das der Shader geladen wird... Vielen Dank für deine Hilfe, mich auf die richtige Spur, mit den Fehlerabfragen zu bringen

    Mfg Darkblade


Log in to reply