2012-02-16 6 views
0

iOS에서 OpenGLES에 문제가 있습니다.Objective-C에서 GLenum 속성으로 OpenGL

@property (nonatomic, assign) GLint internalFormat; 
@property (nonatomic, assign) GLenum format; 
@property (nonatomic, assign) GLenum target; 

문제가이 방식으로 작동하지 않는다는 것입니다 :이 같은 선언

if (numberOfMipmaps > 0) { 
    if (textureData != 0) 
     glDeleteTextures(1, &textureData); 
    glPixelStorei(GL_UNPACK_ALIGNMENT, 1); 
    glGenTextures(1, &textureData); 
    glBindTexture(GL_TEXTURE_2D, textureData); 
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 
    CHECK_GL_ERROR(); 

    for (GLint i = 0; i < numberOfMipmaps; i++) { 
     unsigned char *data = mipmaps[i].address; 

     glTexImage2D(GL_TEXTURE_2D, i, internalFormat, width, height, 0, format, target, data); 
     //glGenerateMipmapOES(GL_TEXTURE_2D); 
     CHECK_GL_ERROR(); 

     width = MAX(width >> 1, 1); 
     height = MAX(height >> 1, 1); 
    } 
} 

internalFormat, 형식과 대상이 syntesized되는 속성을 통해 내가로드 텍스처를 렌더링합니다. 컴파일이나 런타임 오류가 발생하지 않습니다. 나는 텍스처 메모리에 아무런 데이터도로드되지 않는다는 표시 인 흰색 화면 만 볼 수 있습니다. 난 내 생성자이 뒤에 아이디어는 RGB565 같은 다른 텍스처 형식을 제공하기 위해 내 클래스에서 상속하는 것입니다

internalFormat = GL_RGBA; 
format = GL_RGBA; 
target = GL_UNSIGNED_SHORT_5_5_5_1; 

에서이 세 가지 변수를 설정합니다. 난 단지 내가 GL 텍스처를 생성하는 방법에 과부하 내가 속성을 사용할 때 작동하지 않는 이유

glTexImage2D(GL_TEXTURE_2D, i, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_SHORT_565, data); 

누군가가 나에게 설명 할 수있는 glTexImage2D 기능을 하드 코딩하는 경우 그것은 작동하는 데 사용됩니다.

편집 : 분명히 밝혀야합니다. 질문은 왜 glTexImage2D 함수에서 매개 변수로 속성을 사용합니까?

EDIT 2 : 내가 문제가 있다고 생각합니다. GL_RGBA와 GL_UNSIGNED ...는 오픈 글 헤더 파일에 정의되어 있으므로, ObjC 프리 컴파일러는 16 진 코드를 glTexImage2D 함수 호출에 붙여 넣습니다. 변수를 사용하면 프리 컴파일러는 아무 것도 변경하지 않고 런타임에 값을 삽입하므로 작동하지 않습니다.

+0

GL_UNSIGNED_SHORT_5_5_5_1 또는 GL_UNSIGNED_SHORT_565를 (를) 타겟으로 사용 하시겠습니까? 속성으로 하나의 값을 사용하기 때문에 glTexImage2D 함수 호출의 예제에서는 다른 값을 사용합니다. –

+0

어디에서 할당 했습니까? 'init' 메소드에서? 서브 클래스에서''슈퍼 인니 ''라고 부르셨습니까? –

+0

@ MārtiņšMožeiko : 글쎄, 둘 다. 나는 메인 클래스에서 상속하고 싶다. 그러나 thats 요점 아닙니다. 로드 및 속성을 사용하면 속성을 사용하지 않는 경우 작동합니다. 나는 메서드를 디버깅하고 속성에 올바른 값이 있는지 두 번 확인했습니다. – nurbs999

답변

0

GLenum 유형은 iOS의 typdef'd unsigned int입니다. 다른 unsigned int처럼 "할당"속성 유형으로 사용할 수 있어야합니다. 실제로 수행중인 것처럼 보이므로 실제 할당/속성 사용에 문제가 있습니다.


그런데 합성 된 ivars는 실제 코드에서 직접 액세스하고 있습니다. 속성을 사용하는 경우 아마 예 : self.format 또는 [self format]이 여기에 엄격하게 필요하지 않을 수도 있습니다.

+0

나는 그랬지만 도움이되지 못했습니다. 그리고 btw, 내 속성이 할당 된 이후로, 나는 '형식 ='또는 'self.format ='어떤 호출을 사용하지 않는 것 같아요 – nurbs999

+0

@ user890270'self.format ='대신'format ='을 사용하면 , 당신은 속성 액세서가 아닌 직접 합성 된 인스턴스 변수를 사용하고 있습니다. 이 구분은 어쨌든 할당되었으므로 여기서는 중요하지 않지만 코드의 명확성을 위해 일관성을 유지하고 접근자를 사용하기 때문에 구분이 달라질 수 있습니다. (이 시점에 대한 답변이 업데이트되었습니다.) –

+0

@ user890270 : 어쨌든, 값을 설정하는 곳에서 전체 메소드를 게시해야합니다. 그 방법 (이니셜 라이저)이 호출되는 것이 확실합니까? 그것을 확인하기 위해 중단 점을 설정 했습니까? 그렇다면 중단 점을 설정하여 값을 확인한 다음 렌더링 할 때 예상 한 결과를 얻었습니까? 근본적인 무언가가 여기서 작동하지 않습니다. –

관련 문제