2009-11-20 2 views
1

J'ai fait un nouveau projet et à peu près recopié this guide, mais chaque fois que j'appelle une fonction OpenGL en fait l'endroit marqué // Drawing code here il se bloque. J'ai ce là:application Cocoa écraser sur appel OpenGL

glViewport(0, 0, [self bounds].size.width, [self bounds].size.height); 
glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 
gluOrtho2D(0, [self bounds].size.width, [self bounds].size.height, 0); 
glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 
glTranslatef(0.375, 0.375, 0.0); 

glClearColor(1, 1, 1, 1); 
glClear(GL_COLOR_BUFFER_BIT); 

glColor3f(0, 0, 0); 

glBegin(GL_LINES); 
glVertex2f(10, 10); 
glVertex2f(300, 300); 
glEnd(); 

glFlush(); 

Mais appeler une fonction OpenGL se bloque il, les rapports GDB: Program received signal: "EXC_BAD_ACCESS". Tout d'abord, si elle a fait le travail, est que le bon code? Faire tout ça au sommet chaque fois qu'on l'appelle? Son supposé être pour 2d, avec l'origine en haut à gauche. Et pourquoi est-ce que ça plante? J'ai CoreVideo et OpenGL liés et importés ... Je veux obtenir une application Cocoa mis en place pour utiliser OpenGL afin que je puisse me concentrer sur le code du jeu.

Merci.

+0

Je ne vois pas l'endroit marqué "Code de dessin ici". –

+0

En outre, vous pouvez utiliser le débogueur (ou le journal de plantage, lorsque vous n'exécutez pas votre application dans Xcode) pour trouver l'appel de fonction exact qui provoque le plantage. –

+0

@Peter Hosey: Oh, c'était en fait '// Ajoutez vos codes de dessin ici'. Et j'ai utilisé le débogueur, il se bloque sur n'importe quel appel de fonction OpenGL. Mais si je le fais en utilisant -drawRect (ne pas utiliser CVDisplayLink), cela fonctionne. hmm ... – mk12

Répondre

1

L'article que vous avez lié n'est pas vraiment un projet complet - c'est juste une discussion et un exemple d'utilisation de CVDisplayLink pour piloter la boucle de dessin. Vous ferez probablement mieux en commençant par Apple OpenGL Programming Guide.

-1

Vous pouvez essayer de remplacer '[self bounds] .size.width' par des nombres codés en dur pour voir si cela fait partie du problème.

+0

Pas de différence, ça plante encore. – mk12

+0

J'ai fait un développement OpenGL limité sur Mac, et cela fonctionne. Cependant, j'utilise directement le C/C++ et évite autant que possible toutes les choses de l'interface utilisateur Objective-C et Mac OS/X. Je ne construis même pas avec l'IDE XCode, je fais juste des builds de ligne de commande génériques, en ne spécifiant que les arguments '-framework AGL' et '-framework Carbon' pour l'éditeur de liens. J'utilise SDL pour faire toutes les initialisations de fenêtre et d'OpenGL et c'est une bonne solution KISS multiplateforme. Je ne sais pas si cela pourrait fonctionner mieux pour vous, vous pouvez l'essayer. –

+0

Comment pourrais-je faire cela, sauf avec Cocoa au lieu de carbone? Le carbone n'est-il pas déprécié (et pas de 64 bits)? – mk12

0

Découvrez MyOpenGLView.m dans Apple's sample code for GLFullScreen. Ils utilisent CVDisplayLink avec succès. La chose manquante dans "Piloter les boucles de rendu OpenGL" est le fait que vous devez ajouter un mutex pour éviter que deux threads accèdent au même contexte opengl.

Questions connexes