2012-01-26 180 views
1

我在使用iOS 5的方式(使用GLKView),但使用老式的OpenGLES 1.1時遇到了問題。我正在遷移一箇舊的2D(精靈)風格的遊戲框架。我在Xcode中使用了OpenGL遊戲的庫存示例,並使用kEAGLRenderingAPIOpenGLES1對其進行了修改以初始化EAGLContext。我也沒有嘗試使用GLKTextureLoader GLOBaseEffect,因爲我有我的舊紋理加載器算法(以及基礎特效與着色器一起使用)。這是我目前的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_MODULATE而不是GL_APLHA,那麼沒有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); 

,其餘基本上是我的老renderEngine,然後頂點數據發送到OpenGL的一個電話,但我想這應該是確定的,因爲它工作在舊代碼。 那麼我在這裏錯過什麼?任何幫助,將不勝感激。

+0

哇,不知道StackOverflow從一開始就去除了問候...... – fishgen

回答

0

聽起來像你有類似於this one的問題,那就是:你的紋理沒有預乘alpha。

0

GLKit是圍繞OpenGL ES 2.0構建的,而不是1.1。從IOS 5.0版本說明:

的GLKit框架(GLKit.framework)包含一組目標C 基於工具類,簡化創建 OpenGL ES 2.0的應用程序所需的努力。

它不打算與OpenGL ES 1.1上下文一起使用,並且GLKit類在此類上下文中使用時不應起作用。即使像設置幀緩衝這樣簡單的事情,2.0對於相同的任務使用不同於1.1的命名函數。

如果您打算創建一個OpenGL ES 1.1項目,無論出於何種原因,首先使用與Xcode生成的模板不同的模板,然後構建自己的由CAEAGLLayer支持的UIView。