Có ai biết cách thực hiện cú pháp switch
case
trong trình đổ bóng phân đoạn trên Samsung Galaxy S2 không? Tôi gặp lỗi biên dịch: Expected literal or '(', got 'switch'
.Android OpenGL ES 2.0: Cú pháp "chuyển đổi" có thể có trong trình đổ bóng đoạn GLSL trên Samsung Galaxy S2 không?
cú pháp của tôi là như sau:
switch(i){
case 0: x = alphas[0]; break;
case 1: //...etc.
}
này hoạt động tốt trên Nexus 7, nhưng trên Galaxy S2 tôi nhận được lỗi trên. Có phải switch
case
hướng dẫn đơn giản là không thể trên Galaxy S2? Lý do tại sao tôi muốn sử dụng chúng dường như cải thiện hiệu suất trên if
else
trên Nexus 7. Nếu chúng không thể trên Galaxy S2, có cách truy vấn thiết bị và sử dụng switch
case
nếu có, và if
else
nếu không?
Làm thế nào tôi có thể tránh nhánh nếu tôi cần phải animate màu sắc của các đối tượng riêng biệt trong shader mảnh và GPU không hỗ trợ truy cập mảng bởi biến (chỉ hằng thời gian biên dịch) ? – Navigateur
Bạn có thể thử chuẩn bị các shaders khác nhau cho các loại đối tượng khác nhau (không có _switch_, với mã cho _case_ inlined thích hợp) và gọi glUseProgram (GLint aObjectShaderID) trước khi vẽ, khi thay đổi kiểu. Đây là những gì tôi sử dụng ngay bây giờ, tốc độ phụ thuộc vào tần suất tôi phải thay đổi shader (đối tượng vẽ nên được sắp xếp theo shaders để giảm thiểu thay đổi shader) và phức tạp như thế nào là phân nhánh, nhưng quy tắc vàng là để tránh phân nhánh ở tất cả các chi phí và proflie sau triển khai từng tối ưu hóa. – zombo
zombo, điều này có yêu cầu một lệnh gọi 'drawElements' riêng biệt cho mỗi chương trình không? Điều này không mang chi phí của riêng nó và làm thế nào để bạn biết nó không đắt hơn so với phân nhánh trong shader fragment? – Navigateur