2012-04-09 18 views
-1

Ich habe this guide gefolgt.OpenGLView kann nicht angezeigt werden

Während ich aufrichtig versäumt zu verstehen, was es in Punkt 13 sagt, habe ich nur den Bereich des Inspektors geöffnet, aber es sagt nicht, welche Attribute zu setzen. Allerdings habe ich den Code in die richtigen Klassen kopiert und eingefügt. Aber es erscheint ein normales Fenster, ohne die Dreieckszeichnung, genauso wie wenn ich ein normales Programm in Objective-C mit einem leeren Fenster mache.

Edit:

Ich dachte, dass das Problem der Initialisierung des Fensters war, so habe ich eine awakeFromNib Methode geschrieben, um die drawRect Methode Anfang zu machen:

- (void) awakeFromNib 
{ 
    NSRect rect=NSMakeRect(100.0, 100.0, 100.0, 100.0); 
    [self drawRect: rect]; 
} 

Aber bei der ersten Anweisung von drawRect Ich erhalte eine EXC_BAD_ACCESS-Ausnahme

Vielleicht ist das Fenster nicht richtig initialisiert?

+1

Was haben Sie Probleme mit? Im obigen Beitrag sehe ich keine Frage. Was haben Sie in Schritt 13 nicht verstanden? – user1118321

+0

Das Problem ist, dass das Fenster nicht das Dreieck enthält, ist ein leeres Fenster, ich werde den Screenshot später veröffentlichen.An Punkt 13 sagt: "Wenn Sie zusätzliche Attribute benötigen, müssen Sie sie programmgesteuert einstellen.". Nun, ich habe nicht verstanden, wie man Attribute setzt. –

+0

Schritt 13 ist nicht kritisch. Es wird lediglich vorgeschlagen, dass Sie sich mit den Renderer- und Pufferattributen vertraut machen, die über IB festgelegt werden können. Es gibt nichts, was Sie bei diesem Schritt tun müssen. Warum nichts rendern wird, schätze ich nur die Schritte und stelle sicher, dass du alles richtig gemacht hast. Hmm, ich kann das jetzt nicht überprüfen, aber ich frage mich, ob IB NSOpenGLView-Instanzen standardmäßig das Core 3.2-Profil verwendet. Für diesen Beispielcode möchten Sie das Legacy-Profil. –

Antwort

1

Wahrscheinlich segzufällig, weil OpenGL versucht, einen Zustand im aktuellen Kontext zu ändern, während kein aktueller Kontext vorhanden ist (weil Sie -drawRect: gesendet haben, ohne zuerst den aktuellen Kontext festzulegen).

Sie sollten niemals selbst -drawRect: senden. Verwenden Sie stattdessen -setNeedsDisplay und lassen Cocoa den aktuellen Kontext gesetzt und senden -drawRect: für Sie:

- (void)awakeFromNib { 
    self.needsDisplay = YES; 
}