2016-07-21 3 views
0

인덱스 된 드로잉을 사용하여 OpenGL에서 드로잉합니다. 그래픽 카드의 정점 &을 보내고 로컬 버퍼를 해제하려고합니다. 꼭지점 버퍼 해제 - 문제가 없지만 인덱스 버퍼를 해제하면 아무 것도 표시되지 않습니다.glBufferData를 호출 한 후 OpenGL 메모리를 열면 데이터가 표시되지 않습니다.

glGenBuffers(1, &m_VBO); 
glBindBuffer(GL_ARRAY_BUFFER, m_VBO); 
glBufferData(GL_ARRAY_BUFFER, m_Vertices.size()*6*sizeof(float), m_Vertices.data(),GL_STATIC_DRAW); 

m_Vertices.clear(); 
m_Vertices.shrink_to_fit(); 

glGenBuffers(1, &m_IBO); 
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_IBO); 
glBufferData(GL_ELEMENT_ARRAY_BUFFER, m_TriangleIndeces.size() * sizeof(GLsizei), m_TriangleIndeces.data(), GL_STATIC_DRAW); 

// m_TriangleIndeces.clear(); 
// m_TriangleIndeces.shrink_to_fit(); 

를하지만 마지막 2 줄을 유엔 - 알아두기 - 아무것도 표시되지 않습니다 :

것은 단순히 퍼팅이 코드는 작동합니다.

또한 첫 번째 렌더링 후에 버퍼를 해제하려고했지만 동일한 현상이 발생했습니다.

일단 OpenGL이 데이터를 버퍼링하면 드라이버 나 그래픽 카드에 로컬 복사본이 남용되지 않아서 당황 스럽습니다.

저는 Windows 10에서 작업하고 있습니다. 장치 관리자는 그 의미가 "AMD radeon (R) M360"과 "Intel HD graphics 520"이라고 말합니다.

+0

m_TriangleIndeces의 정의를 표시 할 수 있습니까? – BDL

+0

아마 당신은 실제 드로잉에 대해 m_IBO를 사용하지 않지만 클라이언트 측 인덱스 배열을 사용합니까? – derhass

+0

색인에 어떤 유형을 사용하고 있습니까? 'GLsizei'는 분명히 무효로 보입니다. 나는 그것이 당신이 묘사하는 문제를 야기한다고 생각하지는 않지만'sizeof (GLsizei) '를 사용하는 것은 틀림 틀림 없다. –

답변

0

예, OpenGL 구현은 실제로 데이터 사본을 수행해야합니다.

이것은 드라이버 버그 일 수 있습니다.
2 개의 GPU가있는 것 같기 때문에 기본적으로 인텔 GPU에서 응용 프로그램을 실행하고 있다고 가정합니다 (인텔은 불량 GPU 드라이버가있는 것으로 유명합니다). 두 GPU에서 테스트 해 보았습니까? 그리고 귀하의 GPU 드라이버가 최신입니까?

+0

답장을 보내 주셔서 감사합니다. Hoe는 내 사용을 특정 GPU로 전달합니까? –

+0

드라이버 설정에서. 나는 그런 시스템을 가지고 있지 않아, 확실히 말할 수는 없다. 아마도 도움이 될 것입니다. https://support.serato.com/hc/en-us/articles/202305784-Changing-graphics-card-settings-to-use-your-dedicated-GPU-on-a-Windows-computer- 또한 GPU 드라이버에 관한 제 질문에 답변 해주십시오. – Tara

+0

드라이브에 관해서는, AMD는 실제로 업데이 트해야했습니다, 인텔 드라이버가 이미 최신이지만, 업데이 트가 트릭을하지 않았다 ... 나는 당신이 보낸 링 봐 –

관련 문제