2011-12-21 37 views
10

Tôi đang viết một Shader GLSL đỉnh cho một iMac với một bộ xử lý AMD Radeon HD 6970M thẻ 2048 MB đồ họa:Số lượng thành phần đồng bộ đỉnh thực tế cho bóng đổ GLSL trên card đồ họa ATI là gì?

GL_MAX_VERTEX_ATTRIBS: 16 
GL_MAX_VERTEX_UNIFORM_COMPONENTS: 4096 
GL_VERSION: 2.1 ATI-7.12.9 
GL_SHADING_LANGUAGE_VERSION: 1.20 

Trong shader của tôi, tôi muốn có một mảng lớn của mat4s thống nhất:

uniform mat4 T[65] 

nhưng nếu tôi cố gắng để 65 trong số các trình đổ bóng của tôi (bí mật) chuyển sang chế độ Trình kết xuất phần mềm của Apple. Thay vào đó, nếu tôi sử dụng 64:

uniform mat4 T[64] 

mọi thứ đều ổn.

Dường như có vấn đề với số lượng đồng phục tối đa. Nhưng như tôi đã viết ở trên tôi nhận được 4096 cho GL_MAX_VERTEX_UNIFORM_COMPONENTS quá 4096/(4 * 4) = 256 không 64 ...

OpenGL.org wiki nói

ATI/AMD lưu ý: Các giá trị thành phần tối đa là ATI sai rồi. Họ là những con số thực tế của các thành phần chia cho 4.

Nhưng đọc bài viết này tôi sẽ nghĩ rằng nếu tôi truy vấn GL_MAX_VERTEX_UNIFORM_COMPONENTS và nhận được 4096 mà tôi thực sự có 16.384. Trường hợp dường như là GL_MAX_VERTEX_UNIFORM_COMPONENTS trả về số lượng thành phần thực tế nhân với số bằng 4. Điều này sau đó sẽ cho 1024/(4 * 4) = 64.

Có ai xác nhận điều này không?

Edit: shader của tôi chỉ đơn giản là:

#version 120 

// 65 goes into software render mode 
#define MAX_T 64 
attribute vec4 indices; 
uniform mat4 T[MAX_T]; 

void main() 
{ 
    gl_Position = T[int(indices[0])]*gl_Vertex; 
} 
+3

Bạn có thể vui lòng đăng mã đổ bóng hay ít nhất định nghĩa của tất cả các đồng phục được sử dụng. Và bạn là đúng isofar, mà bạn cần phải chia 1024 bởi 4 không nhân lên. Mục nhập wiki được diễn đạt một cách tồi tệ. – datenwolf

+0

Tôi đã đăng mã shader ở trên (tôi cũng nhận thấy rằng trước khi tôi có một số trong đếm của tôi, vì vậy tôi đã chỉnh sửa các số trong câu hỏi gốc 63-> 64 và 64-> 65 tương ứng). –

+1

@datenwolf Bạn nên đăng bài này như một câu trả lời, vì điều này dường như là vấn đề của mình khá rõ ràng. Tôi đoán anh ta chỉ sử dụng một số đồng phục nhỏ khác mà "chặn" khe ma trận 64 cuối cùng (đồng phục được xây dựng cũng tính, tôi nghĩ). –

Trả lời

7

Bạn nói đúng isofar, mà bạn cần phải chia 4096 bởi 4 không nhân. Mục nhập wiki đã được đọc sai.

+5

Đó là * không * được viết sai; nhìn lại. Và đừng nhìn vào lịch sử chỉnh sửa trên trang đó; Tôi chắc chắn rằng người viết nó chắc chắn đã không sửa nó sau khi nhìn thấy câu hỏi này. Không, điều đó chắc chắn đã không xảy ra vài phút trước. ;) –

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