안드로이드 개발 질문/답변
(글 수 45,052)
하고 싶은 말은 많은데 내용이 산으로 갈까봐......
Q1. GLSurfaceView는 3D만을 위한 것인가요? 2D작업을 하면 별개의 GLThread에서 돌아가니
SurfaceView의 canvas그리기 보다 성능이 좋지 않을까요?
Q2. SurfaceView 작업중에 표면타입 설정 getHolder().setType(SURFACE_TYPE_GPU) 를 보았는데 GPU로 작업을 한다는건가요?
canvas작업인데 해당이 없는지 다른환경에서의 타입인지 궁금합니다.
Q3. 몬스터라던가 많은 오브젝트들이 나오는 경우 SurfaceView ~ canvas 작업에서 심한 프레임저하를 느꼇는데 단순 코드최적화를 못해서 그런걸까요... 아니면 canvas작업은 큰 성능을 기대하기 어려운걸까요..?
Q4. 3D환경에서 2D작업을 하고 싶은데 관련 자료나 웹사이트 또는 서적 추천좀 부탁드립니다.




A1. GLSurfaceView는 굳이 3D만을 위한 것은 아닙니다. openGL을 이용해서 보다 Rendering 속도를 빠르게 하는 것이 주 목적이죠
canvas보다는 당연히 성능이 더 좋아질 것입니다.
A2. SurfaceHolder에 대한 공부를 보다 심층적으로 해보시길 바랍니다.
A3. 많은 Object들을 단순히 Canvas로 그리게 되면 많은 메모리를 할당을 하여 프레임이 최적화 되지 않을겁니다. SufaceView는 Canvas가 되는 부분을 FrameBuffer에 그린뒤에 layout으로 표현하게 됩니다. 일반적인 Canvas는 Single Frame Buffer를 사용하기 때문에 작업량이 크지 않기 때문에 openGL을 이용한 SurfaceView는 Double Frame Buffer를 이용하기 때문에 작업량에 대한 보다 효율적인 작업 결과를 내놓게 되는 것입니다.
A4. 그래픽 관련 서적은 그렇게 많지 않은걸로 알고 있습니다. 단순히 안드로이드를 이용한 게임을 만드는 예제가 많이 있는 책을 알아보셔서 구입을 하시는 것이 좋을거 같습니다.
작성자님처럼 궁금한 것이 많은 분들께 추천을 해드리자면
가장 확실한 정보가 있는 developer.android.com에서 해당 API를 찾아서 한번 쭈욱 흝어보시는걸 가장 추천해드립니다.
영어라서 다소 거부감이 있을진 모르겠지만, 자꾸 접해봄으로써 적응해나간다면
정작 그곳에서 많은 정답을 찾을 수 있을겁니다.(parameter, return 값 등을 확인하시면서...)
그것도 부족하다 싶으시면, google.com에서 제공하는 native source를 직접 받으셔서 API DEMO등을 확인하시는 것도 좋은 방법이 될것입니다. 해당 소스들은 주석처리가 잘 되어 있어서 공부하시는데에 있어서도 좋으실 겁니다^^