Thay vì sử dụng glGenTextures()
để lấy ID kết cấu không sử dụng. Tôi có thể chọn ngẫu nhiên một số, ví dụ, 99999 và sử dụng nó không?Bạn có sử dụng ID kết cấu ngẫu nhiên không?
Tôi sẽ, tất nhiên, truy vấn:
glIsTexture(m_texture)
và chắc chắn rằng nó sai trước khi tiếp tục.
Dưới đây là một số nền:
Tôi đang phát triển một ứng dụng trình chiếu hình ảnh cho máy mac. Xem trước trình chiếu là hoàn hảo. Để lưu trình chiếu, tôi sẽ kết xuất với FBO. Tôi tạo ra một bối cảnh AGL, tạo ra một kết cấu với glGenTextures()
và kết xuất với một bộ đệm khung. Tất cả cũng ngoại trừ một vấn đề nhỏ.
Sau khi tôi đã lưu trình chiếu và quay lại cửa sổ chính, tất cả hình thu nhỏ của hình ảnh của tôi có màu xám, tức là các hoạ tiết đã bị xóa.
Tôi đã điều tra và phát hiện ra rằng hình thu nhỏ của hình ảnh và kết cấu FBO của tôi bằng cách nào đó có cùng ID kết cấu. Khi tôi xóa kết cấu FBO của tôi ở cuối hoạt động lưu trình chiếu, các họa tiết hình thu nhỏ cũng bị mất. Điều này là lạ bởi vì tôi có một bối cảnh AGL trong quá trình lưu, và giao diện người dùng chính có một bối cảnh AGL khác, có lẽ được tạo ra trong nền của Core Image và tôi không có quyền kiểm soát.
Vì vậy, lựa chọn của tôi, như tôi nhìn thấy nó bây giờ, là để:
- Không xóa các kết cấu FBO.
- Chọn ngẫu nhiên ID có kết cấu cao với hy vọng giao diện người dùng chính sẽ không sử dụng nó.
Thực ra tôi đã đọc rằng bạn không nhất thiết phải xóa kết cấu của mình nếu bạn đang xóa ngữ cảnh mở AGL. Vì việc xóa ngữ cảnh OpenGL của bạn sẽ tự động xóa tất cả các hoạ tiết liên quan. Điều này có đúng không? Nếu có, tùy chọn 1 có ý nghĩa hơn.
Tôi nhận ra rằng có những điều thú vị xảy ra ở đây mà tôi thực sự không thể giải thích. Ví dụ: sau khi tôi đã lưu trình chiếu hình ảnh của mình vào tệp .mov
, tôi xóa ngữ cảnh đã được tạo trong cùng một lớp. Bên phải, nó sẽ không ảnh hưởng đến kết cấu được tạo trong ngữ cảnh khác. Nhưng nó có, và tôi nghiêm túc không thể giải thích điều đó.
Cảm ơn câu trả lời của bạn. Việc gán ID cấu trúc theo cách thủ công sẽ không được đặt câu hỏi, vì chúng tôi cần hỗ trợ OpenGL 1.4 cho tới 3.2. Đặt cược tốt nhất của tôi bây giờ là không xóa kết cấu nào cả. Btw Tôi không thể bỏ phiếu cho câu trả lời của bạn cos Tôi không có đủ điểm. –
@Nicol: Đoạn thứ hai của bạn có vẻ khá * không đầy đủ *. – genpfault
@genpfault: Đã sửa lỗi. Cảm ơn! –