2010-02-24 38 views
8

Được biết, đồng phục và thuộc tính là các thanh ghi trong GPU. Và câu hỏi của tôi là những gì sẽ xảy ra khi chương trình khác nhau bị ràng buộc? Đảm bảo tiêu chuẩn mà trước đây đặt đồng phục và/hoặc con trỏ thuộc tính sẽ được tải lại hay tôi cần tải lại chúng theo cách thủ công trong mọi trường hợp? Tôi muốn tạo hệ thống bộ nhớ đệm. Dường như đối với tôi rằng các thuộc tính không được nạp lại (có?) Khi chương trình phục hồi và những gì về đồng phục? Trình điều khiển GL ES có tải lại các giá trị của họ cho tôi không?OpenGL ES 2: Đồng phục và thuộc tính

Trả lời

17

Không, không nổi tiếng là đồng phục và thuộc tính là thanh ghi trong GPU. Trong thực tế, nó là sai đối với ít nhất trong một GPU OpenGL ES 2.0 được triển khai rộng rãi.

Đồng phục bằng 0 trừ khi được khởi tạo rõ ràng. Các giá trị thống nhất là các trạng thái theo đối tượng chương trình. Nói cách khác, nếu bạn đặt đồng phục trên đối tượng chương trình đã cho, bạn CÓ THỂ phụ thuộc vào giá trị đang được bảo tồn trên các đối tượng của cùng một đối tượng chương trình, nhưng bạn không thể phụ thuộc vào đồng phục tại một vị trí nhất định. các đối tượng. Thực tế, việc triển khai OpenGL ES thực hiện điều này sẽ vi phạm đặc điểm kỹ thuật. Đây không phải là hành vi không xác định.

Con trỏ thuộc tính là trạng thái ngữ cảnh toàn cầu và bạn CÓ THỂ phụ thuộc vào các con trỏ này để được giữ nguyên giữa các cuộc gọi đến cùng một ngữ cảnh OpenGL ES. Cũng giống như các giá trị thuộc tính hiện tại (được đặt qua các thuộc tính glVertexAttribute *)

+0

Tôi tìm thấy trong đặc tả OpenGL ES rằng "Đồng phục là trạng thái của đối tượng chương trình cụ thể. đối tượng được sử dụng, miễn là đối tượng chương trình chưa được liên kết lại ". Vì vậy, tôi có thể để nó không thay đổi nếu giá trị của nó vẫn giữ nguyên. Giới thiệu về thuộc tính. Thử nghiệm của tôi nói khác nhau: nếu tôi bỏ qua glVertxAttribPointer khi con trỏ và bộ đệm là như nhau, trực quan tôi nhận được một cái gì đó sai hoặc thậm chí màn hình màu đen. Nhưng glGetError vẫn OK. – demi

+0

Phần về đồng phục về cơ bản là những gì tôi nói. Về các thuộc tính, bạn có chắc chắn các thuộc tính bạn cố gắng sử dụng lại có cùng vị trí thuộc tính không? Nếu không, bạn có thể thử sử dụng glBindAttribLocation trước khi liên kết chương trình để đảm bảo. – kusma

+0

Tôi ước tôi có thể +1 hai lần. một cho câu trả lời đúng, 1 cho tidbit "đăng ký". GPU nào bạn biết về điều đó không làm điều đó, btw? – Bahbar

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