2011-09-10 2 views
1
여기

은 (옆으로 죄송합니다)를 XoomOpen GL Es 2.0 질감 점, XOOM의 코드 작동, Nexus S에서 깨짐, 어떤 생각?

그리고 무엇 순간에서 Nexus S

내 추측에 보이는 작업의 총에 내가 필요로 뭔가를 가능하게 아니에요이다 nexus에서 활성화 될 수 있지만 xoom에서는 필요하지 않습니다 (또는 tegra OpenGL 드라이버에서 자동으로 활성화 됨). 분명히 TEXTURE_2D 또는 GL_BLEND가 아니라고 말할 수 있습니다. 다른 점이 있을지 모르겠습니다.

또한 관련성이있는 경우 해당 스프라이트에 대해 깊이 테스트를 사용하지 않도록 설정하고 있습니다.

관련 코드는 최선을 다합니다.

버텍스 쉐이더

precision highp float; 
attribute vec4 aPosition; 
uniform mat4 uProjection; 
uniform mat4 uView; 

void main() {         
    gl_Position = uView*aPosition*uProjection; 
    gl_PointSize = 100.0; 
} 

조각 쉐이더

precision mediump float; 
uniform sampler2D sTexture; 
void main() {     
    gl_FragColor = texture2D(sTexture, gl_PointCoord);  
} 

포인트 스프라이트 (분명히 형상이 정결입니다)

mProgram.LoadProgram (
GLES20.glEnable(GLES20.GL_TEXTURE_2D); 
    GLES20.glEnable(GLES20.GL_BLEND); 
    GLES20.glDisable(GLES20.GL_DEPTH_TEST); 
    Matrix.setIdentityM(model, 0); 
    mProgram.LoadProgram(); 
    GLES20.glEnableVertexAttribArray(mProgram.getHandle("aPosition"));  
    GLES20.glVertexAttribPointer(mProgram.getHandle("aPosition"), 3, GLES20.GL_FLOAT, false, 0, mPoints);  
    GLES20.glUniformMatrix4fv(mProgram.getHandle("uView"), 1, false, App.getInstance().currentGameState.mCamera.view, 0);  
    TextureManager.loadTexture(mTexture, 0); 
    GLES20.glDrawArrays(GLES20.GL_POINTS, 0, (int) currentMarkers); 

    Es2Utils.checkGlError("Error With renderMarkers"); 
    GLES20.glEnable(GLES20.GL_DEPTH_TEST); 
    GLES20.glDisable(GLES20.GL_BLEND); 

)가 있습니다에 대한 일상적인 렌더링 내 쉐이더 용 래퍼,이 경우 5 개의 다른 셰이더처럼 사용되지만 실제로는 문제가되지 않습니다. 그것은 또한 이것을한다.

if (programID != 0) { 
     GLES20.glUseProgram(programID); 
    } 
    Es2Utils.checkGlError("1"); 

    if (Es2Utils.checkGlError("GLES20.glUseProgram();") || programID == 0) { 
     CompileProgram(); 
     GLES20.glUseProgram(programID);   
    }  
    Es2Utils.checkGlError("2"); 

    GLES20.glBlendFunc(GLES20.GL_SRC_ALPHA, GLES20.GL_ONE_MINUS_SRC_ALPHA); 
    Es2Utils.checkGlError("3"); 
    GLES20.glUniformMatrix4fv(getHandle("uProjection"), 1, false, Projections.getPerspective(), 0); 
    Es2Utils.checkGlError("4"); 
+0

길이가 길지만 Nexus S 지원 포인트 크기의 스프라이트가 있습니까? 'gl_PointSize'를 ~ 32.0으로 설정하십시오. – arul

+0

20.0으로 설정했지만 여전히 넥서스에 검은 색 상자가 있습니다. 필자는 포인트 스프 라이트가 실제로 일부 장치에서는이 제한 사항을 가지고 있었지만 여전히 2.0에서 적용된다는 점을 기억합니까? 나는 잘 모르겠다. – HaMMeReD

+0

PowerVR SGX 540 (넥서스 S)의 최대 포인트 크기는 512 IIRC입니다. 그러나 요컨데, 포인트 크기가 너무 크면 필자가 보았던 모든 구현은 클램프하고 렌더링을 계속합니다. –

답변

2

분할 두 가지 조건에 문제 최대 : vec4 (0, 0, 0, 1을 반환

가) texture2D 호출된다)

b) .... 조각 쉐이더 어딘가에 ...

쉐이더를 "gl_FragColor = vec4 (1., 0., 0., 1..);"로 변경하면 b를 제외 할 수 있습니다. 또는 뭔가. 이 경우는 적지 만 올바른 장소에서보고 있는지 확인하는 것이 좋습니다.

텍스처가 2의 거듭 제곱입니까? 그렇지 않으면 래핑 모드가 GL_CLAMP_EDGE로 설정되어 있습니까? SGX540에서는 비 PoT 텍스처를 래핑 할 수 없습니다. 또한, 당신은 랩 모드를 보다 먼저 glTexImage2d를 호출해야한다고 생각합니다.

이 화면을 벗어날 때 클립 보드가있는 휴대 전화는 클립 포인트로 끝납니다. 따라서 타겟의 중심이 스크린에서 벗어나면 전체 타겟이 사라집니다. 이런 이유로 나는 큰 점의 사용을 피한다.

+0

그것은 NPOT 텍스처였습니다. 보통 99 %의 것들에 사용했습니다. 이번에는 놓쳤습니다. Xoom은 신경 쓰지 않았지만 Nexus S는 그랬습니다. 감사합니다. – HaMMeReD

+0

감사합니다, 당신은 석방 날에 나를 구 했어요! – jcxavier

관련 문제