J'ai un OpenGL SurfaceView. Ceci doit maintenant être mis à jour par un événement externe arrivant sur un socket de réseau, ce socket de réseau s'exécute dans un thread externe, puisqu'il doit écouter à tout moment sur le port pour le trafic entrant, quand du trafic arrive un nouvel objet OpenGL devrait être créé et montré sur l'écran. Pour autant que je comprenne tout ce truc OpenGL, vous ne pouvez pas changer les objets d'un thread externe, mais avec queueevent() vous avez une chance. Mon code ressemble ce qui suit, mais unfortunatelly il isn ot travail:Android: OpenGL dans plusieurs threads
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();
}
}
Ainsi l'ensemble() est appelée lorsque le trafic réseau arrive, mais unfortunatelly la variable locale c est pas mis à jour pour la méthode onDrawFrame() . Pourquoi est-ce le cas, comment puis-je y parvenir?
Quelqu'un peut-il m'aider s'il vous plaît?
Merci beaucoup Cordialement
Et qu'est-ce que GameMain? Quand est-ce que() est appelé? Quelle est la durée de vie prévue de votre fil d'écoute de socket? Vous devez définir des points d'arrêt et rechercher dans le débogueur ... –