C++에서 버퍼, 인덱스 버퍼 객체 및 버텍스 버퍼 객체 두 개를 채우려고합니다.C++ - 여분의 빈 값을 더하는 버퍼 조합
// Create the IBO and VBO data
GLushort* iboData = new GLushort[polyProcessed * 3];
Vertex* vboData = new Vertex[vertProcessed];
int iboPos = 0;
int vboPos = 0;
// Create the VBO and IBO
for(int i = 0; i < fragMap[0x36]; i++)
{
// Copy the data to the IBO
memcpy(iboData + iboPos, zmeshes[i].indices, zmeshes[i].numPoly * 3 * sizeof(GLushort));//sizeof(*zmeshes[i].indices));
// Advance the position
iboPos += zmeshes[i].numPoly * 3 * sizeof(GLshort);
// Copy the data to the VBO
memcpy(vboData + vboPos, zmeshes[i].vertices, zmeshes[i].numVert * sizeof(Vertex));//sizeof(*zmeshes[i].vertices));
// Advance the position
vboPos += zmeshes[i].numVert * sizeof(Vertex);
errorLog.writeSuccess("Build log: VBO size %i VBO pos %i IBO size %i IBO pos %i", zmeshes[i].numVert * sizeof(Vertex),
vboPos, zmeshes[i].numPoly * 3 * sizeof(GLshort), iboPos);
}
는 단순히 데이터의 크기를 복사 할 점점을 복사 한 다음 (여기서 버퍼에 다음 데이터를 입력하는 방법)의 위치를 전진하는 것.
나는 출력과 같이 얻을 : 올바른 (72 개) 값이 복사되고, 72 공의가 배후에서 복사로
<---> Index dump: 0
<---> Index dump: 1
<---> Index dump: 2
<---> Index dump: 2
<---> Index dump: 3
<---> Index dump: 0
<---> Index dump: 4
<---> Index dump: 5
<---> Index dump: 23
<---> Index dump: 23
<---> Index dump: 22
<---> Index dump: 4
<---> Index dump: 26
<---> Index dump: 6
<---> Index dump: 7
<---> Index dump: 7
<---> Index dump: 8
<---> Index dump: 26
<---> Index dump: 9
<---> Index dump: 34
<---> Index dump: 10
<---> Index dump: 10
<---> Index dump: 11
<---> Index dump: 9
<---> Index dump: 12
<---> Index dump: 25
<---> Index dump: 13
<---> Index dump: 13
<---> Index dump: 14
<---> Index dump: 12
<---> Index dump: 13
<---> Index dump: 25
<---> Index dump: 31
<---> Index dump: 31
<---> Index dump: 15
<---> Index dump: 13
<---> Index dump: 28
<---> Index dump: 33
<---> Index dump: 16
<---> Index dump: 36
<---> Index dump: 33
<---> Index dump: 35
<---> Index dump: 31
<---> Index dump: 24
<---> Index dump: 15
<---> Index dump: 17
<---> Index dump: 25
<---> Index dump: 18
<---> Index dump: 18
<---> Index dump: 25
<---> Index dump: 12
<---> Index dump: 27
<---> Index dump: 34
<---> Index dump: 9
<---> Index dump: 2
<---> Index dump: 1
<---> Index dump: 19
<---> Index dump: 30
<---> Index dump: 32
<---> Index dump: 20
<---> Index dump: 29
<---> Index dump: 25
<---> Index dump: 17
<---> Index dump: 17
<---> Index dump: 21
<---> Index dump: 29
<---> Index dump: 32
<---> Index dump: 26
<---> Index dump: 8
<---> Index dump: 8
<---> Index dump: 20
<---> Index dump: 32
<---> Index dump: 0
<---> Index dump: 0
<---> Index dump: 0
<---> Index dump: 0
<---> Index dump: 0
<---> Index dump: 0
<---> Index dump: 0
<---> Index dump: 0
<---> Index dump: 0
<---> Index dump: 0
<---> Index dump: 0
<---> Index dump: 0
<---> Index dump: 0
<---> Index dump: 0
<---> Index dump: 0
<---> Index dump: 0
<---> Index dump: 0
<---> Index dump: 0
<---> Index dump: 0
<---> Index dump: 0
<---> Index dump: 0
<---> Index dump: 0
<---> Index dump: 0
<---> Index dump: 0
<---> Index dump: 0
<---> Index dump: 0
<---> Index dump: 0
<---> Index dump: 0
<---> Index dump: 0
<---> Index dump: 0
<---> Index dump: 0
<---> Index dump: 0
<---> Index dump: 0
<---> Index dump: 0
<---> Index dump: 0
<---> Index dump: 0
<---> Index dump: 0
<---> Index dump: 0
<---> Index dump: 0
<---> Index dump: 0
<---> Index dump: 0
<---> Index dump: 0
<---> Index dump: 0
<---> Index dump: 0
<---> Index dump: 0
<---> Index dump: 0
<---> Index dump: 0
<---> Index dump: 0
<---> Index dump: 0
<---> Index dump: 0
<---> Index dump: 0
<---> Index dump: 0
<---> Index dump: 0
<---> Index dump: 0
<---> Index dump: 0
<---> Index dump: 0
<---> Index dump: 0
<---> Index dump: 0
<---> Index dump: 0
<---> Index dump: 0
<---> Index dump: 0
<---> Index dump: 0
<---> Index dump: 0
<---> Index dump: 0
<---> Index dump: 0
<---> Index dump: 0
<---> Index dump: 0
<---> Index dump: 0
<---> Index dump: 0
<---> Index dump: 0
<---> Index dump: 0
<---> Index dump: 0
이 볼 수 있습니다. 내 버퍼를 복사하는 데 문제가 있었습니까? 아니면 다른 곳에서 문제가 있다는 뜻입니까?
추가의 설명 :
1 개 메쉬 - 72 메쉬 인덱스 2 - 300 메쉬 인덱스 3-45 인덱스. 위의 함수를 사용 는, 이것이 수행 버퍼 생성 : - [71] -
[0] 1 개 개의 정점을 메쉬 모든 정확한 [72] - [142] - 빈 [142] - [ EndofBuffer] - 메쉬 2
0으로 채워진 크기가 중복 생성됩니다.
당신은 72 개의 값만 있어야한다고 말합니다. 이 루프 동안'fragMap [0x36]'이 72인지 확신합니까? 'zmeshes'의 요소 수보다 크면'zmeshes'의 끝을지나 읽고'iboData'와'vboData'에 정크 값을 씁니다. 또는 인덱스 덤프를 생성 한 코드가 너무 반복적으로 반복 될 수 있습니다. 위의 루프와 인덱스 덤프를 생성하는 루프의 루프 조건 값을 확인하고 둘 다'zmeshes'에서 복사하려는 요소의 수와 일치하는지 확인합니다. –
@JoshTownzen fragMap은 조각의 수를 유지하는지도입니다. 0x36 조각을 찾고있었습니다. 문제는 버퍼에 복사 할 때마다 이전의 버퍼 크기 인 x 위치에서 'x'자리에 복사한다는 것입니다. 내 게시물을 더 명확하게 업데이트했습니다. –
"0x36 조각을 찾고있다"고 말할 때, 'fragMap'의 0x36 요소에 나열된만큼의 조각을 찾고 있다는 것을 확인해 주시겠습니까? 그렇다면'fragMap [0x36]'의 값을 디버깅하여 원하는 숫자가 포함되도록 할 것을 제안합니다. 대신에 당신이 문자 0x36 조각 (십진수로 54)을 찾고 있다는 것을 의미한다면, 그것은 위의 루프가 할 일이 아닙니다. –