Chế độ hiển thị màn hình và các kiểu định dạng

Một phần của tài liệu Beginning DirectX 9 doc (Trang 30 - 33)

Nếu ứng dụng game của bạn chạy ở chếđộ cửa sổ trên màn hình desktop thì việc kiểm tra xem hệ thống hỗ trợ các chế độ phân giải nào là không cần thiết. Bạn chỉ cần truyền giá trị D3DFMT_UNKNOWN cho hàm, chương trình sẽ tự động xác lập giá trị mặc định mà màn hình desktop đang lựa chọn.

Video Modes and Formats

Nếu game mà bạn viết chỉ chạy ở chếđộ cửa sổ trên desktop, thì việc xác định chếđộđồ

hoạ mà máy tính của bạn hỗ trợ không quan trọng lắm, tuy nhiên khi bạn muốn game của bạn chạy ở chếđộ toàn bộ màn hình (fullscreen) , thì việc xác định những chếđộ hiển thị được hỗ trợ là rất cần thiết. Tất cả các máy tính đều hỗ trợ chế độ phân giải màn hình

Chú ý:

Chúng ta phải sử dụng tham số D3DFMT_UNKNOWN cho kiểu bộđệm BackBufferFormat bởi vì chúng ta đang sử dụng kiểu hiển thịứng dụng dạng cửa sổ.

640x480, nhưng còn chế độ 800x600 hay 1024x768 thì sao? Không phải tất cả các thiết bị đồ hoạ đều hỗ trợ những chế độ phân giải đó. Và nếu có thì liệu chúng có được chất lượng màu bạn mong muốn? Đó là lý do tại sao khi bạn viết một game ở chế độ toàn bộ

màn hình, thì tốt nhất là bạn nên kiểm tra phần cứng để chắc rằng nó hỗ trợ những gì mà game của bạn cần. Để thực hiện điều đó, Direct3D cung cấp cho bạn một số hàm thông qua giao diện IDirect3D9. Hàm đầu tiên mà bạn cần đã được giới thiệu ở phần trên:

UINT IDirect3D9::GetAdapterCount(VOID);

Thông thường, hàm này sẽ trả về một giá trị kiểu integer không dấu (unsigned integer) chỉ

ra số lượng thiết bị đồ hoạ của hệ thống. DirectX hỗ trợ cùng lúc nhiều thiết bị đồ hoạ, cho phép game chạy trên nhiều màn hình. Để mọi việc đơn giản, hãy nghĩ rằng, chỉ có một thiết bị đồ hoạ.

Gathering Video Adapter and Driver Information

Viêc nắm được thông tin chắc chắn về thiết bị đồ hoạ trên máy của bạn là rất hữu ích. Ví dụ, bạn có thể muốn biết độ phân giải mà thiết bị đồ hoạ hỗ trợ, hoặc thông tin hãng sản suất. Sử dụng hàm GetAdapterIdentifier, bạn có thể thu thập được rất nhiều thông tin. Nó

được định nghĩa như sau: HRESULT GetAdapterIdentifier( UINT Adapter DWORD Flags, D3DADAPTER_IDENTIFIER9 *pIdentifier );

■ Tham số đầu tiên có kiểu integer không dấu để xác định thiết bị đồ hoạ nào mà bạn muốn lấy thông tin. Bởi vì, chúng ta đang chấp nhận rằng hiện tại chỉ có một thiết bị đồ

hoạ, nên giá trị đưa vào là D3DADAPTER_DEFAULT, nghĩa là thiết bị đồ hoạ chính sẽ được chọn.

■ Tham số thứ hai, là một cờ (flag), xác nhận WHQLLevel của trình điều khiển.

■ Tham số thứ ba là con trỏ tới vùng nhớ của cấu trúc D3DADAPTER_IDENTIFIER9. Cấu trúc này lưu thông tin về thiết bị đồ hoạ do hàm trả về.

Cấu trúc D3DADAPTER_IDENTIFIER9 cung cấp những thông tin sau: typedef struct _D3DADAPTER_IDENTIFIER9 {

// tên của trình điều khiển

char Driver[MAX_DEVICE_IDENTIFIER_STRING]; // mô tả về thiết bị

char Description[MAX_DEVICE_IDENTIFIER_STRING]; // version của thiết bị

char DeviceName[32];

// version của trình điều khiển hiện được cài đặt LARGE_INTEGER DriverVersion;

// This value holds the bottom 32 bits of the driver version DWORD DriverVersionLowPart;

// This value holds the upper 32 bits of the driver version DWORD DriverVersionHighPart;

// số ID sản xuất DWORD VendorId;

// the ID of the particular device DWORD DeviceId;

DWORD SubSysId;

// the revision level of the device chipset DWORD Revision;

// a unique identifier for the device GUID DeviceIdentifier; (adsbygoogle = window.adsbygoogle || []).push({});

// the level of testing that this driver has gone through DWORD WHQLLevel;

} D3DADAPTER_IDENTIFIER9;

Cấu trúc này lưu giữ toàn bộ những đặc trưng có liên quan đến thiết bị và trình điều khiển thiết bị được cài đặt. Đầy đủ hơn về cấu trúc này xem ở tài liều của DirectX.

Getting the Display Modes for an Adapter

Bước tiếp theo là lấy thông tin chi tiết về các chếđộ hiển thị mà thiết bị đồ hoạ hỗ trợ. Để

làm được điều đó, trước tiên bạn phải kiểm tra xem có bao nhiêu chếđộ hiển thị có thể. Việc này được thực hiện qua hàm GetAdapterModeCount, định nghĩa như sau:

UINT GetAdapterModeCount( UINT Adapter, D3DFORMAT Format );

Tham sốđầu tiên xác định thiết bị mà bạn muốn kiểm tra. Theo nhưđã nói ở trên, ta đưa vào giá trịD3DADAPTER_DEFAULT.

Tham số thứ hai xác định loại định dạng đồ hoạ (D3DFORMAT) mà bạn muốn kiểm tra. Nhưở trên ta dùng D3DFMT_X8R8G8B8, với 8 bit cho màu đỏ, 8 bit cho màu xanh lá cây, 8 bit cho xanh nước biển. 8 bit chưa dùng đến. Bạn có thểđưa vào bất kì loại định dạng nào mà Direct3D định nghĩa sẵn, và GetAdapterModeCount sẽ trả về số chếđộ hiển thị phù hợp với định dạng này. Bảng 2.2 đưa ra một vài định dạng D3DFORMATs có thể

dùng trong DirectX: EnumAdapterModes

Hàm cuối cùng mà bạn cần dùng là EnumAdapterModes. Hàm này sẽ lấy thông tin vào biến có cấu trúc D3DDISPLAYMODEứng với từng chếđộ có thể. Sau đây là định nghĩa của hàm: HRESULT EnumAdapterModes( UINT Adapter, D3DFORMAT Format, UINT Mode, D3DDISPLAYMODE* pMode );

Nhưở trên, tham sốđầu tiên ta đưa vào D3DADAPTER_DEFAULT. Tham số thứ hai là

định dạng D3DFORMAT mà bạn đang kiểm tra. Tham số thứ ba, là số thứ tự của chếđộ

mà bạn muốn lấy thông tin. Nhớ rằng, hàm GetAdapterModeCount trả về số chếđộ hiển thị mà thiết bị có. Và tham số thứ ba sẽ nằm trong khoảng từ 0 đến số này. Tham số cuối cùng là con trỏđến biến có cấu trúc D3DDISPLAYMODE. Cấu trúc này lưu thông tin về

chếđộđồ hoạ, như chiều rộng, chiều cao, độ quét và định dạng.

Một phần của tài liệu Beginning DirectX 9 doc (Trang 30 - 33)