개발 노트 glProgramBinary / glGetProgramBinary 2018/06/04 10:57 by cagetu

언리얼 관련해서 이야기를 나누다가 언리얼에 Shader Cache라는 기능이 있다고 해서, 언리얼 문서 중에 "꼭 알아두어야 할 언리얼 엔진 4 모바일 기능 A-Z"를 참고하면 된다고 해서 찾아보게 되었다.

내부적으로 셰이더 캐쉬를 사용하면 Compiling / Linking을 피할 수 있다고?? 이게 뭐지??

그래서 내부적으로 확인해봤더니, glGetProgramBinary / glProgramBinary 라는 함수에 비밀이 있었다. 예전에 자체엔진으로 작업해봤을 때에는 이 기능을 사용할 수 없어서 테스트해볼 기회가 없어서 모바일은 바이너리로 컴파일된 셰이더를 가지고 있을 수 없는 것으로 기억하고 있었다. 하지만, 이제는 glCompile -> glLinkProgram까지 한 결과를 glGetProgramBinary로 뽑아서 저장하고 이후부터 glProgramBinary로 가져와서 사용하는 것이 가능한 것이다.

물론, 처음 컴파일은 발생하는데 언리얼 문서에서는 이것도 기기에서 한번 뽑아서 패키지해서 넣어두는 식으로 우회하는 방법도 소개를 했다. 사실 이렇게 되면 기기 드라이버마다 결과가 같다고 보장할 수 있나? 라는 의문이 생기기는 한다. 할 수만 있으면 오프라인에서 컴파일해서 가지고 가면 좋겠지만 그건 어려울 것 같다...

몰랐던 것 하나 알고 간다. 신난다. ㅎㅎㅎ. (벌칸이나 메탈로 다 넘어가면 의미없게지~ 하~)

덧글

  • juhlnet 2018/06/13 09:30 # 답글

    Blueshift 엔진에서도 사용 중인 기능입니다만.. OpenGL 문서 상에는 셰이더 캐시 바이너리 포맷의 표준이 있는게 아니라서 기기마다 다를 수 있었던 걸로 기억하네요. 샤오미 A1 같은 중저가 안드로이드 기기에서는 이걸로 로딩시간 이득을 많이 봤었죠.
  • cagetu 2018/06/13 09:40 #

    오프라인에서 컴파일해서 가져들어갈 수 있는 방법만 있다면 정말 좋을텐데 말이죠. ㅜㅜ. 그래도 이걸로 로딩시간 많이 줄일 수 있는 것으로 기대해요.
댓글 입력 영역



메모장

내가 먼 훗날에 이 글들을 보았을 때, 좋은 추억이 될 수 있기를...

나를 위해... 나에게 쓰는...

msn: cagetu@hotmail.com
mail: cagetu79@gmail.com
twitter: twitter.com/cagetu
facebook: facebook.com/cagetu