2013-08-05 2 views
2

iOS 장치 용 OpenGL ES 2.0을 사용하는 프레임 워크로 GPGPU 기능을 많이 출시하려고합니다.XCode OpenGL ES 디버거의 쉐이더 코드 숨기기

XCode에서 OpenGL ES 프레임을 캡처 할 때 사용되는 셰이더 코드를 볼 수 있습니다. 이 일이 발생하지 않도록하는 방법이 있습니까? 나는 OpenGL ES 프로그램을 링크 한 후에 glDeleteShaderglDetachShader으로 셰이더를 삭제하고 제거하려고 시도했지만 코드는 여전히 캡처됩니다.

방탄 옵션을 찾고 있지 않습니다. 아마도 존재하지 않을 것입니다. 버튼을 누르는 것보다 코드를 좀 더 어렵게 만드는 것입니다.

감사합니다.

+0

쉐이더 코드를 숨기려는 사람은 누구입니까? Xcode에서 OpenGL ES 프레임을 캡처하려면 사용자가 이미 Xcode 디버거에 연결된 앱을 실행하고 있어야합니다. 앱 스토어 배포 앱에서 그렇게하는 것은 쉽지 않습니다. – rickster

답변

0

디버거가 glShaderSource에 대한 호출에서 입력을 캡처해야하므로 컴파일 후 실제 쉐이더 소스가 VRAM에 저장되지 않습니다. 나는이 문제를 직접 극복 할 방법을 생각할 수 없다. OpenGL ES는 사전 컴파일 된 쉐이더 바이너리를 지원하지 않으므로 을 호출해야합니다.

아마도 컴파일 타임 매크로를 사용하거나 심지어 변수 이름 등을 스크램블하기위한 스크립트를 사용하여 원래 쉐이더 코드를 흐리게하는 것이 좋습니다 (코드 번호가 attribsuniforms 인 경우 앱 코드와의 연결에 영향을 미침).

다음은 쉐이더 코드의 난독 화/최소화에 사용되는 도구입니다. WebGL 용으로 제작 되었기 때문에 완벽하게 작동하지 않을 수 있습니다. http://glslunit.appspot.com/compiler.html

+0

고마워, 나는 뒤섞인 길을 갈거야. BTW에서는 OpenGL ES에서 바이너리 셰이더가 지원됩니다. 'glShaderBinary'는 iOS에서도 OpenGL ES 2.0에 포함되어 있습니다 (GPU에서 컴파일 된 쉐이더를 얻을 수있는 확장이 없으므로 쓸모가 없습니다). – user1906

+0

흠 나는 그 사실을 몰랐다. 바이너리 형식이 표준화되기 전까지는 쓸모 없을 것입니다. OpenGL의 이러한 결정은 저를 혼란스럽게합니다. 드라이버가 표준화 된 바이트 코드를 파싱하고 glsl 파서와 컴파일러를 구현하는 것이 훨씬 쉬울 것입니다. 개발자는 드라이버 컴파일러에 의존하지 않고보다 일관된 경험을 창출 할 수 있습니다. –

관련 문제