First of all, this is not a duplicate of other questions with similar
error, because in these questions, the solution of the error is that
there are various threads and there is a problem with various threads,
but i'm not using various threads, my problem is not the same.

I have a simple Square with openGL es 1 and Android 1.5. The square is
painted on the center of the screen.

I want that when the user press on the screen, or moves the finger on
the screen, the square get's moved to that position. For do this i
tryed with GLuUnProject, i tryed to obtain the opengl coordinate that
matches with the window XY coordinate touched with the finger (to
translate the polygon to that coordinate in the future), and i'm
writting the coordinates on the LogCat.

The coordinate's i'm receiving are not true cordinates, are wrong
coordinates, also i'm getting the error of the tittle of the question.
`ERROR/libEGL(206): call to OpenGL ES API with no current context`


The LogCat:

    11-07 09:43:40.012: DEBUG/XXXXXXXXX(203): X: -1.2918732
    11-07 09:43:40.023: DEBUG/XXXXXXXXX(203): Y: 0.050911963
    11-07 09:43:40.042: ERROR/libEGL(203): call to OpenGL ES API with
no current context
    11-07 09:43:40.042: ERROR/libEGL(203): call to OpenGL ES API with
no current context
    11-07 09:43:40.042: DEBUG/XXXXXXXXX(203): X: -1.2943747
    11-07 09:43:40.052: DEBUG/XXXXXXXXX(203): Y: 0.04674524
    11-07 09:43:40.152: ERROR/libEGL(203): call to OpenGL ES API with
no current context
    11-07 09:43:40.152: ERROR/libEGL(203): call to OpenGL ES API with
no current context
    11-07 09:43:40.172: DEBUG/XXXXXXXXX(203): X: 0.77298313
    11-07 09:43:40.182: DEBUG/XXXXXXXXX(203): Y: -0.5083332
    11-07 09:43:40.223: ERROR/libEGL(203): call to OpenGL ES API with
no current context
    11-07 09:43:40.223: ERROR/libEGL(203): call to OpenGL ES API with
no current context
    11-07 09:43:40.223: DEBUG/XXXXXXXXX(203): X: 0.77298313
    11-07 09:43:40.223: DEBUG/XXXXXXXXX(203): Y: -0.5083332
    11-07 09:43:40.402: ERROR/libEGL(203): call to OpenGL ES API with
no current context
    11-07 09:43:40.402: ERROR/libEGL(203): call to OpenGL ES API with
no current context
    11-07 09:43:40.402: DEBUG/XXXXXXXXX(203): X: -1.2943747
    11-07 09:43:40.402: DEBUG/XXXXXXXXX(203): Y: 0.04674524
    11-07 09:43:41.952: ERROR/libEGL(203): call to OpenGL ES API with
no current context
    11-07 09:43:41.952: ERROR/libEGL(203): call to OpenGL ES API with
no current context
    11-07 09:43:41.952: DEBUG/XXXXXXXXX(203): X: 0.77298313
    11-07 09:43:41.952: DEBUG/XXXXXXXXX(203): Y: -0.5083332
    11-07 09:43:42.042: ERROR/libEGL(203): call to OpenGL ES API with
no current context
    11-07 09:43:42.042: ERROR/libEGL(203): call to OpenGL ES API with
no current context




My code:




    public class MySurfaceView extends GLSurfaceView implements
Renderer {
        private float INITIAL_Z = -35.0f;
        private Context context;
        private Square square;
        private float xrot;                                     //X Rotation
        private float yrot;                                     //Y Rotation
        private float zrot;                                     //Z Rotation
        private float z = INITIAL_Z;                    //Profundidad en el eje 
Z
        private float x = 0.0f;                         //eje X
        private float y = 0.0f;                         //eje Y

    private MatrixGrabber mg = new MatrixGrabber(); //create the
matrix grabber object in your initialization code
    private GL10 MyGl; //To make gl variable accesible on all the
methods of the class
        byte horizontal=-1; //0: LEFT  1:CENTER  2:RIGHT
        byte vertical=-1; //0: TOP  1:CENTER  2:BOTTOM
        float startX=-1;
        float startY=-1;
        float xMovement=0.0f;
        float yMovement=0.0f;
        private boolean movement_mode=false;

        public MySurfaceView(Context context, Bitmap image, int width, byte
horizontal, byte vertical) {
                super(context);
                this.context = context;
                setEGLConfigChooser(8, 8, 8, 8, 16, 0); //fondo transparente
                getHolder().setFormat(PixelFormat.TRANSLUCENT); //fondo 
transparente
                //Transformamos esta clase en renderizadora
                this.setRenderer(this);
                //Request focus, para que los botones reaccionen
                this.requestFocus();
                this.setFocusableInTouchMode(true);
                square = new Square(image);
                this.horizontal=horizontal;
                this.vertical=vertical;
        }

        public void onSurfaceCreated(GL10 gl, EGLConfig config) {
                MyGl=gl;
                gl.glDisable(GL10.GL_DITHER);                           
//dithering OFF
                gl.glEnable(GL10.GL_TEXTURE_2D);                        
//Texture Mapping ON
                gl.glShadeModel(GL10.GL_SMOOTH);                        
//Smooth Shading
                gl.glClearDepthf(1.0f);                                         
//Depth Buffer Setup
                gl.glEnable(GL10.GL_DEPTH_TEST);                        //Depth 
Testing ON
                gl.glDepthFunc(GL10.GL_LEQUAL);
                gl.glClearColor(0,0,0,0); //fondo transparente
                gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_NICEST);
                //Cargamos la textura del cubo.
                square.loadGLTexture(gl, this.context);
        }

        public void onDrawFrame(GL10 gl) {
                //Limpiamos pantalla y Depth Buffer
                gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
                gl.glLoadIdentity();
                //Dibujado
                gl.glTranslatef(x, y, z);                       //Move z units 
into the screen
                //gl.glScalef(0.8f, 0.8f, 0.8f);                        
//Escalamos para que quepa en la
pantalla
                //Rotamos sobre los ejes.
                gl.glRotatef(xrot, 1.0f, 0.0f, 0.0f);   //X
                gl.glRotatef(yrot, 0.0f, 1.0f, 0.0f);   //Y
                gl.glRotatef(zrot, 0.0f, 0.0f, 1.0f);   //Z
                //Dibujamos el cuadrado
                square.draw(gl);
        }

        //si el surface cambia, resetea la vista, imagino que esto pasa
cuando cambias de modo portrait/landscape o sacas el teclado físico en
móviles tipo Droid.
        public void onSurfaceChanged(GL10 gl, int width, int height) {
                if(height == 0) {
                        height = 1;
                }
                gl.glViewport(0, 0, width, height);     //Reset Viewport
                gl.glMatrixMode(GL10.GL_PROJECTION);    //Select Projection 
Matrix
                gl.glLoadIdentity();                                    //Reset 
Projection Matrix
                //Aspect Ratio de la ventana
                GLU.gluPerspective(gl, 45.0f, (float)width / (float)height, 
0.1f,
100.0f);
                gl.glMatrixMode(GL10.GL_MODELVIEW);     //Select Modelview 
Matrix
                gl.glLoadIdentity();                                    //Reset 
Modelview Matrix
        }

        public boolean onTouchEvent(MotionEvent event) {
                float [] outputCoords=getOpenGLCoords(event.getX(), 
event.getY(),
0);
                x=(outputCoords[0]/outputCoords[3]);
                y=(outputCoords[1]/outputCoords[3]);
                //z=outputCoords[2]/outputCoords[3];
                Log.d("XXXXXXXXX", "X: "+x);
                Log.d("XXXXXXXXX", "Y: "+y);
        return true; //El evento ha sido manejado
        }

        public float[] getOpenGLCoords(float xWin,float yWin,float zWin)
        {
                int screenW=SectionManager.instance.getDisplayWidth();
                int screenH=SectionManager.instance.getDisplayHeight();
                //CODE FOR TRANSLATING FROM SCREEN COORDINATES TO OPENGL 
COORDINATES
                mg.getCurrentProjection(MyGl);
                mg.getCurrentModelView(MyGl);
            float [] modelMatrix = new float[16];
            float [] projMatrix = new float[16];
            modelMatrix=mg.mModelView;
            projMatrix=mg.mProjection;
            int [] mView = new int[4];
            mView[0] = 0;
            mView[1] = 0;
            mView[2] = screenW; //width
            mView[3] = screenH; //height
            float [] outputCoords = new float[4];
            GLU.gluUnProject(xWin, ((float)screenH)-yWin, zWin, modelMatrix,
0, projMatrix, 0, mView, 0, outputCoords, 0);
            return outputCoords;
        }
    }

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to