Problem mir D3DUSAGE_DYNAMIC



  • Problem mir D3DUSAGE_DYNAMIC.
    Ich habe ein Programm mit DirectX 9 und Visual C++ 6 geschrieben,
    das Programm läuft unter Windows XP, unter Vista32 und Vista64 aber unter Windows7 kann ich nur bis 380 Triangles Dynamisch simulieren das bedeutet; move, rotate, displace, Farbe ändern, wenn ich mehr als 380 kopiere kann ich die Triangles nicht simulieren.
    Ich habe den ASUS G75VW mit NVIDIA GTX 670M hat das wahrscheinlich mit der Grafikkarte zu tun?
    Ich kann das Programm auf dem ASUS-Rechner Fehlerfrei kompilieren.

    Die Funktionen sehen so aus:
    //*****
    HRESULT _CLetters::Init()
    {
    SLL = 380; // max
    pd3dDevice->CreateVertexBuffer(3*SLL*sizeof(POLYVERTEX), D3DUSAGE_DYNAMIC, POLYVERTEX::FVF, D3DPOOL_DEFAULT, &m_pLVB, NULL);
    m_pLVB->Lock(0, 3*SLL*sizeof(POLYVERTEX),(VOID**)&lV, D3DLOCK_DISCARD);
    {
    lV=.....;
    }
    m_pLVB->Unlock();
    return S_OK;
    }
    //*****
    HRESULT _CLetters::Render()
    {
    if(!BSL)
    {
    pd3dDevice->SetRenderState( D3DRS_LIGHTING, TRUE );
    pd3dDevice->SetStreamSource( 0, m_pLVB, 0, sizeof(POLYVERTEX) );
    pd3dDevice->SetFVF( POLYVERTEX::FVF );
    pd3dDevice->DrawPrimitive( D3DPT_TRIANGLELIST, 0, SLL );
    }
    return S_OK;
    }
    //*****
    Für die Hilfe bedanke ich mich in Voraus.
    Gruß
    jaz_Bozz



  • jaz_bozz schrieb:

    [...] aber unter Windows7 kann ich nur bis 380 Triangles Dynamisch simulieren das bedeutet; move, rotate, displace, Farbe ändern, wenn ich mehr als 380 kopiere kann ich die Triangles nicht simulieren.

    Hat vielleicht was damit zu tun, dass die Größe deines VertexBuffer exakt 3 * 380 * sizeof(POLYVERTEX) beträgt!? 😉


  • Mod

    dot schrieb:

    jaz_bozz schrieb:

    [...] aber unter Windows7 kann ich nur bis 380 Triangles Dynamisch simulieren das bedeutet; move, rotate, displace, Farbe ändern, wenn ich mehr als 380 kopiere kann ich die Triangles nicht simulieren.

    Hat vielleicht was damit zu tun, dass die Größe deines VertexBuffer exakt 3 * 380 * sizeof(POLYVERTEX) beträgt!? 😉

    er benutzt doch bei create und lock dieselbe konstante:
    [cpp]
    SLL = 380; // max
    pd3dDevice->CreateVertexBuffer(3***SLL***sizeof(POLYVERTEX), D3DUSAGE_DYNAMIC, POLYVERTEX::FVF, D3DPOOL_DEFAULT, &m_pLVB, NULL);
    m_pLVB->Lock(0, 3*SLL*sizeof(POLYVERTEX),(VOID**)&lV, D3DLOCK_DISCARD);
    [/cpp]

    @jaz_bozz
    was meinst du mit "kann ich die Triangles nicht simulieren", nicht koennen ist sehr wage als fehlerbeschreibung. da kann man als fehlerloesung sogar 'dann ist mehr muessli morgens' empfehlen 😉
    zeig den teil im lock der die daten reinkopiert, vielleicht geht da etwas schief, und wie die declaration von deiem "POLYVERTEX" aussieht, vielleicht schreibst du zuviel oder mit falschem offset oder so.



  • IDirect3D9::CreateDivice Methode; ich musste nur den Parameter DWORD BehavoirFlags auf D3DCREATE_SOFTWARE_VERTEXPRECESSING setzen.
    BehavoirFlags = D3DCREATE_SOFTWARE_VERTEXPRECESSING;
    Manchmal muss man Menschen zum Suchen jagen.
    Danke für deine Hilfe.
    Gruß.
    jaz_bozz


Log in to reply