2012-01-09 38 views
7

Tôi đang tìm hiểu về lập trình 3D với cuốn sách Learning Modern 3D Graphics Programming, nhưng tôi không có may mắn với các trình đổ bóng và GLES 2.0 trong iOS. Tôi đang làm việc từ mẫu trò chơi opcodel xcode 4, mặc dù với những thay đổi có ý nghĩa với ví dụ đầu tiên trong cuốn sách.Sự khác biệt về Shader trên iOS

Các trình đổ bóng đầu tiên trong sách sẽ không biên dịch với nhiều lỗi khác nhau. Trình đổ bóng đầu tiên

#version 330 

layout(location = 0) in vec4 position; 
void main() 
{ 
    gl_Position = position; 
} 

Khiếu nại về tuyên bố phiên bản và từ chối cho phép sử dụng bố cục làm người chỉ định. Cuối cùng tôi đã đạt được điều này để xây dựng.

attribute vec4 position; 
void main() 
{ 
    gl_Position = position; 
} 

Một lần nữa đổ bóng đoạn đầu tiên từ chối xây dựng do các phiên bản, và sẽ không cho phép đầu ra trong một phân khúc toàn cầu

#version 330 
out vec4 outputColor; 
void main() 
{ 
    outputColor = vec4(1.0f, 1.0f, 1.0f, 1.0f); 
} 

Với lỗi

ERROR: 0:10: Invalid qualifiers 'out' in global variable context 

Được rồi vì vậy tôi đã quản lý để lấy ví dụ đầu tiên (một hình tam giác đơn giản) để làm việc với các trình đổ bóng sau.

vertex

#version 100 
void main() 
{ 
    gl_FragColor = vec4(1.0,1.0,1.0,1.0); 
} 

fragment shader

attribute vec4 position; 
void main() 
{ 
    gl_Position = position; 
} 

Vì vậy, những người làm việc và tôi đã thử các ví dụ màu đầu tiên trong chương kế tiếp.

#version 330 
out vec4 outputColor; 
void main() { 
    float lerpValue = gl_FragCoord.y/500.0f; 
    outputColor = mix(vec4(1.0f, 1.0f, 1.0f, 1.0f), 
     vec4(0.2f, 0.2f, 0.2f, 1.0f), lerpValue); 
} 

Ngay cả làm việc xung quanh những vấn đề cố định từ eariler, phiên bản, trong f của nổi không được phép, The shader vẫn từ chối để xây dựng với lỗi này

ERROR: 0:13: 'float' : declaration must include a precision qualifier for type 

hiệu quả nó được phàn nàn về phao.

Tôi đã thử googling để tìm giải thích về sự khác biệt, nhưng không có điều nào trong số này xuất hiện. Tôi cũng đã đọc qua các tài liệu táo tìm kiếm lời khuyên và không tìm thấy sự giúp đỡ nào. Tôi không chắc nơi nào khác để nhìn, hoặc những gì tôi thực sự làm sai.

Trả lời

13

thêm này ở phía trên cùng của shader: precision mediump float;

hoặc precision highp float;

phụ thuộc vào nhu cầu của bạn.

Các vấn đề liên quan