2013-01-07 20 views
11

Lỗi ứng dụng trong khung hiện tạiFrameBuffer (trong khi chạy ở nền trước, không xảy ra gián đoạn).gpus_ReturnGuiltyForHardwareRestart crash

Nó không bị rơi trong khung hình đầu tiên, nó kéo dài một lúc rồi đột nhiên nó bị treo.

Tôi không có các bước chính xác để tái sản xuất, nhưng dường như có liên quan đến việc vẽ một cái gì đó cụ thể, tôi vẫn không có lỗi OpenGL báo cáo máng ứng dụng, bao gồm một lỗi kiểm tra ngay trước presentFrameBuffer. Nếu tôi thêm glFinish trước khi presentFrameBuffer sẽ sụp đổ trong glFinish.

Ứng dụng đang gặp sự cố với EXC_BAD_ACCESS (mã = 1, địa chỉ = 0x1) và cuộc gọi trên mà không có bất kỳ thông tin lỗi/nhật ký/gỡ lỗi nào khác.

Dưới đây là callstack báo cáo tại các vụ tai nạn:

Chủ đề 1, Queue: com.apple.main sợi

>  #0 0x36871e46 in gpus_ReturnGuiltyForHardwareRestart() 
>  #1 0x36872764 in gpusSubmitDataBuffers() 
>  #2 0x31eae624 in SubmitPacketsIfAny() 
>  #3 0x378a337a in gliPresentViewES() 
>  #4 0x325b6df2 in -[EAGLContext presentRenderbuffer:]() 
>  #5 0x0052986e in EAGLContext_presentRenderbuffer(EAGLContext*, objc_selector*, unsigned int)() 
>  #6 0x000e2a48 in -[EAGLView presentFramebuffer] at /svn/src_svn/GG/iphone/Classes/EAGLView.mm:228 
>  #7 0x000e4066 in -[GGViewController drawFrame] at /svn/src_svn/GG/iphone/Classes/GGViewController.mm:504 
>  #8 0x3809ab0a in __NSFireTimer() 
>  #9 0x39d36856 in __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__() 
>  #10 0x39d36502 in __CFRunLoopDoTimer() 
>  #11 0x39d35176 in __CFRunLoopRun() 
>  #12 0x39ca823c in CFRunLoopRunSpecific() 
>  #13 0x39ca80c8 in CFRunLoopRunInMode() 
>  #14 0x39b9333a in GSEventRunModal() 
>  #15 0x3551b288 in UIApplicationMain() 
>  #16 0x000e1bae in main at /svn/src_svn/GG/iphone/main.m:14 

Bất cứ ai có bất kỳ manh mối về việc này không?

Trả lời

12

Nếu bạn đang sử dụng VAO, điều này có thể gây ra bởi bộ đệm chỉ mục (bộ đệm mảng phần tử) tham chiếu các đỉnh vượt quá giới hạn bộ đệm đỉnh (VBO).

Hãy nhớ rằng bộ đệm mảng phần tử được lưu trữ trong VAO, miễn là VAO bị ràng buộc, mỗi lệnh gọi tới glBindBuffer (GL_ELEMENT_ARRAY_BUFFER) sẽ thay thế bộ đệm chỉ mục. Nếu bạn quên hủy liên kết VAO khi bạn di chuyển đến đối tượng tiếp theo của cảnh, bạn sẽ thay đổi VAO của cuộc gọi trước đó. Thông tin

More qua ở đây: http://www.opengl.org/wiki/Vertex_Specification#Index_buffers

Và một mẹo gỡ rối: Oversize đệm đỉnh của bạn, nó có thể biến vụ tai nạn này vào một trục trặc mà sau đó bạn có thể kiểm tra với công cụ chụp khung OpenGL ES của XCode (điều này đòi hỏi XCode 4.5 và iOS 6).

+1

Mẹo gỡ lỗi tốt. –

1

Có vẻ như vấn đề là do có glEnableClientState (GL_TEXTURE_COORD_ARRAY) cho GL_TEXTURE1 nhưng không cung cấp dữ liệu thực tế trong bộ đệm đỉnh.