2011-08-17 7 views
1

私はUIViewをOpenGLテクスチャに繰り返しレンダリングしています。デバイス上ではうまくいきます(期待どおりにテクスチャが更新されます)。シミュレータでは、テクスチャは最初は正しいです(アルファとカラーが正しい)が、その後のテクスチャの更新は、既存のテクスチャを置き換えるのではなく、既存のテクスチャと(既存のテクスチャに '貼り付け'のように)結合しているように見えます。代替の代わりにOpenGL ESテクスチャを組み合わせました(Simulatorではなく、デバイス上で動作します)

一部(おそらく)関連するコンテキスト:

  • 私は2007 MBP(Radeonの上でOSX 10.6.8上のXcode 4.0.2を(4A2002aの構築)実行しているのOpenGL ES 1.1
  • を使用していますX1600ビデオ)
  • プロジェクトは、iOS SDK 4.3を使用して、デプロイメント・ターゲットは、ここでのiOS 4.0

ある質感にビューをレンダリングするコードが(同じコードが最初のレンダリングと後続の更新のために責任がある)であります。

// render UIView to pixel buffer 
GLubyte *pixelBuffer = (GLubyte *)malloc(4 * width * height); 
CGColorSpaceRef colourSpace = CGColorSpaceCreateDeviceRGB(); 
CGContextRef context = CGBitmapContextCreate(pixelBuffer, width, height, 8, 4 * width, colourSpace, kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big); 
CGColorSpaceRelease(colourSpace); 
[view.layer renderInContext:context]; 

// replace OpenGL texture with pixelBuffer data 
glBindTexture(GL_TEXTURE_2D, textureId); 
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST); 
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST); 
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, pixelBuffer); 

当初、私は、しかし、今私は、シミュレータを使用して教育ビデオを作成する必要があり、シミュレータとデバイス間の違いについて心配していませんでした。

私は自分自身、同様の問題に出くわした

答えて

1

(興味深いことに上書きがシミュレータ装置は、それがiPhone(網膜)に設定されているときよりも、iPhoneに設定されている追加のRGBノイズを持っています)。なぜシミュレータとデバイス間の実装に違いがあるのか​​分かりませんが、私が発見したことは、ピクセルバッファがゼロになっていることを確認することでした。ロードしていたテクスチャが完全に透明なピクセルを持っていた場合、シミュレータ上でそれらのピクセルの値を設定するのは面倒ではありませんでした!

したがって、メモリを0に初期化するmallocの代わりにcallocを使用してみてください。つまり、何かのような...

GLubyte *pixelBuffer = (GLubyte *)calloc(4 * width * height, sizeof(GLubyte)); 

...かのmemset ...

GLubyte *pixelBuffer = (GLubyte *)malloc(4 * width * height); 
memset(pixelBuffer, 0, 4 * width * height); 
+0

おかげで、私は条件付きコンパイルディレクティブ(参照ではmemsetを包むことになった(HTTP [SO 865377に答えます]: //stackoverflow.com/questions/864920/conditional-compile-when-running-in-simulator-as-opposed-to-on-a-device/865377#865377))。今それは治療を働かせます。時間制限が上がるとすぐにその賞金を割り当てます –

関連する問題