2012-08-03 4 views
0

Motorola Atrix에서 라이브 벽지가 제대로 작동하지 않습니다. 그것은 안드로이드 2.3와 주식 ROM이 있습니다. 조각 쉐이더 명령이 투명한 부분이없는 이미지로 작동하지 않습니다. 문제는 안드로이드 2.3, 모토로라 드로 이드 CM9, 아수스 트랜스포머 4.0, 삼성 갤럭시 노트 4.0에 나타나지 않습니다. 문제는 모토로라 Atrix 전화에 매우 특정한 것 같습니다.
우리는 ETC1 압축 텍스처를 사용하므로 별도의 텍스처 샘플러를 통해 알파 채널이 쉐이더로 전달됩니다. sTexture은 주요 확산 텍스처에 사용되고 sAlpha에는 흑백 채널이 있습니다. 그래서이 문제를 해결했습니다ETC1 압축 텍스처가 Motorola Atrix에서 작동하지 않습니다.

private final String mVertexShader = "uniform highp mat4 uMVPMatrix;\n" + 
     "attribute highp vec4 aPosition;\n" + 
     "attribute highp vec2 aTextureCoord;\n" + 
     "varying mediump vec2 vTextureCoord;\n" + 
     "void main() {\n" + 
     " gl_Position = uMVPMatrix * aPosition;\n" + 
     " vTextureCoord = aTextureCoord;\n" + 
     "}\n"; 

private final String mAlphaFragmentShader = "precision mediump float;\n" + 
     "varying mediump vec2 vTextureCoord;\n" + 
     "uniform sampler2D sTexture;\n" + 
     "uniform sampler2D sAlpha;\n" + 
     "void main() {\n" + 
     " vec4 base = texture2D(sTexture, vTextureCoord);\n" + 
     " gl_FragColor = base;\n" + 
     " if(texture2D(sAlpha, vTextureCoord).r < 0.5){ discard; }\n" + 
     "}"; 
+0

'base.a '가 존재하며 0.5 이상입니까? – tolgap

+0

@tolgap 죄송합니다. 쉐이더 코드가 잘못되었습니다 (단일 텍스처의 알파 채널을 사용하는 이전 쉐이더였습니다. ETC1 텍스처에는 알파가 없으므로 2 개의 텍스처를 사용하도록 쉐이더를 수정했습니다). 질문을 편집했습니다. 이제 올바른 꼭지점과 조각 셰이더가 있습니다. – keaukraine

+1

내 개발 장치에 Atrix를 사용하고'discard' 문이 정상적으로 작동합니다. if 블록 안쪽에있는 다른 것을하려고하면 폐기가 아닌가요? (말하자면 버리지 말고 노란색으로 설정하십시오). – Tim

답변

1

OK : 여기

은 조각 및 버텍스 쉐이더 코드입니다. @Tim이 기기에서 테스트 앱을 실행하고 스크린 샷을 제공해 주신 것에 감사드립니다. 내가 수정 한 조각 쉐이더 다음과 같은 방법 :

private final String mAlphaFragmentShader = "precision mediump float;\n" + 
     "varying mediump vec2 vTextureCoord;\n" + 
     "uniform sampler2D sTexture;\n" + 
     "uniform sampler2D sAlpha;\n" + 
     "void main() {\n" + 
     " vec4 base = texture2D(sTexture, vTextureCoord);\n" + 
     " vec4 mask = texture2D(sAlpha, vTextureCoord);\n" + 
     " gl_FragColor = base;\n" + 
     " if(mask.g < 0.5){ discard; }\n" + 
     "}"; 

는 ETC1의 경우 항상 1.0 인 모토로라 ATRIX OpenGL 드라이버가 잘못된 방향 및 샘플 R 채널 같은 채널에서 압축 된 텍스처를 치료하는 것 같다 압축 된 텍스처. 텍스처의 내부 형식이 , ARGB, 대신 RGBA으로 처리됩니다. 내 마스크 텍스처가 흑백이기 때문에 다른 색상을 가져올 수 있습니다. 녹색은 잘 작동합니다.

+0

솔루션을 찾을 수있어서 다행입니다. 문제의 제목을 편집하여 문제를보다 정확히 반영함으로써 같은 문제 (ETC1 텍스처)를 가진 다른 사용자에게 도움이 될 수 있습니다. – Tim

관련 문제