Trong các phiên bản mới ưa thích của OpenGL (3.0 và 4.0 lên), các thuộc tính đỉnh dựng sẵn như gl_Vertex không được dùng nữa. "Cách mới" để thực sự hiển thị mọi thứ là chỉ định các thuộc tính đỉnh của riêng bạn cho vị trí, màu sắc, v.v. và sau đó liên kết các thuộc tính tùy chỉnh này với các bộ đệm.Trình tối ưu OpenGL hiện đại nên được viết như thế nào để tương thích với nhau?
Câu hỏi của tôi là: làm thế nào người ta có thể làm điều này mà không cần kết hợp chặt chẽ mã hiển thị và trình đổ bóng? Nếu tôi viết bóng đổ sử dụng "vị trí" làm vị trí đỉnh, mã máy chủ sử dụng trình đổ bóng phải biết và chuyển dữ liệu đỉnh là "vị trí". Nếu tôi muốn sử dụng một trình đổ bóng khác được viết để lấy dữ liệu đỉnh trong "vertex_pos", trước tiên tôi phải viết lại trình đổ bóng đó hoặc sửa đổi mã máy chủ của tôi để gửi dữ liệu đỉnh như "vertex_pos".
Có tập hợp các tên thực hành tốt nhất cho các thuộc tính đỉnh và phân đoạn tiêu chuẩn mà tất cả các trình đổ bóng nên sử dụng không? Hoặc có các tiêu chuẩn cụ thể cho động cơ Balkanized, sao cho một bóng đổ được viết cho một động cơ không thể hoạt động trên một động cơ khác mà không sửa đổi? Hoặc không có tiêu chuẩn nào cả, như vậy, nói chung, mọi đối tượng đều cần mã hiển thị tùy chỉnh của riêng nó để phù hợp với trình đổ bóng tùy chỉnh của nó?
Thực ra, điều đó không đúng. Dự trữ GLSL ** bất kỳ ** tên nào bắt đầu bằng "gl_". Nếu trình biên dịch lõi cho phép bạn sử dụng "gl_Vertex", thì nó không phù hợp với đặc điểm kỹ thuật. Thông số 1.50 làm rõ cú pháp redeclaration vì chỉ hợp lệ để thay đổi các thuộc tính của kiểu khai báo. Vì vậy, nó không nên cho phép bạn redeclare chúng hoặc. –
@Nicol: Bây giờ ở đây bắt đầu pháp luật ngôn ngữ: Một số người có thể thấy tên biến không dùng nữa như định danh được xác định trước từ hồ sơ tương thích và sử dụng chúng trong chương trình 1,35 GLSL là thuộc tính thay đổi quyền sở hữu; IMHO spec là không rõ ràng về điều này, mặc dù §3.3 trên '# version' dường như chỉ ra rằng lõi có nghĩa là" Không có tên tương thích có sẵn ". Nếu muốn an toàn, anh ta có thể sử dụng bộ tiền xử lý '#define gl_Vertex glVertex' và sử dụng tên đó trong cấu hình lõi. – datenwolf