Tôi cần phải khởi tạo kết cấu OpenGL 2D với số không.Làm thế nào để khởi tạo hiệu quả kết cấu bằng số không?
Tại sao? Tôi kết xuất với texture này bằng OpenCL. Khoảng, giai đoạn render là:
- Tạo texture RGBA, khởi tạo với số không (vì vậy nó có chứa điểm ảnh trong suốt màu đen)
- OpenCL: màu tính toán của pixel mà một số đối tượng có thể nhìn thấy và viết chúng vào kết cấu này
- OpenGL: thêm ánh xạ môi trường vào các pixel trong suốt và hiển thị hình ảnh cuối cùng
Do đó, tôi không cần chuyển bất kỳ dữ liệu họa tiết thực tế nào đến glTexImage2d
. Nhưng theo spec, khi tôi vượt qua dữ liệu = NULL, bộ nhớ kết cấu được cấp phát nhưng không được khởi tạo.
Phân bổ bộ nhớ phía máy khách đầy zeroes và chuyển đến glTexImage2D
không phải là một lựa chọn rất tốt mặc dù chỉ có một người tôi có thể nghĩ đến.
EDIT: Tôi thực sự muốn chỉ init thành phần alpha (RGB sẽ nhận được overriden anyway), nhưng tôi nghi ngờ điều này làm cho tình hình dễ dàng hơn.
Không bao giờ nghe nói về 'glClearBuffer'. Đây có phải là phiên bản mới không? Liệu nó có bất kỳ lợi thế hơn 'glClear' (hoặc là sau này thậm chí không được chấp nhận) ?. –
@Christian: Lợi thế chính của ClearBuffer là bạn có thể xóa các bộ đệm cụ thể. Nếu bạn có nhiều bộ đệm trong bộ đệm khung, nhiều mục tiêu hiển thị, thì bạn có thể muốn xóa các bộ đệm khác nhau thành các màu khác nhau. Hay không rõ ràng chút nào. Bạn không thể làm điều đó với 'glClear'; nó xóa tất cả các bộ đệm với cùng một màu sắc rõ ràng. 'glClear' không được dùng nữa, và' glClearBuffer' xuất phát từ GL 3.0 (không có phần mở rộng cho nó). –
Lưu ý rằng glClearTexImage chỉ hoạt động nếu lưu trữ kết cấu đã được phân bổ trước đó, sử dụng lệnh gọi đến glTexImage * hoặc glTexStorage *. Đơn giản chỉ cần tạo texture bằng cách sử dụng glBindTexture là không đủ. Nhưng điều này cũng áp dụng cho glTexSubImage2D, tất nhiên. – rdb