Question

Dans IB, j'ai placé une instance nsopenglview dans la fenêtre.

J'ai tout mon code de dessin dans un NSViewController personnalisé comme ça:

// MyOpenGLViewController.h

@interface MyOpenGLViewController : NSViewController 
{
    IBOutlet NSOpenGLView *glView;  
}

// MyOpenGLViewController.m

-(void)awakeFromNib
{
    [self drawFrame];
}

-(void)drawFrame
{
    [[glView openGLContext] makeCurrentContext];
    glClearColor(0, 0, 0, 1);
}

Tout est lié et "Drawframe" est appelé mais je ne reçois rien à l'écran. C'est toujours blanc. Que dois-je vérifier?

Était-ce utile?

La solution

En règle générale, une sous-classe NSOpenGlView et installe un temporisateur pour mettre à jour votre modèle de données et si quelque chose change, dessinez les modifications. Le contrôleur ne devrait pas faire le dessin. Apple a une bonne documentation sur le fonctionnement de quelque chose. Commencez par le Guide de programmation OpenGL pour Mac OS X.

Il me semble que je me souviens d'un bug avec l'utilisation de l'objet NSpenGlView dans Interface Builder. Ce que je fais toujours, c'est ajouter un nsObject générique où vous voulez la vue et définir sa classe pour être votre sous-classe Nsopenglview.

Autres conseils

Pas sûr du cacao, mais glClearColor() établit juste un état. glClear(GL_COLOR_BUFFER_BIT) effacera en fait le framebuffer.

Un peu en retard pour répondre, mais comme je me demandais la même chose et que je découvais ce fil, je pensais que je devrais le mettre à jour avec des bits manquants: P

Comme quelqu'un d'autre a mentionné GLClearColor () ne définir qu'un attribut, le clair réel doit être effectué avec GLClear (notez qu'en plus du tampon de couleur, il peut également effacer le buffre Z, l'accumulateur et le pochoir).

Enfin vos commandes OpenGL flux besoin d'être réellement rincé. Cela peut être fait avec Glflush (), si vous êtes tamponné unique, ou GLSWAPAPPLE () si vous êtes doublé.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top