Tôi đang sử dụng LibGDX để tạo trò chơi. Tôi muốn đồng thời tải/dỡ tài sản khi đang cần thiết. Tuy nhiên, chờ đợi cho các tài sản để tải trong thread chính gây lag. Để khắc phục điều này, tôi đã tạo chủ đề nền giám sát nội dung nào cần được tải (họa tiết, âm thanh, v.v.) và tải/giải phóng chúng một cách thích hợp.Không tìm thấy ngữ cảnh OpenGL trong chủ đề hiện tại
Thật không may, tôi gặp lỗi sau khi gọi số AssetManager.update()
từ chuỗi đó.
com.badlogic.gdx.utils.GdxRuntimeException: java.lang.RuntimeException: No OpenGL context found in the current thread.
Tôi đã thử run
ing thread nền trong các chủ đề chính trong đầu và chỉ đối phó với vài màn hình đầu tiên, và tất cả mọi thứ hoạt động tốt. Tôi cũng có thể thay đổi thuật toán để chỉ tải mọi thứ vào bộ nhớ từ đầu trong cùng một chuỗi và cũng hoạt động. Tuy nhiên, không hoạt động trong chuỗi nền.
Khi tôi chạy ứng dụng này trên Android với OpenGL ES 2.0 (linh hoạt theo cách kỳ lạ) thay vì trên Windows, mọi thứ đều chạy tốt và thậm chí tôi có thể lấy kích thước pixel của hình ảnh - nhưng kết cấu hiển thị màu đen .
Tìm kiếm của tôi đã cho tôi biết rằng đây là vấn đề của ngữ cảnh OpenGL OpenGL bị ràng buộc vào một chuỗi duy nhất, nhưng không được nhiều thứ khác. Điều này giải thích lý do tại sao tất cả mọi thứ hoạt động khi tôi xô nó trong chủ đề chính, và không phải khi tôi đặt nó trong một chủ đề khác. Làm cách nào để khắc phục sự cố ngữ cảnh này?
-1 cho các ngữ cảnh OpenGL không chính xác nêu rõ không thể được sử dụng từ nhiều luồng. Hoàn toàn có thể tách ra một bối cảnh OpenGL từ một sợi chỉ và đính kèm nó vào một luồng khác. – datenwolf
Cách tách và đính kèm ngữ cảnh vào một luồng khác bằng cách sử dụng nó theo nghĩa đa luồng? Bản thân bối cảnh chỉ có thể được truy cập bởi một luồng đơn tại một thời điểm trừ khi bạn muốn thử và sử dụng khóa để đạt được nó. Tuy nhiên, điều đó đánh bại toàn bộ vấn đề. – Jyro117
Bạn đã xác nhận rằng ngữ cảnh OpenGL chỉ có thể được sử dụng từ chuỗi chỉ hiển thị, ngụ ý rằng chỉ chuỗi đã tạo ngữ cảnh mới có thể sử dụng nó. BTW: bạn có thể tạo một số bối cảnh OpenGL trên cùng một drawable với các không gian tên đối tượng được chia sẻ và đính kèm từng chủ đề riêng. Điều này cho phép bạn đa luồng. – datenwolf