2012-03-17 2 views
1

파이썬에서 정점 버퍼 객체를 올바르게 삭제하는 방법을 궁금합니다. VBO를 다음과 같이 생성합니다.파이썬에서 VBO를 올바르게 삭제하는 방법은 무엇입니까?

from ctypes import pointer 
vbo_id = GLuint() 
glGenBuffers(1, pointer(vbo_id)) 

때때로 VBO를 삭제하고 대신 새 것을 생성해야합니다. 무슨 올바른 VBO를 삭제하는 방법이 궁금 해서요? 나는 다음과 같은 두 가지 방법을 시도했다하지만 난 하나가 정확한지 모르는 (그리고 파이썬 어느 쪽이든 불평하지 않음) : 올바른 전화

glDeleteBuffers(1, pointer(vbo_id)) 
or 
glDeleteBuffers(1, vbo_id) 

를? 또한 VBO를 삭제하면 GPU의 메모리를 확보 할 수 있습니까?

+0

'glIsBuffer (vbo_id)'를 호출하면 두 경우 모두 0을 반환하기 때문에 두 가지 방법이 모두 올바른 것처럼 보입니다. – memyself

답변

3

저는 파이썬을 쓰지 않으므로 그 소금으로 채 웁니다. 그러나 glDeleteBuffers()의 스펙은 많은 버퍼와 버퍼 이름의 배열을 취합니다. 그래서 아마 pointer(vbo_id)이어야합니다. C 언어에서는 glGenBuffers()과 같으므로 파이썬에서 같은 것을 가정합니다. 그 이유는 두 번째 매개 변수가 버퍼 이름뿐만 아니라 버퍼 이름의 배열이기 때문입니다.

+0

VBO가 삭제되었는지 확인하는 방법이 있습니까? 나는 glDeleteBuffers() 호출 후에 \t \t'glBindBuffer (GL_ARRAY_BUFFER, vbo_id)'를 호출하려고 시도했지만 어떤 에러도 발생하지 않습니다. – memyself

+2

'glIsBuffer()'를 호출하여 이미 할당되었는지 확인할 수 있습니다. OpenGL은 존재하지 않는 OpenGL의 버퍼를 생성하는 몇몇 버전의 OpenGL과 관련이 있다고 생각합니다. (처음 생성하는 것과는 다소 반대되는 것처럼 보입니다.) 그러나 그것에 관한 나의 기억은 모호합니다. 그래서 나는 잘못 기억하고있을 수 있습니다. – user1118321

+0

@memyself : 버퍼의 데이터를 바꾸고 싶다면 삭제할 필요는 없지만 단순히 glBufferData를 사용하여 새 데이터로 다시 초기화 할 수 있습니다. – datenwolf

관련 문제