GLSurfaceView에 카메라를 설치하고 이를 텍스쳐로 보여주는것 까지 진행했습니다. 쉐이더 코드는
private final String vss = "attribute vec2 vPosition;\n" + "attribute vec2 vTexCoord;\n"
+ "varying vec2 texCoord;\n" + "void main() {\n" + " texCoord = vTexCoord;\n"
+ " gl_Position = vec4 ( vPosition.x, vPosition.y, 0.0, 1.0 );\n" + "}";
private final String fss = "#extension GL_OES_EGL_image_external : require\n" + "precision mediump float;\n"
+ "uniform samplerExternalOES sTexture;\n" + "varying vec2 texCoord;\n" + "void main() {\n"
+ " gl_FragColor = texture2D(sTexture,texCoord);\n" + "}";
다음과같이 설정해두었구요.
네이티브에서 얼굴트래킹하는 코드를구현하여 자바로 x,y좌표로 1프레임에 100개씩 넘겨줍니다.
(x 100개 y 100개)
GL_POINTS를 for문으로 100개 돌려버리면 될것같은데, 쉐이더코드를 어찌 수정해야할지 잘 모르겠습니다.
버텍스쉐이더는 그대로 냅두고 POINT에 색을 입혀야하니까 프래그먼트 쉐이더는 수정해줘야할것같은데
지금 gl_FragColor부분은 texture2D의 값을 받는상황에서 색을입히는 vColor라던지 추가하면
원하는 색도 안나오고 카메라 텍스쳐도 안나옵니다.
onDrawFrame엔
GLES20.glActiveTexture(GLES20.GL_TEXTURE0);
GLES20.glBindTexture(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, hTex[0]);
GLES20.glUniform1i(th, 0);
GLES20.glVertexAttribPointer(ph, 2, GLES20.GL_FLOAT, false, 4 * 2, pVertex);
GLES20.glVertexAttribPointer(tch, 2, GLES20.GL_FLOAT, false, 4 * 2, pTexCoord);
GLES20.glEnableVertexAttribArray(ph);
GLES20.glEnableVertexAttribArray(tch);
GLES20.glDrawArrays(GLES20.GL_TRIANGLE_STRIP, 0, 4);
GLES20.glFlush();
과 같이 해줬는데 GLES20.GL_POINTS를 사용하기위해선 glFlush밑에
GLES20.glVertexAttribPointer(ph, 2, GLES20.GL_FLOAT, false, 2*2, point);
GLES20.glEnableVertexAttribArray(ph);
GLES20.glDrawArrays(GLES20.GL_POINTS, 0, 3);
이런식으로 구현해주는게 맞나요?