Aplicação de cacau falhando na chamada OpenGL
-
21-09-2019 - |
Pergunta
Fiz um novo projeto e praticamente copiado este guia, mas sempre que eu chamo de qualquer função do OpenGL, o ponto marcado // Drawing code here
ele trava. Eu tenho isso lá:
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();
Mas apenas chamar uma função OpenGL trava, relatando GDB: Program received signal: "EXC_BAD_ACCESS".
Primeiro de tudo, se funcionou, esse código é bom? Fazendo tudo isso no topo toda vez que é chamado? É para ser 2D, com origem na capa superior. E por que está travando? Eu tenho CoreVideo e OpenGL vinculados e importados ... quero configurar um aplicativo de cacau para usar o OpenGL para que eu possa me concentrar no código do jogo.
Obrigado.
Solução
O artigo que você vinculou não é realmente um projeto completo - é apenas uma discussão e amostra do uso do CVDISPLAYLINK para acionar o loop de desenho. Você provavelmente se sairá melhor começando com a Apple's Guia de programação OpenGL.
Outras dicas
Confira myopenglview.m em Código de amostra da Apple para GlfullScreen. Eles usam o CVDisplayLink com sucesso. A coisa que falta no "Driving OpenGL Rendering Loops" é o fato de você precisar adicionar um mutex para evitar dois threads acessando o mesmo contexto OpenGL.
Você pode tentar substituir '[Louse auto] .Size.Width' por números codificados para ver se isso faz parte do problema.