2012-03-08 8 views
0

안녕하세요. 이제 OpenGL ES와 쉐이더 사용법을 배우고 있습니다. 응용 프로그램 아이콘 만 화면에 그려야하는 테스트 클래스를 작성했습니다. 지금까지 운이 없다. 누구든지 제가 잘못하고있는 것을 보거나 올바른 방향으로 나를 가리킬 수 있습니까?OpenGL ES 쉐이더가있는 Android 테스트

public class GLTester 
{ 


void test(final Context context) 
{ 
    BitmapFactory.Options options = new BitmapFactory.Options(); 
    options.inScaled = false; 
    bitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.icon, options); 

    setupGLES(); 
    createProgram(); 
    setupTexture(); 
    draw(); 
} 


void draw() 
{ 
    GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT); 
    glUseProgram(glProgramHandle); 

} 
} 

답변

2

몇 가지.

squareVertices 버퍼에는 4 개의 vec3이 포함되어 있다고 가정합니다. 하지만 쉐이더는 vec4s에 맞게 설정되었습니다. 어쩌면 이것은 괜찮은 편이나 나에게는 이상한 것처럼 보입니다.

또한 glFrustum 또는 glOrtho를 사용하여 원근감 매트릭스를 설정하지 않으며 Matrix.setLookAtM과 같은보기 매트릭스를 설정하지 않습니다. 버텍스 파이프 라인을 항상 염두에 두어야합니다. 이 강의에서 슬라이드 2를보세요. https://wiki.engr.illinois.edu/download/attachments/195761441/3-D+Transformational+Geometry.pptx?version=2&modificationDate=1328223370000

저는 여러분의 squareVertices가이 파이프 라인을 통과하여 픽셀 좌표로 나오는 것을 생각합니다. 그래서 여러분의 이미지는 아마도 여러분이 -1.0에서 1.0까지의 버텍스를 사용하고 있기 때문에 스크린 구석에 아주 작은 스펙 일 것입니다.

부끄러워하지 않는 sidenote로서, SourceForge에서 저작물 폴더의 파일에서 쉐이더를로드하고 .java 파일 내부에서 쉐이더를 문자열로 할 필요가없는 SourceForge의 코드를 게시했습니다. https://sourceforge.net/projects/androidopengles/ 이 셰이더 도우미를 사용하는 파일 섹션의 예제 프로젝트를 보여줍니다.

이 산책의 일부가 도움이되기를 바랍니다. :)

+0

우수 답변 – PerracoLabs

0

그것은 꽤 좋아 보인다,하지만 난 쉐이더가 바인드 currenty되지 않은 상태에서 한 가지 당신이 setupTexture 내부 glUniform를 호출하는 것을 알 수있다. glUseProgram을 호출 한 후에 만 ​​glUniform을 호출해야합니다.

이것이 문제인지 알 수 없으므로 아마도 어쨌든 0으로 기본 설정되어있을 것이라고 추측 할 수 있지만 확실하지는 않습니다.

그 외의 경우 glGetError를 호출하여 보류중인 오류 조건이 있는지 확인해야합니다.

셰이더를 만들 때 glGetShader (GL_COMPILE_STATUS)와 함께 성공 상태를 확인하는 것이 좋습니다. 또한 컴파일이 실패하면 glGetShaderInfoLog를 실행하고 glGetProgram/glGetProgramInfoLog가있는 프로그램과 비슷합니다.

+0

나는 당신의 추천을 받아서 각 GLES 호출에 glGetError를 넣었다. GLES20.glEnable (GLES20.GL_TEXTURE_2D)에서 1280 오류가 발생했습니다. 그리고 약간의 연구 후에 나는이 호출이 셰이더와 글래스에는 필요 없다는 것을 알았다. 또한 glUniform을 제거하고 쉐이더와 프로그램 컴파일 상태를 검사하는 코드를 추가했습니다. 그러나 지금까지 행운은 없었습니다. 비트 맵이 화면에 그려지는 것을 볼 수 없습니다. 너무 쉽게 문제를 발견 할 수 있어야하지만, 그것을 발견하기 위해 내 머리카락을 당겨 오전 – PerracoLabs