Ja, Sie können Ihren Core Graphics-Inhalt in einen Bitmap-Kontext rendern und diesen in eine Textur hochladen. Hier finden Sie Code, den ich verwende, um eine UIImage zu einem Core Graphics Kontext zu ziehen, aber man kann den CGContextDrawImage()
Teil mit Ihrem eigenen Zeichencode ersetzen:
GLubyte *imageData = (GLubyte *) calloc(1, (int)pixelSizeOfImage.width * (int)pixelSizeOfImage.height * 4);
CGColorSpaceRef genericRGBColorspace = CGColorSpaceCreateDeviceRGB();
CGContextRef imageContext = CGBitmapContextCreate(imageData, (int)pixelSizeOfImage.width, (int)pixelSizeOfImage.height, 8, (int)pixelSizeOfImage.width * 4, genericRGBColorspace, kCGBitmapByteOrder32Little | kCGImageAlphaPremultipliedFirst);
CGContextDrawImage(imageContext, CGRectMake(0.0, 0.0, pixelSizeOfImage.width, pixelSizeOfImage.height), [newImageSource CGImage]);
CGContextRelease(imageContext);
CGColorSpaceRelease(genericRGBColorspace);
glBindTexture(GL_TEXTURE_2D, outputTexture);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, (int)pixelSizeOfImage.width, (int)pixelSizeOfImage.height, 0, GL_BGRA, GL_UNSIGNED_BYTE, imageData);
Dies setzt voraus, dass Sie Ihre Textur mit Code erstellt haben wie die folgende:
glActiveTexture(GL_TEXTURE0);
glGenTextures(1, &outputTexture);
glBindTexture(GL_TEXTURE_2D, outputTexture);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
// This is necessary for non-power-of-two textures
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glBindTexture(GL_TEXTURE_2D, 0);
für schnell wechselnden Inhalten, möchten Sie vielleicht in Textur-Caches iOS 5.0 ist zu sehen (CVOpenGLESTextureCacheCreateTextureFromImage()
und dergleichen), die Sie direkt für Ihre Textur auf die Bytes machen könnte lassen. Ich habe jedoch festgestellt, dass der Overhead für das Erstellen und Rendern einer Textur mit einem Textur-Cache das Rendering eines einzelnen Bildes etwas verlangsamt. Wenn Sie also nicht ständig aktualisieren müssen, ist der obige Code wahrscheinlich Ihre schnellste Route.