Falscher Parameter beim erstellen eines Matrixbuffers in DirectX 11



  • Hallo ihr Lieben 🙂

    Ich habe vor einiger Zeit ein project in c++ mit DirectX 11 gestartet und da ich nich besonders viel Ahnung von DirectX 11 habe, habe ich mir ein Tutorial gesucht und einfach mal mitgeschrieben. Soweit bin ich sehr zufrieden und es funktioniert fast Alles bis auf das hier:

    D3D11_BUFFER_DESC matrixBufferDesc;
    	ZeroMemory(&matrixBufferDesc, sizeof(D3D11_BUFFER_DESC));
    
    	matrixBufferDesc.Usage					= D3D11_USAGE_DEFAULT;
    	matrixBufferDesc.ByteWidth				= sizeof(D3D11_BUFFER_DESC);
    	matrixBufferDesc.BindFlags				= D3D11_BIND_CONSTANT_BUFFER;
    	matrixBufferDesc.CPUAccessFlags			= D3D11_CPU_ACCESS_WRITE;
    	matrixBufferDesc.MiscFlags				= 0;
    	matrixBufferDesc.StructureByteStride	= 0;
    
    	result = device->CreateBuffer(&matrixBufferDesc, NULL, &m_matrixBuffer);
    

    Wenn ich mir den inhalt von result auslese, bekomme ich folgende Fehlermeldung : The parameter is incorrect. Nun frage ich mich an welchem Parameter es liegt denn in dem Tutorial war es exakt das Selbe und es funktioniert.

    Im Vorhinein schonmal vielen Dank für eure Hile 🙂



  • 1. falsches forum

    2. da fehlt quellcode oder der link des tuts.
    (mind. deklaration von result und device)

    3. compiler-fehlermeldug wäre interessanter. oder bist du im debugger und hast vll im release-mode compiliert o.ä.?

    PS:
    exackt :S



  • Um mich nochmal exackt auszudrücken das Programm startet korrekt, der Debugger zeigt mir keine Fehlermeldung, aber das ist in diesem Fall auch garnicht nötig oder? Immerhin weiss ich ja wo das Problem liegt, mir Fehlt nur der Grund warum da ein Problem ist.



  • m_matrixBuffer
    ?

    (=zeig mal die deklaration)

    edit:
    https://msdn.microsoft.com/de-de/library/windows/desktop/ff476501(v=vs.85).aspx
    da ist btw die doku. vrmtl stimmt der 3. parameter nicht.

    bb



  • In der Header:

    ID3D11Buffer* m_matrixBuffer;
    

    Und dann im Constructor

    m_matrixBuffer = NULL;
    

    Das wars Mehr mach ich damit vohrher nicht 🙂



  • Du verlinkst das Tutorial nicht und hältst Dich auch ansonsten extrem bedeckt.
    Wie sollen wir da helfen? Kristallkugel? Oder denkst Du wir ziehen Dir gerne alles aus der Nase?

    Allerdings scheint es der Dokumentation von ID3D11Device::CreateBuffer method nach unsinnig zu sein D3D11_USAGE_DEFAULT und D3D11_CPU_ACCESS_WRITE in einem Aufruf zu kombinieren.



  • <a href= schrieb:

    https://msdn.microsoft.com/de-de/library/windows/desktop/ff476092(v=vs.85).aspx">If the bind flag is D3D11_BIND_CONSTANT_BUFFER then the ByteWidth value must be in multiples of 16, and less than or equal to D3D11_REQ_CONSTANT_BUFFER_ELEMENT_COUNT

    beachtet?

    edit: furble wurble scheint aber richtig zu liegen



  • Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (alle ISO-Standards) in das Forum Spiele-/Grafikprogrammierung verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Nimm für Usage D3D11_USAGE_DYNAMIC damit die CPU da bei jeden Frame die aktuellen Matrizen reinschreiben darf.


  • Mod

    WhileTrueDo schrieb:

    matrixBufferDesc.ByteWidth				= sizeof(D3D11_BUFFER_DESC);
    

    bytewidth ist die datenmenge die du im buffer verstauen moechtest, nicht die DESC groesse, das ist ja vorgegeben und auf der anderen seite bekannt.


Log in to reply