DirectX11 отображение вершины без использования memcpy

по-видимому, у меня есть проблема с отображением vertexBuffers в GPU с использованием memcpy

Это мой начальный код

  D3D11_MAPPED_SUBRESOURCE MappedResource;
ID3D11Buffer *pBuffer = s_vertexBuffers.pBuffers[i].Get();
HRESULT hr = s_d3dContext->Map(pBuffer, 0, D3D11_MAP_WRITE_DISCARD, 0, &MappedResource);

float *vertices = (float *) MappedResource.pData,
*data = (float *)s_vertexBuffers.pData[i];
int len = s_vertexBuffers.pStrides[i];
if (i != VERTEX_BUFFER::COLOR)
{
len *= total;
}

memcpy(vertices, data, len);
s_d3dContext->Unmap(pBuffer, 0);

Что я собираюсь изменить, так это способ отображения (копирование данных из буферов в графический процессор) с использованием указателя, аналогичного указанному на Вот во что-то похожее на функцию SetShaderParameters (также в учебнике), которая использует указатель для получения данных в буфере и копирует данные напрямую, используя указатель в него

В основном, линия
float * vertices = (float *) MappedResource.pData
до тех пор
memcpy (вершины, данные, длина);

будет изменен на что-то вроде вышеупомянутого урока

Вот как сейчас выглядит мой код

VertexBuffers *dataPtr;
dataPtr = (VertexBuffers *)MappedResource.pData;
dataPtr->pBuffers[i] = s_vertexBuffers.pBuffers[i].Get();
dataPtr->pData[i] = s_vertexBuffers.pData[i];
dataPtr->pSizes[i] = s_vertexBuffers.pSizes[i];
dataPtr->pStrides[i] = s_vertexBuffers.pStrides[i];
if (i != VERTEX_BUFFER::COLOR)
{
dataPtr->pStrides[i] *= total;
}

Содержимое пространства имен struct VertexBuffers и VERTEX_BUFFER

namespace VERTEX_BUFFER
{
enum : int
{
POSITION,
COLOR,
TEXCOORD,
COUNT
};
}struct VertexBuffers
{
ComPtr<ID3D11Buffer>    pBuffers[VERTEX_BUFFER::COUNT];
void*                   pData[VERTEX_BUFFER::COUNT];
UINT                    pStrides[VERTEX_BUFFER::COUNT];
UINT                    pSizes[VERTEX_BUFFER::COUNT];
};

Я думаю, что проблема заключается в том, что всякий раз, когда я пытаюсь скопировать данные с помощью указателя, я не принимаю во внимание len, как это делает memcpy

Поскольку я сейчас изучаю DirectX и программирование, пожалуйста, исправьте меня, если что-то не так в моих объяснениях.

Извините за плохой код и плохие навыки программирования, а также за плохой английский, ура!

0

Решение

Так ты хочешь что-то подобное?

VertexBuffers *dataPtr;
dataPtr = (VertexBuffers *)MappedResource.pData;
dataPtr->pBuffers[i] = s_vertexBuffers.pBuffers[i].Get();
dataPtr->pSizes[i] = s_vertexBuffers.pSizes[i];
dataPtr->pStrides[i] = s_vertexBuffers.pStrides[i];
if (i != VERTEX_BUFFER::COLOR)
{
dataPtr->pStrides[i] *= total;
}
memcpy(dataPtr->pData[i], s_vertexBuffers.pData[i], dataPtr->pStrides[i]);

Как вы узнали, когда у вас есть два указателя (скажем, р и д), то все p = q; делает, это скопировать указатель. Если вы хотите скопировать данные, на которые указывают, вы должны написать memcpy(p, q, size_of_data);,

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]