Ich erstelle ein SKScene mit SKVideoNode, dann auf eine Kugelgeometrie anwenden. HierFehler beim Erstellen von IOSurface-Bild (Textur) mit GVRSDK
ist der Schlüsselcode:
// Create a SKScene to play video
NSString* filePath = [[NSBundle mainBundle] pathForResource:@"2222" ofType:@"mp4"];
NSURL* sourceMovieURL = [NSURL fileURLWithPath:filePath];
AVPlayer* player = [AVPlayer playerWithURL:sourceMovieURL];
SKVideoNode* videoNode = [SKVideoNode videoNodeWithAVPlayer:player];
//CGSize size = CGSizeMake(512, 512);
CGSize size = [UIScreen mainScreen].bounds.size;
videoNode.size = size;
videoNode.position = CGPointMake(size.width/2.0, size.height/2.0);
SKScene* spriteScene = [SKScene sceneWithSize:size];
[spriteScene addChild:videoNode];
// create a material with SKScene
SCNMaterial* material = [SCNMaterial material];
material.doubleSided = true;
material.diffuse.contents = spriteScene;
[sphereNode.geometry replaceMaterialAtIndex:0 withMaterial:material];
[videoNode play];
[_scnScene.rootNode addChildNode:sphereNode];
// create SCNRenderer to render the scene
_renderer = [SCNRenderer rendererWithContext:cardboardView.context options:nil];
_renderer.scene = _scnScene;
_renderer.pointOfView = _scnCameraNode;
In der drawEye Funktion:
- (void)cardboardView:(GVRCardboardView *)cardboardView drawEye:(GVREye)eye withHeadTransform:(GVRHeadTransform *)headTransform
{
//CGRect viewport = [headTransform viewportForEye:eye];
// Get the head matrix.
const GLKMatrix4 head_from_start_matrix = [headTransform headPoseInStartSpace];
// Get this eye's matrices.
GLKMatrix4 projection_matrix = [headTransform projectionMatrixForEye:eye near:_scnCamera.zNear far:_scnCamera.zFar];
GLKMatrix4 eye_from_head_matrix = [headTransform eyeFromHeadMatrix:eye];
// Compute the model view projection matrix.
GLKMatrix4 view_projection_matrix = GLKMatrix4Multiply(
projection_matrix, GLKMatrix4Multiply(eye_from_head_matrix, head_from_start_matrix));
// Set the projection matrix to camera
[_scnCamera setProjectionTransform:SCNMatrix4FromGLKMatrix4(view_projection_matrix)];
// Render the scene
[_renderer renderAtTime:0];
}
wenn der Code ausgeführt, es mit
[_renderer renderAtTime:0]
brechen wird und der Ausgang ist:
Failed to create IOSurface image (texture)
Assertion failed: (result), function create_texture_from_IOSurface, file /BuildRoot/Library/Caches/com.apple.xbs/Sources/Jet/Jet-2.6.1/Jet/jet_context_OpenGL.mm, line 570.
Wenn ich den SKVideoNode aus dem SKScene entferne, ist alles in Ordnung.
Irgendwelche Hilfe? Vielen Dank.
Wir haben das gleiche Problem haben, außer es nicht auf allen unseren Geräten auftritt ... oder möglicherweise Versionen von iOS. Welche Geräte und Version (en) von iOS, xcode und Mac laufen Sie? – caseyh
Gerät ist iPhone 6s, ios9.3.2, Mac mini (Ende 2014) OS X EI Caption Version 10.11.5 mit xcode 7.3.1 – guiyuan
So ist unsere Arbeitshypothese, dass auf der 5s und höher mit IOS 9 + gibt es eine Änderung oder Fehler durch das Betriebssystem eingeführt. Wir denken, es ist möglich, dass es mit der Präferenz von iOS auf diesen Geräten zusammenhängt, Metal über OpenGL zu verwenden, aber das ist jetzt mehr Spekulation. Wir werden mehr veröffentlichen, wenn wir mehr finden. – caseyh