셰이더 코드를 디버깅 하시겠습니까?


13

게임 엔진을 작성 중이며 투시 카메라를 사용하면 검은 색 화면이 나타납니다. 나는 이것이 왜 많은지 공유해야 할 코드가 있기 때문에 이것이 왜 정확한지 묻지 않을 것입니다.

문제는 디버깅 방법을 모른다는 것입니다. 모든 변경 사항은 투영 매트릭스이며 투영 매트릭스가 제대로 표시되면 왜 작동하지 않는지 모르겠습니다. 이상적으로 셰이더가 계산을 수행하면서 다양한 것들의 값을 인쇄했지만 GLSL에는 불편한 점이 printf () 함수가 없습니다.

그래서 내 질문은 : 어떻게 내 문제를 디버깅합니까? 내가 생각할 수있는 유일한 것은 클라이언트 측에서 할 수있는만큼 많은 값을 확인한 다음 순열로 프로그래밍하는 것입니다. 그러나 나는 그것을하고 아무데도 얻지 못했습니다. 비디오 카드에서 무슨 일이 일어나고 있는지 볼 수있는 방법이 있습니까? 내가 사용할 수있는 완전히 다른 기술이 있습니까?

GLSL 버전 420 (및 해당 버전과 관련된 기능)을 사용하고 있으므로 glslDevil이 2010 년에 마지막으로 업데이트되었다는 점을 고려할 때 옵션이라고 생각하지 않습니다.

편집하다

완전히 관련이없는 디버깅을 통해 문제를 해결했습니다.

답변:


2

glIntercept와 같은 프로그램을 사용할 수도 있습니다. glIntercept는 PIX와 비슷하지만 OpenGL에 사용됩니다. 모든 호출을 가로 채서 기록하는 것 외에도 런타임에 셰이더 사용을 표시하고 셰이더를 편집 할 수 있습니다. 이 마지막 옵션 (런타임에서 셰이더 편집)은 무언가 잘못 될 때까지 부분에서 편집을 계속하고 색상을 출력하여 빠르게 값을 디버깅 할 수 있기 때문에 디버깅 할 때 매우 유용합니다.

http://code.google.com/p/glintercept/


유용한 것 같습니다. GLSL 4.20 EDIT와 함께 작동하는지 테스트 할 것입니다. 몇 가지 이유로 작동하지 않을 것이라고 생각합니다. 더 이상 사용되지 않아 셰이더 코드가 아닌 OpenGL의 많은 특성에 의존합니다.
Avi

아 너무 나쁘다, 나는 그것이 오래되었다는 것을 몰랐다. 그래도 GLSL4.2에는 일종의 디버거가 있어야합니다. 내가 물어볼 게 그 사이에 이것이 효과가 있을까요? developer.nvidia.com/content/nvidia-shader-debugger#Features
Roy T.

Cg 셰이더에서만 작동합니다 : |
Avi

4

확실하지는 않지만 NVIDIA Nsight는 Shader를 디버깅 할 수 있어야합니다. 적어도 일부 이전 버전에서는 GLSL을 지원한다고 생각합니다 (찾을 수 있어야 함). 그것은 Visual Studio와 꽤 잘 통합되어 있지만 쉽지는 않지만 많은 유용한 것들을 가지고 있지만, 이전 버전에서는 네트워크를 통해 쉐이더를 디버깅하기 위해 각각 GPU를 갖춘 2 대의 머신이 필요했습니다 (최신 버전에서는 "로컬"디버깅이 가능함) . 또한 유용한 IDE 인 것처럼 보이지만 GLSL 디버깅이없는 Shader Designer [2]를 확인하십시오.

[1] http://developer.nvidia.com/content/nvidia-nsight-visual-studio-edition

[2] http://www.opengl.org/sdk/tools/ShaderDesigner/


NSight는 실제로 셰이더를 디버깅하려면 관리자 권한이 필요합니다.
starbeamrainbowlabs

1

불행히도 opengl 디버깅은 쉽지 않습니다. 내가 찾은 것들은 다음과 같습니다.

  • 모든 호출 후 glGetError 사용
  • 새로운 디버그 확장 (ARB_debug _ ???)을 사용하십시오.
  • gDebugger를 사용하여 각 호출 후 화면에 그려진 내용을 확인하십시오.
  • apitrace를 사용하여 각 opengl 명령 후 발생하는 상황 확인
  • 현재 입력을 기반으로 다른 색상을 출력하도록 셰이더를 수정하고 특정 색상이 표시되는 이유를 이해하려고 시도
  • 가위 테스트, 깊이 테스트, 후면 컬링 등 그리기 기능을 제한하는 모든 OpenGL 기능을 비활성화합니다.

1
이것은 실제로 내 질문에 대답하지 않습니다. 클라이언트 측 OpenGL 호출을 디버깅하는 데 도움이되지만 셰이더 프로그램을 디버깅하는 데는 도움이되지 않습니다. 클라이언트 측 OpenGL 호출을 디버깅하는 방법을 알고 있습니다.
Avi

1

개인적으로 저는 여전히 RenderMonkey를 사용합니다. 그러나 실제 앱의 외관 일 뿐이므로 몇 가지 이상한 제한이 있기 때문에이 정확한 질문에 완전히 적합하지는 않습니다. 그것은 잘 지원되지 않지만 GLSL 디버깅에 더 좋은 것을 찾지 못했습니다.


특히 카메라 움직임과 같은 것들이 내가 사용하지 않는 gl_ModelViewProjectionMatrix 수정에 의존하기 때문에 rendermonkey가 내가 원하는 것이 확실하지 않습니다.
Avi
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.