버그 해결을 위한 모든 질문을 던져
0 votes
117 views
안녕하세요.

요즘 OpenGL 로 메시 데이타를 로딩해서 출력하는 기능을 만들고 있습니다.

현재 GL_LINES 로 mesh 의 edge를 그려주고 있는데요.

edge의 갯수는 5백만개정도가 됩니다..

edge를 그리지 않는다면 상당히 빠른데.. edge를 그리면 현재 초당 2프레임이 나올까 말까 하네요.

OpenGL 에서는 GL_LINES 의 성능이 나쁘다는걸 알고 있습니다..

edge를 그리는데 사용하는 인덱스 버퍼 데이타를 아래와 같이 그려주고 있습니다..

glDrawElements(GL_LINES, edge::GetDrawCount(comp_id),
                GL_UNSIGNED_INT, edge::GetDrawArrayPointer(comp_id));
 

생각으론 CPU에서 비디오 메모리로 올리는 시간이 필요하니 느린가 보다 했습니다..

그래서 아래와 같이 비디오 메모리로 edge 인덱스 데이타를 올려주고..

GLuint buffer;
glGenBuffers(1, &buffer);
m_vm_show_buffer[comp_id] = buffer;
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_vm_show_buffer[comp_id]);
glBufferData(GL_ELEMENT_ARRAY_BUFFER,
                    GetDrawArraySize(comp_id),
                    GetDrawArrayPointer(comp_id),
                    GL_STATIC_DRAW);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);

다음 아래와 같이 그리도록 수정하였습니다.

 glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_vm_show_buffer[comp_id]);        glDrawElements(GL_LINES, edge::GetDrawCount(comp_id), GL_UNSIGNED_INT, 0);        glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);

결과는 별 차이가 없네요..

5백만개의 line을 그리는건 OpenGL로는 무리일까요?

glBufferData 는 비디오 메모리 영역이 아닌가요?

답답한 나머지 질문을 드려봅니다..

감사합니다.
asked (5 point) , 117 views

질문에 대한 답변을 하려면 로그인 또는 가입해야합니다.

버그 해결을 위해 도움을 구하고, 도움을 주세요. 우리는 그렇게 발전합니다.

throw bug 는 프로그래밍에 대한 전분야를 다룹니다. 질문,논의거리,팁,정보공유 모든 것이 가능합니다. 프로그래밍과 관련이 없는 내용은 환영받지 못합니다.

307 질문
431 answers
423 댓글
882 users