2012-01-26 18 views
1

私は、(GLKViewを使用して)iOS 5ウェイを動作させるためにテクスチャを取得するのに苦労していますが、旧式のOpenGLES 1.1を使用しています。私は古い2D(スプライト)スタイルのゲームフレームワークを移行しています。 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に頂点データを送信しますが、私はそれが古いコードで動作しますので、それは、[OK]をする必要があり仮定私の古いrenderEngine、呼び出しです。 ここで私は何を欠場するのですか?どんな助けもありがとう。

+0

Wowは、StackOverflowが最初から挨拶を取り除いたことを知らなかった... – fishgen

答えて

0

this oneに似た問題があるようです。すなわち、テクスチャには事前乗算されたアルファがありません。

0

GLKitは1.1ではなくOpenGL ES 2.0の周りに構築されています。 IOSの5.0リリースノートから:

GLKitフレームワーク(GLKit.framework)は のOpenGL ES 2.0アプリケーションを作成するために必要な作業を簡素化するObjective-Cの ベースのユーティリティクラスのセットを含みます。

OpenGL ES 1.1のコンテキストでは使用できません。そのようなコンテキストで使用する場合、GLKitクラスは動作しません。フレームバッファを設定するだけの簡単なものでも、2.0では同じタスクに対して1.1とは異なる名前の関数が使用されます。

OpenGL ES 1.1プロジェクトを作成する場合は、何らかの理由でXcodeで生成されたものとは別のテンプレートで起動し、独自のUIViewをCAEAGLLayerで構築します。

関連する問題