2011-06-20 42 views
8

Cốt lõi của mã (hiển thị hình chữ nhật màu đỏ):Vẽ VBO với glDrawArrays làm việc trong OpenGL 2.1 nhưng không phải trong OpenGL 3.x

//bind program, set uniforms, bind vbo 
glEnableVertexAttribArray(0); 
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0,0); 
glDrawArrays(GL_TRIANGLES, 0, 6); 
glDisableVertexAttribArray(0); 
//unbind vbo, unbind program 

Khi tôi chuyển đổi ngữ cảnh để OpenGL 3.x mã này dừng lại để làm việc (Tôi chỉ có thể nhìn thấy màu nền), nhưng khi tôi khởi tạo VAO theo cách tương tự như mã ở trên và sau đó tôi ràng buộc VAO và gọi glDrawArrays, thì nó hoạt động.

Điều gì có thể là vấn đề? Làm thế nào tôi có thể vẽ VBO mà không cần sử dụng VAO?

(shaders là thực sự đơn giản, vs chỉ ma trận mulitplies và đầu ra ps màu đỏ)

Trả lời

7

Hãy có một cái nhìn trong spec OpenGL-3-core:

Mục 2.10

đoạn đầu tiên:

Đối tượng đệm đó sẽ được sử dụng bởi giai đoạn đỉnh của GL là thu thập với nhau để tạo thành một đỉnh đối tượng mảng. Tất cả các trạng thái liên quan đến định nghĩa của dữ liệu được sử dụng bởi bộ xử lý đỉnh được đóng gói trong một đối tượng mảng đỉnh.

đoạn cuối:

lỗi HOẠT ĐỘNG INVALID được tạo ra nếu bất kỳ của các lệnh * Pointer xác định vị trí và tổ chức dữ liệu mảng đỉnh được gọi khi không được ràng buộc với ARRAY BUFFER đối tượng đệm ràng buộc điểm, và đối số con trỏ là không NULL³.

Và trong chú thích ³:

Lỗi này làm cho nó không thể tạo ra một đối tượng mảng đỉnh chứa con trỏ mảng khách hàng, khi vẫn cho phép đối tượng đệm được cởi ra.

Hoặc nói cách khác: Trong OpenGL-3 lõi bạn phải sử dụng VAOs

+0

Tôi đã nghĩ rằng VAO của là không bắt buộc. (mã của tôi không ném bất kỳ lỗi nào). Vậy làm thế nào tôi nên sử dụng VAO? 1 VAO = 1 mô hình? – chris

+0

Tạm thời tôi sẽ sử dụng một VAO toàn cầu. – chris

+4

Bạn có thể thu thập nhiều mô hình trong một VAO. Tôi thường thu thập các mắt lưới của các tính chất tương tự mà luôn luôn đến với nhau trong VAO. Ví dụ: tất cả các phần tử tĩnh của bản đồ của một công cụ trò chơi sử dụng cùng một trình đổ bóng có thể được thu thập trong một VAO. Sắp xếp theo shader và tài sản vật chất có lẽ là tiêu chí phân loại tốt nhất, tôi muốn nói. – datenwolf

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