У меня OpenGL SurfaceView. Теперь это необходимо обновить с помощью какого-либо внешнего события, приходящего через сетевой сокет, этот сетевой сокет работает во внешнем потоке, поскольку ему необходимо все время прослушивать порт для входящего трафика, когда приходит некоторый трафик, должен быть создан новый объект OpenGL и показано на экране.
Насколько я понимаю все эти вещи OpenGL, вы не можете изменять объекты из внешнего потока, но с queueevent () у вас есть шанс.
Мой код выглядит следующим образом, но, к сожалению, он не работает:
public class GameMain extends Activity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
glView=new GameView(this);
setContentView(glView);
}
}
public class MyGLSurfaceView extends GLSurfaceView{
public MyGLSurfaceView(Context context) {
super(context);
renderer = new OpenGLRenderer();
this.setRenderer(renderer);
}
public void do(ServerSocket ss){
try{
while(true){
try {
ss.setSoTimeout(500);
Socket s = ss.accept();
renderer.set();
}catch(SocketTimeoutException e){}
}
}catch(Exception e){
handleException();
}
public void handleEvent(){
Thread t = new Thread(new Runnable() {
@Override
public void run() {
try{
ServerSocket ss = new ServerSocket(7070);
while(true){
get(ss);
}
}catch(Exception e){
e.printStackTrace();
}
}
});
queueEvent(t);
t.start();
}
}
public class OpenGLRenderer implements Rend{
Cube c = null;
public OpenGLRenderer(){
//inits
}
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
//.....
}
public void onDrawFrame(GL10 gl) {
if(c!=null)
doSth();
//....
}
public void set(){
c = new Cube();
}
}
Таким образом, метод set () вызывается при поступлении сетевого трафика, но, к сожалению, локальная переменная c не обновляется для метода onDrawFrame (). Почему это так, как я могу этого достичь?
Может кто-нибудь, пожалуйста, помогите мне!?
Большое спасибо
Привет