앱 메모리 검사를 하면서 쌓이는 ByteBufferAsFloatBuffer, ByteBufferAsShortBuffer 등 때문에 의아해 했었고,
이것들이 OpenGL draw에 필수적인지, 항상 allocation 해주어야 하는지 서치와 실험을 계속했다.
결과적으로 ByteBuffer를 FloatBuffer에 nativeOrder로 간접적으로 할당해주어야 하는 방법은 일반적인데,
이를 한 픽셀을 draw 할 때마다 해 줄 필요는 없는 것이었고, 최초 draw를 시작하는 onSurfaceCreated 에서 한번
수행해주는 것으로 드로잉에 문제가 없음을 확인할 수 있었다.
다만, memory allocation은 한번으로 족하지만 이를 float 배열로 받아 put(values) 하고 position(0)를 해주는 것은
그대로 해 주어야만 한다. 그래픽 draw에 필수적이기 때문이다.
아래는 수정 이전과 이후의 스크린샷인데, 기존에는 약7만회에 달하는 할당과 GC를 반복하면서 메모리가 요동치는 모습을 볼 수 있다.
수정 이후에는 해당 allocation이 사라지면서 메모리가 그만큼 기하급수적으로 alloc 되는 일도 없어졌고, GC의 빈도도 이전보다 줄어들거나 부담이 적어진 것으로
보여진다.
추가로 검사하고 조심해야 할 건 수정 이후의 장기적인 테스트와 아직 여전히 존재하는 메모리 alloc과 GC가 어떤 영향으로 인해 발생하는지
확인하고 수정해나가야만 한다는 것이다.
그동안 멀리까지 잘 왔다!
'GRAPHICS > OpenGL ES' 카테고리의 다른 글
[OPENGL ES] OpenGL ES 1.0, Batchinig으로 프레임 속도 압도적으로 개선하기 (0) | 2018.07.18 |
---|---|
[OPENGL ES] 안드로이드에서 SurfaceView의 배경 투명하게 Draw하기 (0) | 2018.06.18 |
[OPENGL ES] 안드로이드 액티비티 이동간 출력해 준 그래픽 유지하기 (0) | 2018.02.14 |
[OPENGL] 특정 변수값에 따른 HSV 형식 색 표현을 RGB를 이용해 해보기 (0) | 2018.01.30 |
[OPENGL ES] 모델간 겹치는 상황에서 색이 깨지지 않게 하기 (0) | 2018.01.22 |