2011-08-23 33 views
20

Tôi cố gắng để tìm hiểu những gì thực sự xảy ra ở chế độ nền khi chúng ta làm điều này (xin xem hình ảnh)Trộn Quartz và OpenGL?

enter image description here

Như bạn có thể thấy trong hình ảnh tôi đã thêm vài nút và đã kiểm tra xem bài viết từ Interface người xây dựng cho cửa sổ.

Bây giờ như chúng ta biết nó sẽ tận dụng hoạt ảnh lõi hoặc nói sẽ tạo ra các lớp. (Vui lòng sửa tôi nếu tôi sai. Vẫn đang nghiên cứu ...)

Tôi muốn biết các nút này được vẽ như thế nào?

Giả định của tôi là khi chúng tôi đánh dấu vào Chế độ xem nội dung, các nút này được rút ra từ CGBitmapContextRef và bitmap được tạo từ nó được chuyển sang Core Animation (OpenGL). Nhưng tôi không thể chứng minh nó cho đến nay. Làm thế nào để chứng minh điều đó? Bất kỳ ví dụ hoặc một số ý tưởng tiếp cận sẽ là tuyệt vời?

Điều tôi chắc chắn là các nút được tạo từ CGBitmapContextRef. Nhưng những gì xảy ra với những hình ảnh nút là không rõ.

Bất kỳ ai có thể giải thích cách tích hợp đó có thể thực hiện được không? Làm thế nào những hình ảnh sẽ có trên màn hình?

Chỉnh sửa:

Để thêm một số thông tin về cùng một chủ đề, vui lòng kiểm tra hình ảnh dưới đây cho các lớp OpenGL. Tôi nghĩ rằng tôi đang nhắm mục tiêu lớp OpenGL Framework phổ biến. enter image description here

+6

Chúng tôi không biết và chúng tôi không * muốn * biết. Sự tích hợp giữa Core Animation và phân cấp khung nhìn là một chi tiết triển khai và có thể thay đổi bất cứ lúc nào nếu Apple nghĩ cách tốt hơn để thực hiện nó. :) –

+0

Nó thực sự không rõ ràng những gì bạn đang yêu cầu ở đây. "Các nút này được vẽ như thế nào?" thực sự mơ hồ. Nếu bạn chỉ muốn biết nó hoạt động như thế nào trong nội bộ, bạn sẽ không tìm ra ở đây, bởi vì đó là nước sốt bí mật của Apple. – benzado

+0

Có, tôi đang tìm một số chi tiết nội bộ. Có thể không phải là tất cả .. nhưng một số cuộc thảo luận tốt đẹp xung quanh khu vực, một số ý tưởng, một số manh mối có thể tiết lộ những bí ẩn. – MacGeek

Trả lời

0

Nút được vẽ trên CGBitmapContextRef.

phép nói rằng, chúng tôi có CGBitmapContextRef phản đối sử dụng tạo

CGContextRef CGBitmapContextCreate (
    void *data, 
    size_t width, 
    size_t height, 
    size_t bitsPerComponent, 
    size_t bytesPerRow, 
    CGColorSpaceRef colorspace, 
    CGBitmapInfo bitmapInfo 
); 

Đây void *data, là một con trỏ đến đích trong bộ nhớ nơi mà các bản vẽ là để được trả lại.

API CGContext sau đó có thể được sử dụng để thực hiện các thao tác khác nhau trên data. Vì vậy, các nút và nền có thể được vẽ trên đó.

Sau khi hoàn tất, chúng tôi có thể giải phóng CGContextRef nhưng dữ liệu vẫn còn trong bộ nhớ có thể được chuyển đến OpenGLContext (CGLContextObj).

Tôi vẫn không biết cách tải lên data đến CGLContextObj. Phải sử dụng một số api riêng.

1

Tôi sẽ bắt đầu bằng cách tạo một vòng lặp chặt chẽ để vẽ lại các nút của bạn mãi mãi. Sau đó, trong khi nó đang chạy, sử dụng hoạt động giám sát để làm một mẫu dấu vết của quá trình của bạn. Bạn sẽ thấy tất cả các đường dẫn mã mà nó dùng để vẽ các nút. Bạn sẽ có thể thấy những gì đang xảy ra từ đó từ tên của các thói quen trong ngăn xếp bản vẽ. Nếu bạn không thể hiểu được nó, hãy đăng các bit có liên quan và ở đây và chúng ta có thể xem xét.