Device context là trong lập trình window là gì
Để phân biệt, khi xài API function trực tiếp, thêm dấu :: đằng trước. Bây giờ khi đã có device context của Static Text. Vì device context này chỉ được release khi thoát chương trình, nên khai báo thêm m_StaticWnd và m_StaticDC trong phần global. 1.2 – Thay đổi pixel format của device context Device context cần được thay đổi phù hợp để OpenGL có thể vẽ lên đó.
Các tham số có thể tham khảo trong MSDN.PFD_DOUBLEBUFFER 1.3 – Tạo renderring context cho OpenGL Bước này báo cho OpenGL biết sẽ vẽ lên device context nào. 1.4 – Setup trạng thái cho OpenGL Điều chỉnh góc nhìn, màu nền,.. như sau:
Để hiểu rõ, tham khảo thêm MSDN. Nếu size của window bị thay đổi, nên gọi lại phần “chỉnh viewport” và “chỉnh góc nhìn”. Bước 2 – Update windowChỉ nên update window khi chương trình ở trong trạng thái idle. Xem ghi chú về idle ở cuối bài viết này.
Muốn vẽ cái gì lên window thì vẽ ở Render. Vì phần vẽ này thường rất dài và phức tạp, nên mới được tách ra thành 1 function.
glPushMatrix và glPopMatrix dùng để lưu và phục hồi trạng thái của OpenGL. Nếu trong painting commands có command nào đó làm thay đổi trạng thái của OpenGL, mà Render không lưu và phục hồi trạng thái ban đầu, thì sau vài lần gọi Render, hình vẽ hiển thị lên màn hình sẽ không như ý muốn. Nhớ rằng OpenGL là state machine. Bước 3 – Dọn dẹpKhi chương trình chương trình kết thúc, cần release device context và delete rendering context.ReleaseDC(m_StaticWnd, m_StaticDC); // đây là lí do tôi khai m_StaticWnd trong phần global wglMakeCurrent(NULL, NULL); wglDeleteContext(m_OpenGLRC); Ghi chú về idleChương trình Dialog based, xài MFC Không xài được cả WM_ENTERIDLE lẫn CWinApp::OnIdle() => xài WM_KICKIDLE trong afxpriv.hFile header của dialog, phần message map, thêm: Trong Linux, Initrd (initial ramdisk) là 1 mô hình để load root file system tạm thời vào bộ nhớ để có thể được sử dụng như là 1 phần của quá trình khởi động Linux. Nhiều distro được phân phối cùng với linux kernel tổng quát, là kernel được các lập trình viên của bản phân phối tạo ra để boot trên nhiều phần cứng khác nhau. Các device driver cho kernel image tổng quát này được thêm vào như là LKM (Loadable Kernel Module) bởi vì việc biên dịch tĩnh nhiều driver vào 1 kernel sẽ làm cho kernel image có kích thước lớn hơn, có thể quá lớn để boot trên máy tính có memory giới hạn. Điều này phát sinh vấn đề cần phải phát hiện và load các module cần thiết để mount root file system lúc boot nhưng tại thời điểm này root filesystem là gì và ở đâu? Ngoài ra, root file system có thể nằm trên RAID volume, LVM, NFS hoặc 1 partition đã được mã hóa. Tất cả điều này yêu cầu 1 sự chuẩn bị đặc biệt (kiểu như kernel phải tích hợp thêm nhiều device driver mới hiểu được) mới mount được. Một sự phức tạp khác là kernel hỗ trợ hibernation sẽ treo máy tính vào disk bằng cách tạo ra (dumping) 1 image của toàn bộ nội dung bộ nhớ vào 1 swap partition hoặc 1 file thông thường sau đó power off. Khi khởi động lại, image này cần phải truy cập được trước khi nó có thể được load ngược lại vào bộ nhớ. Để tránh việc phải hardcode quá nhiều trường hợp đặc biệt vào trong kernel, giai đoạn boot ban đầu với 1 root file system tạm thời, ta sử dụng cơ chế early user space. Điều này cho phép root file system có thể chứa các user space helper để phát hiện phần cứng, load module và khám phá các thiết bị cần thiết để có thể mount root file sytem thực sự. Cài đặtImage của root file system ban đầu (cùng với kernel image) phải được lưu trữ ở đâu đó có thể truy cập được bởi boot loader hoặc boot firmware (trường hợp UEFI). Nó có thể là bản thân root file system, boot image trên đĩa quang, 1 partition nhỏ trên local disk (boot partition, thường là ext2 hoặc FAT) hoặc TFTP server (boot từ Ethernet) Boot loader sẽ load kernel và initial root files system image vào memory và khởi động kernel, chuyển vào địa chỉ bộ nhớ của image. Vào giao đoạn cuối của quá trình boot này, kernel sẽ cố gắng xác định định dạng của image từ vài block data đầu tiên của nó và có thể dẫn đến thực thi mô hình initrd hoặc initramfs scheme.
Tùy thuộc vào thuật toán nào đã được sử dụng để biên dịch tĩnh vào kernel, kernel sau đó có thể unpack initrd/intramfs image đã được nén bằng gzip, bzip2, LZMA, XZ, LZO và LZ4. Chuẩn bị mountMột số bản phân phối Linux chẳng hạn như Debian sẽ tạo một initrd image tùy biến chỉ chứa những gì cần thiết để khởi động máy tính, chẳng hạn như ATA, SCSI và filesystem kernel module. Chúng thường nhúng vị trí và loại của root filesystem. Các bản phân phối Linux khác (chẳng hạn như Fedora và Ubuntu) tạo ra một initrd image tổng quát hơn. Chúng chỉ khởi động với tên thiết bị của root filesystem (hoặc UUID của nó) và phải khám phá mọi thứ khác tại thời điểm khởi động. Trong trường hợp này, phần mềm phải thực hiện một loạt các tác vụ phức tạp để có thể moun được root filesystem:
Một số bản phân phối sử dụng hotplug agent hướng sự kiện như udev, agent này sẽ gọi các chương trình helper dưới dạng thiết bị phần cứng, phân vùng đĩa và volume lưu trữ phù hợp với các quy tắc nhất định. Điều này cho phép tiến trình khám phá (discovery) chạy song song và xếp tầng thành LVM, RAID lồng vào nhau hoặc mã hóa tùy ý để truy cập vào root filesystem. Cuối cùng, khi root filesystem được hiển thị, mọi tác vụ bảo trì không thể chạy trên root filesystem sẽ được thực hiện, root filesystem sẽ được mount dưới dạng read only và mọi process phải tiếp tục chạy (chẳng hạn như splash screen helper và lệnh FIFO của nó) sẽ được đưa vào root filesystem mới được mount. Root filesystem cuối cùng không thể chỉ đơn giản được mount tại
Hầu hết các root filesystem ban đầu đều triển khai Các mục đích sử dụng khácCác trình cài đặt dành cho các bản phân phối Linux thường chạy hoàn toàn từ initramfs vì chúng phải có khả năng lưu trữ giao diện trình cài đặt và các công cụ hỗ trợ trước khi bất kỳ bộ nhớ ổn định nào được thiết lập. Tiny Core Linux và Puppy Linux có thể chạy hoàn toàn từ initrd. Điểm tương đồng trong các hệ điều hành khácKể từ Windows Vista, Windows có thể khởi động từ file WIM disk image, nó khá giống với định dạng ZIP ngoại trừ việc nó hỗ trợ liên kết cứng (hard link), sử dụng nén chunk-by-chunk và có thể hỗ trợ các chunk không trùng lặp. Trong trường hợp này, toàn bộ WIM lúc đầu được load vào RAM, sau đó là khởi tạo kernel. Tiếp theo, WIM đã được load sẽ có sẵn dưới dạng SystemRoot với ký tự ổ đĩa được chỉ định. Trình cài đặt Windows sử dụng ổ đĩa này để nó khởi động từ Ngoài ra, Windows Preinstallation Environment (Windows PE) cũng giống như vậy, nó là cơ sở cho các phiên bản khởi động riêng biệt của một số phần mềm chống virus và sao lưu/phục hồi thảm họa. Ta cũng có thể cài đặt Windows để nó luôn khởi động từ file WIM hoặc file VHD nằm trên ổ đĩa vật lý. Tuy nhiên, điều này hiếm khi được sử dụng vì Windows bootloader có khả năng load các file |