Vì GLSL không có tùy chọn bao gồm tệp tôi đang cố gắng thêm bằng cách sử dụng trình phân tích cú pháp "#pragma include". (Tôi muốn điều này bởi vì tôi có một số phương pháp chung mà tôi muốn thực hiện chỉ một lần nhưng có thể sử dụng trong nhiều trình đổ bóng khác nhau, như cách mượt mà của Ken Perlin)OpenGL/GLSL - sử dụng glShaderSource với nhiều nguồn để hỗ trợ bao gồm các tệp
Phân tích cú pháp tệp shader để nhận các tệp được bao gồm hoạt động tốt. Nhưng khi thiết lập ShaderSource với nhiều tệp nguồn, tôi luôn gặp sự cố; vì shader chính của tôi thường bắt đầu bằng "#version 330" và # version-line luôn luôn là dòng đầu tiên trong trình đổ bóng, tôi chỉ có thể thêm tệp chính của mình làm tệp đầu tiên trong chuỗi các chuỗi được chuyển tới glShadersource và sau tất cả các tệp được bao gồm. Nhưng sau đó tập tin chính của tôi không thể sử dụng bất kỳ chức năng nào được thực hiện trong các tệp đó, vì chúng về cơ bản sẽ được ghép nối sau tệp chính của tôi để trình biên dịch phàn nàn rằng nó không biết các chức năng mà tệp chính của tôi đang sử dụng. Cách duy nhất tôi có thể nghĩ để làm cho nó hoạt động là đọc tệp chính, phân tích cú pháp bao gồm pragma, và sau đó thay thế dòng pragma đó với nội dung của tệp cần được đưa vào (đệ quy áp dụng cùng một phương pháp này cho tất cả các tệp có thể bao gồm các tệp khác) - nhưng điều đó có nghĩa là các bộ đệm trong các lỗi biên dịch sẽ không khớp với các bộ đệm thực của tệp chính nữa.
Có ai đã thiết lập một số loại chức năng "bao gồm" cho GLSL hoạt động và giữ bộ đồ lót không? Và nếu vậy - làm thế nào?
Bạn, thưa bạn, là một thiên tài! Không có ý tưởng tại sao tôi không nghĩ về điều đó, nhưng tôi nghĩ rằng đây sẽ là cách để đi cho tôi. \ o/ – Pygmy