본문 바로가기

openGL ES

(3)
[OPENGL ES] OpenGL ES 1.0, Batchinig으로 프레임 속도 압도적으로 개선하기 그동안 안드로이드에서 OpenGL ES 1.0 기반의 그래픽을 최적화하고, 프레임 속도를 개선하기 위해 참 다양한 작업들을 적용해 왔는데, 이번에 가장 월등한 해결책을 찾을 수 있었다. 여기까지 오기 위해 다양한 자료들을 참조하던 중에 통상적으로 쓰이는 그래픽 기술로 크게 Batching과 Culling이 있었다. (참조 : http://egloos.zum.com/littles/v/3440645 ) Batching은 쉽게 말해 픽셀을 모아찍는 것이고 Culling은 필요한 부분만을 드로잉하는 것이다. Culling의 경우에는 개념으로 따졌을때나 실질적으로 활용할때나 사용하던 기술로 어느정도 한계점에 다다른 상황이었고 Batching의 경우에는 아직 사용하지 못한 영역이었다. 주안점은 이것이다. Draw ..
[OPENGL ES] 안드로이드에서 SurfaceView의 배경 투명하게 Draw하기 안드로이드 앱에서 사용하는 OpenGL ES 뷰인 SurfaceView의 배경을 투명하게 하고자 시행착오를 좀 겪었는데 최종적으로 얻은 결과는 결과적으로 뷰의 배경은 투명하게 할 수 있었으나, SurfaceView가 무조건 레이아웃의 최상단을 차지하게 된다는 점이다. 구현방법은 우선 SurfaceView 클래스를 참조하는 부분에서setZOrderOnTop(true); setEGLConfigChooser(8,8,8,8,16,0); getHolder().setFormat(PixelFormat.RGBA_8888); getHolder().setFormat(PixelFormat.TRANSLUCENT);네가지 요소를 추가한다. PixelFormat.TRANSLUCENT의 경우에는 추가해주지 않아도 투명한 배경을 만..
[OPENGL ES] FloatBuffer allocation 관리를 통한 그래픽 최적화 앱 메모리 검사를 하면서 쌓이는 ByteBufferAsFloatBuffer, ByteBufferAsShortBuffer 등 때문에 의아해 했었고, 이것들이 OpenGL draw에 필수적인지, 항상 allocation 해주어야 하는지 서치와 실험을 계속했다. 결과적으로 ByteBuffer를 FloatBuffer에 nativeOrder로 간접적으로 할당해주어야 하는 방법은 일반적인데, 이를 한 픽셀을 draw 할 때마다 해 줄 필요는 없는 것이었고, 최초 draw를 시작하는 onSurfaceCreated 에서 한번 수행해주는 것으로 드로잉에 문제가 없음을 확인할 수 있었다. 다만, memory allocation은 한번으로 족하지만 이를 float 배열로 받아 put(values) 하고 position(0)..