Глядя на коде, оказывается, что возможности объекта хранятся в Ненаследуемых ThreadLocal. Это означает, что объект возможностей, инициализированный/заданный в одном потоке, не будет доступен для другого потока. Я подозреваю, что это основная причина ваших проблем.
Кстати, GLContext class претензии к поточно-, но я не думаю, что это. Если вы посмотрите на исходный код getCapabilities()
(на связанной странице выше), он обращается к частному статическому с именем fast_path_cache
без какой-либо синхронизации, а затем относится к полям объекта. Если какой-то другой поток недавно изменился ... или находится в процессе изменения ... переменной или объекта, на который он ссылается, тогда этот поток может видеть устаревшие и непоследовательные значения.
Недостаточно просто синхронизировать код, который выполняет обновления. (И недостаточно просто сказать, что код является потокобезопасным в javadoc ...)
Если кто-то, кто использует эту библиотеку, хочет сообщить об этом сопровождающим, пожалуйста, не стесняйтесь это делать. Но ПОЖАЛУЙСТА, дважды проверьте мое чтение кода FIRST !!
Ну, как вы его инициализировали? Покажите нам какой-то код, мы любим код. – talnicolas