2012-01-26 2 views
1

iOS 5 방식 (GLKView 사용)을 사용하지만 구식 OpenGLES 1.1을 사용하여 텍스처를 얻는 데 문제가 있습니다. 나는 오래된 2D (sprites) 스타일의 게임 프레임 워크를 이전하려고합니다. Xcode에서 OpenGL 게임의 예제를 가져 와서 kEAGLRenderingAPIOpenGLES1로 EAGLContext를 초기화하도록 수정했습니다. 또한 이전의 텍스처 로더 알고리즘 (및 기본 효과는 셰이더에서 작동 함)을 사용하므로 GLKTextureLoader & GLKBaseEffect를 사용하려고하지 않습니다. 이것은 내가의 ViewController에 현재 가지고있는 것입니다 : GLKView와 OpenGLES 1.1의 텍스처?

- (void)viewDidLoad { 
[super viewDidLoad]; 

[self setContext : [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES1]]; 
[EAGLContext setCurrentContext: [self context]]; 

GLKView *view = (GLKView *)self.view; 
[view setContext: [self context]]; 
[view setDrawableDepthFormat: GLKViewDrawableDepthFormatNone]; 
[view setDrawableColorFormat: GLKViewDrawableColorFormatRGBA8888]; 
[view setMultipleTouchEnabled: NO]; 
[self setupGL]; 
} 

그리고 setupGL에서

:

glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 
glOrthof(0, backingWidth, 0, backingHeight, -1, 1); 
glViewport(0, 0, backingWidth, backingHeight);  
glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 
//landscape mode 
glTranslatef(backingWidth/2, backingHeight/2, 0); 
glRotatef(90, 0, 0, 1); 
glTranslatef(-backingHeight/2, -backingWidth/2, 0); 

glDisable(GL_DEPTH_TEST); 

glEnable(GL_BLEND); 
glEnable(GL_TEXTURE_2D);  
glEnableClientState(GL_VERTEX_ARRAY);  
glEnableClientState(GL_TEXTURE_COORD_ARRAY); 
glEnableClientState(GL_COLOR_ARRAY); 

glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 

glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_ALPHA); 

문제는 제가 위에서 마지막 줄의 OpenGL에서 0x0500 오류가있어, 여기에서 시작하십시오. 차이점은 무엇인지 알아낼 수 없습니다. 이전 코드에서 정상적으로 작동하기 때문입니다 (또는 적어도 문제가 아니라면 문제의 원인이 아님). GL_APLHA 대신 GL_MODULATE를 사용하면 GL 오류는 없지만 텍스처는 여전히 작동하지 않습니다. 이것은 내가 그들을로드하는 방법입니다

glGenTextures(1, &textures[textureNum]); 
glBindTexture(GL_TEXTURE_2D, textures[textureNum]); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, data); 

나머지는 기본적으로 다음의 OpenGL에 정점 데이터를 전송 내 오랜 renderEngine의 호출이지만 이전 코드에서 작동하기 때문에 나는 그 확인을해야 가정합니다. 그래서 내가 여기서 무엇을 그리워합니까? 어떤 도움을 주시면 감사하겠습니다.

+0

와우, StackOverflow가 인사말을 처음부터 제거한다는 것을 알지 못했습니다 ... – fishgen

답변

0

this one과 비슷한 문제가있는 것 같습니다. 텍스처에 미리 곱셈 된 알파가 없습니다.

0

GLKit은 1.1이 아닌 OpenGL ES 2.0을 기반으로 만들어졌습니다. 아이폰 OS 5.0 릴리스 노트에서 :

GLKit 프레임 워크 (GLKit.framework)는 는 OpenGL ES 2.0 응용 프로그램을 만드는 데 필요한 노력을 단순화 목표 - C 기반 유틸리티 클래스 세트가 포함되어 있습니다.

OpenGL ES 1.1 컨텍스트와 함께 사용하도록되어 있지 않으며 이러한 상황에서 GLKit 클래스를 사용하면 안됩니다. framebuffer를 설정하는 것만 큼 간단 하긴하지만, 2.0은 동일한 작업을 위해 1.1과 다르게 이름이 지정된 함수를 사용합니다.

OpenGL ES 1.1 프로젝트를 만들려는 이유가 무엇이든간에 Xcode에서 생성 된 것과 다른 템플릿으로 시작하고 CAEAGLLayer로 백업 된 고유 한 UIView를 빌드하십시오.