2012-05-11 5 views
1

저는 코코아 스크린 세이버, 간단한 OpenGL 장면, 특별한 것은 쓰지 않습니다. 나는 패턴이있는 rgb gif를 많이 가지고 있으며 그 중 하나는 제외하고 훌륭하게 작동합니다. 내가 화면 보호기 미리보기에 표시되는 내용OpenGL에서 색상으로 렌더링 된 그레이 스케일 텍스처

(그것에 텍스처와 하나의 쿼드 렌더링) :

Screensaver preview

텍스처 자체 (따라 조정) :

enter image description here

일부 코드 :

텍스로드 :

NSBitmapImageRep *bitmap = [NSBitmapImageRep imageRepWithData:[texImg TIFFRepresentation]]; 
if(bitmap) { 
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, (GLsizei)[texImg size].width, 
       (GLsizei)[texImg size].height, 0, GL_RGB, GL_UNSIGNED_BYTE, 
       [bitmap bitmapData]) ; 

    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 
} 

GL 초기화 : 그것은 픽셀 팩 문제가 될 수 있었던 것처럼

glEnable(GL_TEXTURE_2D); 
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST); 

답변

2

보인다.

텍스처를 만들기 전에이 라인을 설정해보십시오.

glPixelStorei(GL_UNPACK_ALIGNMENT, 1);

당신이 여기에서 무엇을하는지에 대해 읽을 수 있습니다

http://www.khronos.org/opengles/sdk/docs/man/xhtml/glPixelStorei.xml

http://www.opengl.org/archives/resources/features/KilgardTechniques/oglpitfall/

를 (8 항을 읽기)하지만 기본적으로 기본 OpenGL을하여이 행을 기대 픽셀은 4 바이트의 배수가되어야합니다. 픽셀 당 1/2/3 바이트

텍스처를 만든 후 다시 4 (기본값)로 설정하는 것이 좋습니다.

+0

그건 분명합니다. 많은 많은 감사, 당신은 나의 날을 구했다. 그리고 링크에 대한 감사, 다음에 더 잘 알 것이다 =) – Stormherz

관련 문제