Lớp phủ là một chức năng phần cứng của thẻ video giúp bạn có thể phủ một hình ảnh lên màn hình chính (bề mặt chính) mà không cần sao chép bộ nhớ video. Lớp phủ được thực hiện trong bộ chuyển đổi kỹ thuật số sang tương tự thẻ video (RAMDAC) trong quá trình tạo tín hiệu video gửi đến màn hình. RAMDAC quét các bề mặt chính theo từng dòng trong quá trình này và chuyển sang hình ảnh lớp phủ khi nó xuất hiện.
Cần thiết
Tập hợp các hiệu ứng đặc biệt từ các thư viện
Hướng dẫn
Bước 1
Để kích hoạt Overlay, cần cân nhắc viết chương trình hiển thị một số hiệu ứng đặc biệt trên bề mặt màn hình nền, hoặc ở những nơi có màu sắc tùy ý (nếu ta coi chế độ vẽ trên màn hình nền là chế độ chính).
Bước 2
Chọn một hiệu ứng đặc biệt. Về việc lựa chọn các hiệu ứng đặc biệt, bạn không nên đặc biệt khó khăn - chúng chỉ có thể được mượn từ các ví dụ cho các thư viện FastLIB, ví dụ, các thuật toán để vẽ một quả cầu lửa. Sau đó, bạn cần thêm một hệ thống các hạt đơn giản vào hiệu ứng và đặt tên cho kết quả vì nó sẽ thuận tiện. Khởi tạo DirectDraw. Chỉ các bề mặt chính mới có ý nghĩa để khởi tạo.
Bước 3
Kiểm tra khả năng hiển thị lớp phủ và tạo lớp phủ đó. Để thực hiện việc này, hãy sử dụng chức năng GetOverlayCaps. Không có gì phức tạp và thú vị trong GetOverlayCaps - đó là việc chuyển từ các DDCap của từng bit hoặc giá trị được liên kết với các lớp phủ thành một cấu trúc nhỏ gọn hơn - TOverlayCaps. Tiếp theo, bạn nên sửa lại kích thước của lớp phủ để chúng tương ứng với các thông số thu được trong quá trình sử dụng hàm. Trong thực tế, khả năng thực thi thành công đoạn mã như vậy là cực kỳ nhỏ, vì vậy bạn không nên đặc biệt tập trung vào nó - đặc biệt, kích thước của nó không được giới hạn để tránh làm chậm, không cần thiết phải kiểm tra kích thước theo byte về khả năng thâm nhập nội dung của bộ nhớ video, v.v.
Bước 4
Nói chung, bạn nên kiểm tra nhiều hơn để nhận báo cáo, vì quá trình tạo lớp phủ được thực hiện bằng phương pháp brute-force. Vấn đề là không có chức năng nào như EnumOverlayFormats tồn tại và chưa được tạo, vì vậy người dùng nên kiểm tra bất kỳ định dạng nào có thể tưởng tượng được và hy vọng may mắn. Tuy nhiên, có một hàm IDirectDraw7GetFourCCCodes, được thiết kế để xác định mã định dạng không phải RGB (FourCC), nhưng nó không chỉ bao gồm YUV cần thiết, mà còn bao gồm cả định dạng kết cấu nén và các định dạng khác. Để sử dụng toàn bộ danh sách và xác định từng định dạng là YUV hoặc không phải YUV có vẻ không hợp lý.
Bước 5
Xóa hình ảnh khỏi màn hình, nếu có, và gán các màu DCK cho hình ảnh đó. Bật lớp phủ màu DCK. Lớp phủ sẽ được bật và sẵn sàng hoạt động. Các hiệu ứng hình ảnh của việc sử dụng nó có thể được đánh giá sau khi thu nhỏ tất cả các cửa sổ làm việc.