마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안드로이드 opengl glsurfaceview

0 추천

진행중인 사항중
다수의 유저가 영상통화를 진행 하는 기능이있습니다.
현재 말하는 유저가 스크린 전체 크기의 subscriber가 되고 카메라 스트림이 보여집니다.
나머지 유저들은 화면 하단의 작은 사각형 GLSurfaceview로 보여지죠.

 

 

 

            유저 a 카메라 스트림(전체화면)

 

 

 

유저b유저c유저d

(상단 박스는 유저 b, c, d의 카메라 스트림 3개)

 

이런식의 구성입니다.

그런데 a,b,c,d 유저의 카메라 스트림 모두 GLSurfaceview로 보여주고,
b, c, d 유저의 GLSurfaceview가 a유저의 GLSurfaceview를 ovalay하면서 문제가 생깁니다.

b, c, d유저의 GLSurfaceview에 각각 이름을 넣으려고 textview를 add 했지만 보여지지 않습니다. 이유는 surfaceview의 특성때문이죠. window에 구멍을 뚫고 surface의 내용을 보여주는 특성때문에 widget이 무시됩니다.

이를 해결하기 위해서 함수를 제공하는데요, setZOrderMediaOverlay(boolean) 함수입니다.

GLSurfaceView.setZOrderMediaOverlay(true); 일 경우 surfaceview위에 widget을 올릴 수 있죠.

하지만 현재 문제는 GLSurfaceview위에 GLSurfaceview가 있고, 이 위에 있는 GLSurfaceview위에 Textview를 얹으려고 할 때 a, b, c, d에 모두 setZOrderMediaOverlay(true)함수를 호출하더라도 보여지지 않습니다.

 

이를 해결하기 위해 결국 GLSurfaceview.Render를 imprementation합니다. 

하지만 OpenGL지식이 없으니 힘드네요.

b하나의 GLSurfaceview의 Render를 구현했는데 카메라 스트림은 보이지만 text가 보이질 않는 상황입니다.

미리 set해놓은 bitmap 객체를 rendering하는 부분인데 이걸로는 rendering이 되질 않네요

GLES20.glActiveTexture(GLES20.GL_TEXTURE3);
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, mTextureIds[3]);
GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, bitmap, 0);

 

도움이 될 만한 내용 부탁드립니다!

백마귀족 (1,550 포인트) 님이 2018년 8월 21일 질문

1개의 답변

–1 추천
SurfaceView 위에 OnDraw로 그림 그리는 방법

출처 : http://yeolco.tistory.com/27

 

그외에 단순히 TextView 출력하고 싶으시면

RelativeLayout 사용하시면 잘나옵니다.
열코 (890 포인트) 님이 2018년 8월 27일 답변
onDraw() 메소드를 implementation 하여 그리는 것이 핵심이 아닙니다.
질문에 있는 상황에서 GLES로 Bitmap을 그리는 것이 핵심입니다.
SurfaceView에 비트맵으로 텍스트를 렌더링 하고싶다는 말씀인가요?
네. 현재 Bitmap을 렌더링하는 방법이 아니면 텍스트를 그려줄 수 없는 상황입니다.
SurfaceView들이 겹쳐져 있어서 setZOrderOnTop()를 사용할 수 밖에 없는 상황이에요.
Canvas로 비트맵 렌더링 해서 넘겨주는 방식도 해보셨나요?
질문에도 올렸 듯 Bitmap을 렌더링합니다. 그런데 보여지지 않아서 문제인 상황이구요.
제가 openGL 텍스트 그릴때 참고했던 자료입니다
https://code.i-harness.com/ko-kr/q/146f00
그외엔 도움 드릴게없네요 ㅜ
도움되셨으면합니다
이미 보았던 글이네요 아무튼 감사합니다!
...