私は現在OpenGL ES for iPhoneを学んでおり、RGBピクセルデータの配列をどのようにしてスクリーンにblitするのかと思っていますが、私が見つけたすべてのチュートリアルでは、既存のイメージをテクスチャとそれを表示します。OpenGL ESを使用してピクセルデータを画面にブライトするにはどうすればよいですか?
ここで私はUIImageとUIImageViewを使用して、その後imagerefを作成することにより、コアグラフィックスを使用してそれを達成してきた方法は次のとおりです。
int screenWidth = (int)[[UIScreen mainScreen] bounds].size.width;
int screenHeight = (int)[[UIScreen mainScreen] bounds].size.height;
//Create blank image
CGImageRef blankImageRef = [self createBlankImageRef];
CFDataRef m_DataRef;
m_DataRef = CGDataProviderCopyData(CGImageGetDataProvider(blankImageRef));
UInt8* bufferData = CFDataGetBytePtr(m_DataRef);
//Manipulate the image here
for(int x=0; x < screenWidth-1; x++)
{
int y = x;//*2;
[self setPixel:bufferData width:screenWidth x:x y:y r:255 g:0 b:0];
}
//Paint the image to the screen
CGImageRef imageRef = blankImageRef;
CGContextRef ctx;
ctx = CGBitmapContextCreate(bufferData,
CGImageGetWidth(imageRef),
CGImageGetHeight(imageRef),
8,
CGImageGetBytesPerRow(imageRef),
CGImageGetColorSpace(imageRef),
kCGImageAlphaPremultipliedLast);
screenImage = [UIImage imageWithCGImage:CGBitmapContextCreateImage (ctx)];
CGContextRelease(ctx);
[imageView setImage:screenImage];
free(bufferData);
...
- (CGImageRef) createBlankImageRef
{
CGFloat imageScale = (CGFloat)1.0;
CGFloat width = [[UIScreen mainScreen] bounds].size.width;
CGFloat height = [[UIScreen mainScreen] bounds].size.height;
// Create a bitmap graphics context of the given size
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef context = CGBitmapContextCreate(NULL, width * imageScale, height * imageScale, 8, 0, colorSpace, kCGImageAlphaPremultipliedLast);
// Draw ...
CGContextSetRGBFillColor(context, (CGFloat)0.0, (CGFloat)0.0, (CGFloat)0.0, (CGFloat)1.0);
// Get your image
CGImageRef cgImage = CGBitmapContextCreateImage(context);
CGColorSpaceRelease(colorSpace);
CGContextRelease(context);
return cgImage;
}
-(void)setPixel:(UInt8*)buffer width:(int)width x:(int)x y:(int)y r:(int)r g:(int)g b:(int)b
{
buffer[x*4 + y*(width*4)] = r;
buffer[x*4 + y*(width*4)+1] = g;
buffer[x*4 + y*(width*4)+2] = b;
buffer[x*4 + y*(width*4)+3] = 255;
}
すべてのアイデアは、私が使用してこれを実現できますかCore Graphicsの代わりにOpenGL ES(現在1.0を使用しています)?
フルスクリーンクワッドを作成し、ピクセルデータをTexture2Dとして取り込み、照明なしで塗りつぶす小さなシェーダを作成します。 – rejj