FileDocCategorySizeDatePackage
EGLContextImpl.javaAPI DocphoneME MR2 API (J2ME)3968Wed May 02 18:00:48 BST 2007javax.microedition.khronos.egl

EGLContextImpl.java

/*
 * Copyright  1990-2007 Sun Microsystems, Inc. All Rights Reserved.
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER
 * 
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License version
 * 2 only, as published by the Free Software Foundation.
 * 
 * This program is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * General Public License version 2 for more details (a copy is
 * included at /legal/license.txt).
 * 
 * You should have received a copy of the GNU General Public License
 * version 2 along with this work; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
 * 02110-1301 USA
 * 
 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
 * Clara, CA 95054 or visit www.sun.com if you need additional
 * information or have any questions.
 */

package javax.microedition.khronos.egl;

import javax.microedition.khronos.opengles.GL;
import java.util.Hashtable;
import java.lang.ref.WeakReference;

import com.sun.jsr239.ContextAccess;
import com.sun.jsr239.GLConfiguration;
import com.sun.jsr239.GL10Impl;
import com.sun.jsr239.GL11Impl;

final class EGLContextImpl extends EGLContext implements ContextAccess {
    
    private static final Hashtable byId = new Hashtable(); 

    private GL gl = null; 
    private int nativeId;

    private Thread boundThread = null;
    private EGLDisplayImpl display = null;
    private EGLSurface drawSurface = null;
    private EGLSurface readSurface = null;
    private boolean destroyed = false;

    public EGLContextImpl(int nativeId) {
        synchronized (byId) {
            this.nativeId = nativeId;
            byId.put(new Integer(nativeId), new WeakReference(this));
        }
    }

    public int nativeId() {
	return nativeId;
    }

    public Thread getBoundThread() {
        return boundThread;
    }

    public void setBoundThread(Thread boundThread) {
        this.boundThread = boundThread;
    }

    public EGLDisplay getDisplay() {
        return display;
    }

    public void setDisplay(EGLDisplayImpl display) {
        this.display = display;
    }

    public EGLSurface getDrawSurface() {
        return drawSurface;
    }

    public void setDrawSurface(EGLSurfaceImpl drawSurface) {
        this.drawSurface = drawSurface;
    }

    public EGLSurface getReadSurface() {
        return readSurface;
    }

    EGLSurfaceImpl getDrawSurfaceImpl() {
        return (EGLSurfaceImpl)getDrawSurface();
    }

    public void setReadSurface(EGLSurfaceImpl readSurface) {
        this.readSurface = readSurface;
    }

    public void setDestroyed(boolean destroyed) {
        this.destroyed = destroyed;
    }

    public boolean isDestroyed() {
        return destroyed;
    }

    public static EGLContextImpl getInstance(int nativeId) {
        synchronized (byId) {
            WeakReference ref = (WeakReference)byId.get(new Integer(nativeId));
            EGLContextImpl context = ref != null ?
                    (EGLContextImpl)ref.get() : null;
            if (context == null) {
                return new EGLContextImpl(nativeId);
            } else {
                return context;
            }
        }
    }

    public GL getGL() {
	synchronized (this) {
	    if (gl == null) {
                if (!GLConfiguration.supportsGL11) {
                    gl = new GL10Impl(this);
                } else {
                    gl = new GL11Impl(this);
                }
	    }
	    return gl;
	}
    }

    /**
     * For debugging purposes, prints the native context ID.
     */
    public String toString() {
  	return "EGLContextImpl[" + nativeId + "]";
    }

    public void dispose() {
	synchronized (byId) {
	    byId.remove(new Integer(nativeId));
	    this.nativeId = 0;
	}
    }
}