Pavlus, там нужно в потоке opengl es все делать. А paint навернае ж в другом потоке вызывается. А там нету других способов рисования для opengl es? А то сомниваюсь, что в обычном paint"е это делается.
DDDEN!SSS, вот именно, paint() может вызываться из любого потока, и совершенно не обязательно, что это будет именно основной поток приложения. Этот метод ведь не тобой вызывается.
Malcolm, а с run"ом тогда почему не работает? Потому-что Graphics из другого потока получен? И что на счет нехватки памяти при CreateWindowSurface? Это может быть из-за того что опять-же Graphics полученый ранее уже не действителен и указывает в заблоченый участок памяти?
Кстати, если всё писать в paint, то ошибка происходит во время первого вызова, как-раз после инициализации. Тот участок больше никогда не вызывается при следующих вызовах. Больше всего смущает то, что тред из контекста в реализации равен null и проверка идёт с ним, как-будто я не создавал контекст.
Pavlus, я бы просто посмотрел примеры, как другие делают, и танцевал от этого. Вообще, я немного запутался, что где у тебя там вызывается, на словах так сложно понять.
Pavlus, ну а что ты хочешь этим сказать? Как-то же пишут под OpenGL ES, значит, мы что-то делаем не так. Надо только узнать, как надо, вот и все. И самый логичный способ здесь - посмотреть, как делают другие.
Нашёл проблему... Это просто бред какой-то. eglCreateContext ставил ошибку связанную с атрибутами, но упорно создавал пустой контекст который и приводил к ошибке своим пустым ограничивающим тредом. Какого фига, спрашивается, его вообще создавать, если он пуст? NullPointerException потом сберег бы мне кучу времени и нервов.
Pavlus, вот это все недостатки C. OpenGL изначально писался с расчетом на C, а в этом языке никаких механизмов обработки исключений нет в принципе. А то, что у нас есть на Java - это просто binding, то есть вызов методов API на другом языке из Java, поэтому все проблемы перекочевали сюда.
5 мая 2011 в 01:13