2011-05-02 3 views
0

OpenGL ES 1.1에 심각한 문제가 있으며 수천 번 훑어 봤지만 솔루션을 찾을 수 없습니다. 여기서 비슷한 문제를 발견하지 못했습니다. 너희들이 나를 도울 수 있기를.코드는 코드 예제와 거의 동일하지만 표시되지 않습니다.

71squared.com (이 코드는 here입니다)에서 튜토리얼 2를보고 동일한 페이지에서 코드 예제를 다운로드했습니다. 잘 돌아갑니다.

그런 다음 프로젝트에 적용하기 위해 자체 코드를 작성하려고했습니다. 어쨌든 OpenGL 호출에 관해서는 예제와 같은 코드를 사용하는 것에주의를 기울였습니다.

문제는 다음과 같습니다. 내 텍스처가 표시되지 않지만 glClear()를 호출하면 화면의 색상이 영향을받습니다. 문제는 해당 인스턴스의 모든 iVars가 올바르게 계산되므로 UIView 하위 클래스 (glClear()가 표시됨) 나 텍스처를로드하는 코드로 인해 발생할 수 없습니다. 또한 텍스쳐 좌표와 정점까지도 정상적인 값을 가지며 코드 예제와 동일합니다. 문제는 OpenGL을 사용하여 만든 약간의 실수로 인해 야합니다.

이 내 OpenGL을 모두 호출 할 수 있습니다 :

는 초기화 :

CGRect rect = [[UIScreen mainScreen] bounds]; 

     // Set up OpenGL projection matrix 
     glMatrixMode(GL_PROJECTION); 
     glLoadIdentity(); 
     glOrthof(0, rect.size.width, 0, rect.size.height, -1, 1); 
     glMatrixMode(GL_MODELVIEW); 
     glViewport(0, 0, rect.size.width, rect.size.height); 

     // Initialize OpenGL states 
     glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 
     glDisable(GL_DEPTH_TEST); 
     glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_BLEND_SRC); 
     glEnableClientState(GL_VERTEX_ARRAY); 

를 텍스처 그리기 :

(t는 그래픽을 그리는 방법에 대한 정보를 포함하는 구조체에 대한 포인터입니다.)

glPushMatrix(); 

glEnableClientState(GL_TEXTURE_COORD_ARRAY); 
glEnable(GL_TEXTURE_2D); 

glTranslatef(t->posX, t->posY, 0.0f); 
glRotatef(-(t->rotation), 0.0f, 0.0f, 1.0f); 
glColor4f(t->filter[0], t->filter[1], t->filter[2], t->filter[3]); 

glBindTexture(GL_TEXTURE_2D, _texture.name); 
glEnable(GL_BLEND); 
glVertexPointer(2, GL_FLOAT, 0, vertices); 
glTexCoordPointer(2, GL_FLOAT, 0, _texCoords); 
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); 

glDisable(GL_BLEND); 
glDisable(GL_TEXTURE_2D); 
glDisableClientState(GL_TEXTURE_COORD_ARRAY); 

glPopMatrix(); 

여기가 문제의 원인이라고 생각합니다. 프레임 버퍼를 만드는 코드를보고 싶으면 그 코드를 보여줄 수 있습니다. 그것은 다시 예에서와 거의 같습니다.

나는 전체 코드를 한 번에 1000 번이나 밟았 기 때문에 솔루션을 찾기가 절실히 필요하지만 코드 예제와 다른 부분에서 코드 조각을 찾을 수 없습니다.

미리 감사드립니다. Dominik

답변

0

텍스처 이미지를 생성 할 때마다이 텍스처가이 방법으로 유효한지 확인해야합니다. 이 텍스처가 유효하지 않은 경우 약간의 지연 시간으로 텍스처를 다시 생성해야합니다.

GLboolean glIsTexture(GLuint texture); 
+0

답장을 보내 주셔서 감사합니다. 나는 그것을 몰랐다. 나는 다만 그것을 시험해 보았다. 그리고 이것이 문제를 야기하지 않는 것으로 보인다. 어쨌든 고맙습니다. –

관련 문제