bằng hợp ngữ
Vertex Shader nguyín thuỷe đựoc 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:
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ả 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::setvertexshaderconsstantx.
Đị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 toạ độ vị trí, vă v1 sẽ chứa toạ độ 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 cí dụ trín chương
trình xuất văo 2 thanh ghi lă thanh ghi vị trí opos vă thanh ghi toạ độ Texture ot0.
3.4. Pixel Shader
Pixel Shader lă chương trình tính toân vă xử lý mău trín 1 hay nhiều điểm ảnh. Pixel Shader sẽ được thực thi 1 lần cho mỗi điểm ảnh được dựng lín măn hình từ dữ liệu vertex vì thế pixel Shader khi chạy sẽ tốn nhiều thời gian hơn Vertex Shader ( chỉ xử lý 1 lần cho mỗi vertex). Pixel Shader có thể được viết bằng hợp ngữ hay HLSL. Câc phiín bản hiện nay của Pixel Shader gồm có ps_1_1,ps_1_2,ps_1_3. Ps_1_4, ps_2_0,ps_2_x vă cuối cùng lă ps_3_0.
Cũng giống như Vertex Shader, Poxel Shader khi thi hănh sẽ loại trừ với Fixed Function, do đố tìm hiều qui trình xử lý pixel của Fixed Function lă điều cần thiết.