Cấu trúc của 1 chương trình VertexShader bằng hợp ngữ

Một phần của tài liệu nghiên cứu và xây dựng thử nghiệm 3G Engine (Trang 27 - 29)

Vertex Shader nguyên thủy được xây dựng bằng hợp ngữ. Các ngôn ngữ cấp cao hơn dành cho Vertex Shader chỉ xuất hiện sau này như HLSL (chỉ có trong Direct3D 9.0 trở lên) hay GLSL (được phát triển trong phiên bản OpenGL 2.0). Phần này sẽ đề cập tới cấu trúc 1 chương trình Vertex Shader viết bằng hợp ngữ, các ngôn ngữ cấp cao sẽđược trình bày ở cuối chương này.

Một chương trình Vertex Shader viết bằng hợp ngữ căn bản được chia thành các phần sau đây:

Hình 2-4 Cấu trúc 1 chương trình Vertex Shader bằng hợp ngữ

Chỉ thị phiên bản (Version Instruction). Là thành phần đầu tiên trong chương trình, nó cho biết phiên bản Vertex Shader được biên dịch thành. Trong ví dụ trên chương trình sẽ chạy được trên phần cứng hỗ trợ vs_1_1 trở lên.

Ghi chú (Comments). Được dùng để ghi các ghi chú trong chương trình như ý nghĩa của dữ liệu chứa trong thanh ghi… Ghi chú được bắt đầu bằng ( // ) hay ( ; ) cho ghi chú 1 dòng và ( /* … */ ) cho ghi chú nhiều dòng.

Các hằng thanh ghi (Constants). Các hằng được định nghĩa sau từ khoá def. Các hằng thanh ghi có thể chứa tới 4 giá trị cho mỗi thanh ghi. Nhưở ví dụ trên thanh ghi c8 được gán giá trị là (0, 1, 2, 3). Các hằng thanh ghi còn có thểđược gán giá trị bên trong chương trình chính thông qua phương thức

IDirect3DDevice9::SetVertexShaderConstantx.

Định nghĩa dữ liệu trong thanh ghi đầu vào (Input Register Declarations). Các thanh ghi dữ liệu vào như v0, v1… cần phải được định nghĩa dữ liệu trước khi sử dụng. Việc định nghĩa này sẽ giúp Direct3D ánh xạ được các dữ liệu thành phần trong vertex trên bộ nhớ vào đúng các thanh ghi tương ứng. Trong ví dụ trên, thanh ghi v0 sẽ chứa tọa độ vị trí, và v1 sẽ chứa tọa độ texture của vertex.

Các vi lệnh (Instructions). Phần cuối cùng của 1 chương trình Vertex Shader là các vi lệnh hợp ngữ. Mọi chương trình Vertex Shader đều phải xuất giá trị ra ít nhất là vào thanh ghi vị trí oPos. Trong ví dụ trên chương trình xuất vào 2 thanh ghi là thanh ghi vị trí oPos và thanh ghi tọa độ texture oT0.

Một phần của tài liệu nghiên cứu và xây dựng thử nghiệm 3G Engine (Trang 27 - 29)