본문 바로가기

나의 플랫폼/안드로이드

[ Android Opengl es 2.0 ] 여러 Texture를 사용할 때

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
GLES20을 보면 Texture의 갯수를 30개 까지 설정을 할 수 있는 것 같이..(?) ㅋ 위치 변수가 있다.  

하지만, 제가 경험해 본 일 중에.... 8개 이상의 Texture를 할당할 경우...

// Texture 위치
mObjTexLoc = GLES20.glGetUniformLocation ( mProgramObject, "s_texture" );

// Object Texture 설정
GLES20.glActiveTexture ( GLES20.GL_TEXTURE0 );

GLES20.glBindTexture ( GLES20.GL_TEXTURE_2D, mObjTexId0 );

GLES20.glActiveTexture ( GLES20.GL_TEXTURE1 );

GLES20.glBindTexture ( GLES20.GL_TEXTURE_2D, mObjTexId1 );

GLES20.glActiveTexture ( GLES20.GL_TEXTURE2 );

GLES20.glBindTexture ( GLES20.GL_TEXTURE_2D, mObjTexId2 );

GLES20.glActiveTexture ( GLES20.GL_TEXTURE3 );

GLES20.glBindTexture ( GLES20.GL_TEXTURE_2D, mObjTexId3 );

GLES20.glActiveTexture ( GLES20.GL_TEXTURE4 );

GLES20.glBindTexture ( GLES20.GL_TEXTURE_2D, mObjTexId4 );

....

GLES20.glActiveTexture ( GLES20.GL_TEXTURE8 );

GLES20.glBindTexture ( GLES20.GL_TEXTURE_2D, mObjTexId8 );

// Texture 이미지 셋팅
GLES20.glUniform1i ( mObjTexLoc, 0~8 );


다음과 같이 설정 할 수가 있다.

0번 부터 6번 까지는 아주 ~~ 잘되었다.
하지만.. 7번부터... 인덱스가 엉키는지.. 올바른 Texture 이미지가 나오지 않앗다.

그래서 생각해 본 것이!
6번까지는 무리없이 돌아가니~~~ 반복적으로 이용하자 이다.

Texture를 사용하는 자리에서 Texture를 액티브 시키고 바인딩 시키는 것이다.
Texture의 ID는 가지고 있으니깐.. ㅎㅎ



// Object Texture 설정
GLES20.glActiveTexture ( GLES20.GL_TEXTURE0 );

GLES20.glBindTexture ( GLES20.GL_TEXTURE_2D, mObjTexId0 );

GLES20.glActiveTexture ( GLES20.GL_TEXTURE1 );

GLES20.glBindTexture ( GLES20.GL_TEXTURE_2D, mObjTexId1 );

 ....

// Object Texture 설정
GLES20.glActiveTexture ( GLES20.GL_TEXTURE0 );

GLES20.glBindTexture ( GLES20.GL_TEXTURE_2D, mObjTexId7 );

GLES20.glActiveTexture ( GLES20.GL_TEXTURE1 );

GLES20.glBindTexture ( GLES20.GL_TEXTURE_2D, mObjTexId8 ); 


이렇게 하니 꼬이는 버그가 생긱지 않더군요. ㅎㅎ

이건 어디까지는 저의 경험~ ㅎㅎ

참고하세요~` ㅎ