2012-02-08 10 views
2

OpenGL의 변환 피드백 기능을 사용하려고합니다. 필자는 최소한의 정점 셰이더를 작성하고 그와 함께 프로그램을 만들었습니다 (조각 셰이더가 없습니다). 또한 하나의 출력이 다양한 이름으로 glTransformFeedbackVaryings을 호출했으며 버퍼 모드를 GL_INTERLEAVED_ATTRIBS으로 설정했습니다. 셰이더 프로그램 (나는 또한.GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN은 항상 0을 반환합니다.

을 나는 glTransformFeedbackVaryings 호출 한 후 연결 확인 내가 glEnableVertexAttribArray를 사용하여 하나의 정점 '속성 배열을 설정 한 컴파일 및 미세 링크, 일반 정점 속성에 대한 VBO를 할당하기위한 glVertexAttribPointer에 전화를했다 속성.

은 내가 생성 한 다른 버퍼에 TRANSFORM_FEEDBACK_BUFFER을 결합 충분히 큰 많음 동안 피드백을 변환하기 위해 작성하는 것 데이터 저장소를 만들었습니다.

그때 피드백을 변환 활성화 glDrawArrays(GL_POINTS, 0, 1000)으로 전화하십시오. 프로그램을 실행하는 동안 충돌이 발생하지 않습니다.

문제는 변환 피드백이 glDrawArrays 호출 중에 TRANSFORM_FEEDBACK_BUFFER에 아무 것도 쓰지 않는다는 표시가 나타나지 않는다는 것입니다. 나는 GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN을 모니터링하는 쿼리를 설정하고 항상 0을 반환한다. 아무리 노력해도 아무 것도 쓰지 않는 변환 피드백을 얻을 수 없다. (의미있는 것은 전혀 신경 쓰지 마라.)

누구에게도 제안 사항이 있다면 어떻게하면 변환을위한 피드백을 얻을 수 있었는지, 또는 내가 알아야 할 것들을 알려주십시오.

참고 : 변환 피드백 개체를 사용할 수 없으며 꼭지점 배열 개체를 사용하고 있지 않습니다.

+1

알고리즘이 잘된 것 같습니다. 아마 코드에 버그가있을 수 있습니다. 코드를 실제로 보지 않고도 말할 수있는 방법이 없습니다. –

+0

도움을 주셔서 감사합니다, 가능한 코드의 몇 줄로 변환 피드백을 사용한 간단한 .cpp 파일을 작성한 다음 적절한 응용 프로그램에서 단계를 수행하면'glBindBufferBase'를 사용하는 방법에 문제가 있다는 것을 지적했습니다 (또한 다른 것들을 시도). 쿼리가 예상 값을 반환하므로 지금 내가 다시 돌아 왔다고 생각합니다! 다시 한 번 감사드립니다! –

답변

2

문제는 결국 내가 glBindBufferBase으로 전화를 걸었다 고 생각합니다. 원래의 질문에서이 함수 호출을 볼 수 없다는 점을 감안할 때 나는 그것을 생략했다.

확실히 GL_TRANSFORM_FEEDBACK_BUFFER도 올바른 버퍼 객체 glBindBuffer을 호출해야합니다. 전에 바인딩해야합니다.

관련 문제