이 문제는 원래 related question에서 발생했으며 일부 코드를 읽는 데 문제가있었습니다. 대답은이 줄로 밝혀졌습니다.포인터를 어떻게 오프셋으로 사용합니까?
&((GLushort *)0)[3 * mesh.sBoneBatches.pnBatchOffset[batchNum]]
포인터로 평가됩니다. 그리고 정점 인덱스의 하위 집합을 그릴 오프셋로 해석됩니다
glDrawElements(GL_TRIANGLES, i32Tris * 3, GL_UNSIGNED_SHORT, &((unsigned short*)0)[3 * mesh.sBoneBatches.pnBatchOffset[batchNum]]);
에 사용됩니다.
현재 내 코드에서는 glDrawElements에서 openGL이 수행하는 작업 중 일부를 직접 수행해야하며 포인터를 오프셋으로 사용하는 방법을 알 수 없습니다. glDrawElements는 (내 코드에서 vertexIndices 이름) 인덱스의 배열을 사용하기 때문에 나는이 같은 시도 :
vertexIndices[&((GLushort *)0)[3 * mesh.sBoneBatches.pnBatchOffset[batchNum]]]
을하지만 분명히 실패했습니다.
편집 1 : 난 그냥이 시도하고 있지만 정확한 있다면 그것은 여전히 ... 확실하지 컴파일합니다. vertexIndices + (uint) &((GLushort *)0)[3 * mesh.sBoneBatches.pnBatchOffset[batchNum]]
나는 '오프셋 된 포인터'에 대한 전반적인 생각이 매우 편안하지 않다고 생각한다. 나는 모든 포인터를 0에서부터의 오프셋으로 생각할 수 있다고 생각한다. 그러나 그것은 여전히 여기에있는 구문에 도움이되지 않는다 : -p. – spencewah
원래 질문을 보았을 때 생각했던 것과 똑같은 생각이 들었습니다. 정점 배열이 유효한 메모리 주소가 아닐 때 glDrawElements가 전달 된 정점 배열에 액세스하려고하면 충돌이 발생하지 않는 이유는 무엇입니까?)? –
이 질문은 세부 사항에 대해 잠깐 사과 드리며,이 잘못된 메모리 주소가 전달 될 때 glDrawElements가 중단되지 않는 이유를 완전히 조사한 다른 질문 (게시물에 링크되어 있음)의 확장입니다. – spencewah