Рисование квадрата в DirectX

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by maked0n, 14 Aug 2011.

  1. maked0n

    maked0n New Member

    Joined:
    14 Sep 2010
    Messages:
    144
    Likes Received:
    3
    Reputations:
    0
    Уважаемые форумчане! При рисовании квадрата с помощью буфера индексов столкнулся с проблемой вылета программы. Вылетает с такой ошибкой:
    Code:
    Unhandled exception at 0x0098e590 in indexBuffer1.exe: 0xC0000005: Access violation reading location 0x015d8a4c.
    запускается и тут же вылетает. Подозреваю, что это из-за строки
    Code:
    pDirect3DDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 0, 4, 0, 2);
    так как если ее заккоментить, то все ок.
    вот код функции InitGeometry()

    Code:
    void InitGeometry()
    {
    	pDirect3DDevice->CreateVertexBuffer(3 * sizeof(CUSTOMVERTEX), D3DUSAGE_WRITEONLY, D3DFVF_XYZ|D3DFVF_DIFFUSE, D3DPOOL_DEFAULT, &vertexBuffer, NULL);
       pDirect3DDevice->CreateIndexBuffer(6 * sizeof(unsigned short), D3DUSAGE_WRITEONLY, D3DFMT_INDEX16, D3DPOOL_DEFAULT, &indexBuffer, NULL);
    
       CUSTOMVERTEX vertices[] = 
       {
    	   {0.0f, 0.0f, 0.0f, 0xff000000, },
    	   {0.0f, 1.0f, 0.0f, 0xff000000, },
    	   {1.0f, 0.0f, 0.0f, 0xff000000, },
    	   {1.0f, 1.0f, 0.0f, 0xff000000, },
       };
    
       unsigned short indexes[] = { 0, 1, 2, 1, 3, 2 };
    
       void* pVertices;
       void* pIndexes;
    
       vertexBuffer->Lock(0, sizeof(vertices), (void**)&pVertices, 0);
       memcpy(pVertices, vertices, sizeof(vertices));
       vertexBuffer->Unlock();
    
       indexBuffer->Lock(0, sizeof(indexes), (void**)pIndexes, 0);
       memcpy(pIndexes, indexes, sizeof(indexes));
       indexBuffer->Unlock();
    
       pDirect3DDevice->SetStreamSource(0, vertexBuffer, 0, sizeof(CUSTOMVERTEX));
       pDirect3DDevice->SetFVF(D3DFVF_XYZ|D3DFVF_DIFFUSE);
       pDirect3DDevice->SetIndices(indexBuffer);
    вызываю я ее сразу же после создания устройства directX.
    объявление вершинного и индексного буферов:

    Code:
    IDirect3DVertexBuffer9* vertexBuffer = 0;
    IDirect3DIndexBuffer9* indexBuffer = 0;
    я смотрел в Msdn, там также вызывают эту функцию, с теми же аргументами. в чем проблема?
     
  2. maked0n

    maked0n New Member

    Joined:
    14 Sep 2010
    Messages:
    144
    Likes Received:
    3
    Reputations:
    0
    решено