2009-11-20 57 views
1

我做了一個新項目並且複製了this guide,但是每當我調用任何OpenGL函數時,它就會標記爲// Drawing code here的地方崩潰。我有這樣的有:可可應用程序在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(); 

但僅僅調用一個函數的OpenGL崩潰了,報告GDB: Program received signal: "EXC_BAD_ACCESS".首先,如果沒有工作,是代碼好?每次被叫時都會在頂端做所有的事情?它應該是2d的,起源於左上角。爲什麼它會崩潰?我有CoreVideo和OpenGL鏈接和導入...我想要設置一個Cocoa應用程序來使用OpenGL,這樣我就可以專注於遊戲代碼。

謝謝。

+0

我沒有看到標有「此處繪製代碼」的位置。 – 2009-11-21 02:19:23

+0

另外,您可以使用調試器(或在Xcode中不運行應用程序時的崩潰日誌)來查找導致崩潰的確切函數調用。 – 2009-11-21 02:20:04

+0

@Peter Hosey:哦,它實際上是//在這裏添加你的繪圖代碼。我確實使用過調試器,它在任何OpenGL函數調用中崩潰。但是,如果我使用-drawRect(不使用CVDisplayLink),它就可以工作。嗯... – mk12 2009-11-21 02:36:01

回答

1

您鏈接的文章並不是一個完整的項目 - 它只是使用CVDisplayLink來驅動繪圖循環的討論和示例。你可能會更好地開始與蘋果的OpenGL Programming Guide.

-1

您可以嘗試用硬編碼數字替換'[self bounds] .size.width',看看這是否是問題的一部分。

+0

沒有區別,它仍然崩潰。 – mk12 2009-12-15 01:17:32

+0

我在Mac上完成了有限的OpenGL開發,並且工作正常。但是,我使用直接的C/C++,儘可能避免使用Objective-C和Mac OS/X GUI的所有東西。我甚至沒有用XCode IDE構建,只做通用的命令行構建,僅爲鏈接器指定'-framework AGL'和'-framework Carbon'參數。我使用SDL來完成所有的窗口和OpenGL初始化,這是一個很好的跨平臺KISS解決方案。不知道這是否會對你更好,你可以試試。 – 2009-12-15 17:56:34

+0

除了用可可代替碳之外,我該怎麼做? Carbon是否會被棄用(而且不是64位)? – mk12 2010-01-01 22:22:18

0

檢查出MyOpenGLView.m在Apple's sample code for GLFullScreen。他們成功使用CVDisplayLink。 「驅動OpenGL渲染循環」中缺少的事情是,您需要添加一個互斥體以避免兩個線程訪問相同的opengl上下文。

相關問題