2011-10-20 5 views
6

Khi thay đổi kích thước GLKView, có một số hoạt động hậu trường diễn ra trên vùng đệm và ngữ cảnh của GLKView. Trong thời gian cần thiết để thực hiện các hoạt động hậu trường này, vẽ đến GLKView không tạo ra kết quả chính xác.Thay đổi kích thước GLKView

Trong kịch bản của tôi, tôi có một GLKViewsetNeedsDisplay kích hoạt, do đó bất cứ lúc nào tôi cần phải cập nhật nội dung của nó trên màn hình, tôi chỉ cần gọi -setNeedsDisplay vào đó GLKView. Tôi đang sử dụng GLKView để vẽ hình ảnh, vì vậy nếu tôi cần vẽ hình ảnh có kích thước khác, tôi cũng cần phải thay đổi kích thước của GLKView.

Sự cố: Khi tôi thay đổi kích thước của GLKView và gọi setNeedsDisplay trên chế độ xem đó, kết quả trên màn hình không chính xác. Điều này là do GLKView không được thực hiện hoàn thành các hoạt động hậu trường được gọi bởi thay đổi kích thước mới trước khi nó cố gắng vẽ hình ảnh mới.

Tôi đã tìm được cách giải quyết vấn đề này bằng cách gọi: performSelector:@selector(setNeedsDisplay) withObject:nil afterDelay:0 thay vì chỉ setNeedsDisplay trên số GLKView. Điều này về cơ bản buộc các chủ đề chính phải chờ đợi cho tất cả các hoạt động openGL hậu trường được hoàn thành trước khi gọi setNeedsDisplay. Mặc dù điều này hoạt động ok, tôi tự hỏi nếu có một giải pháp tốt hơn. Ví dụ, có một cuộc gọi OpenGL để làm cho các chủ đề chờ đợi cho tất cả các hoạt động openGL được hoàn thành trước khi tiếp tục?

Trả lời

9

Giải pháp là đặt lại đối tượng CIContext sau khi GLKView đã được thay đổi kích thước.
Cảm ơn vì không có gì, tất cả mọi người!

+2

Tôi có thể ôm bạn – dxb

+0

Bạn đã đặt lại thiết bị như thế nào? Tái tạo nó từ đầu? Hoặc là có một phương pháp cụ thể để gọi. – flainez

+1

Trong trường hợp của tôi, sau khi thay đổi kích thước, tôi đã thiết lập đối tượng 'CIContext' như sau:' ci_context = [CIContext contextWithEAGLContext: glkView.context] 'và sau đó gọi' [glkView display] '. Lưu ý rằng điều này đã được một thời gian dài trước đây và tôi đã không theo đuổi việc học về điều này, do đó, không giả sử đó là cách tiếp cận đúng. – spybart