EGLObjectHandle.java revision 84bbeb9e0c9c185a22d4882b79e0bc8a598642ab
16b1e838fc16d397359f82c3a4f5700f1ed7dd910Thomas Tafertshofer/*
26b1e838fc16d397359f82c3a4f5700f1ed7dd910Thomas Tafertshofer**
36b1e838fc16d397359f82c3a4f5700f1ed7dd910Thomas Tafertshofer** Copyright 2012, The Android Open Source Project
46b1e838fc16d397359f82c3a4f5700f1ed7dd910Thomas Tafertshofer**
56b1e838fc16d397359f82c3a4f5700f1ed7dd910Thomas Tafertshofer** Licensed under the Apache License, Version 2.0 (the "License");
66b1e838fc16d397359f82c3a4f5700f1ed7dd910Thomas Tafertshofer** you may not use this file except in compliance with the License.
76b1e838fc16d397359f82c3a4f5700f1ed7dd910Thomas Tafertshofer** You may obtain a copy of the License at
86b1e838fc16d397359f82c3a4f5700f1ed7dd910Thomas Tafertshofer**
96b1e838fc16d397359f82c3a4f5700f1ed7dd910Thomas Tafertshofer**     http://www.apache.org/licenses/LICENSE-2.0
106b1e838fc16d397359f82c3a4f5700f1ed7dd910Thomas Tafertshofer**
116b1e838fc16d397359f82c3a4f5700f1ed7dd910Thomas Tafertshofer** Unless required by applicable law or agreed to in writing, software
126b1e838fc16d397359f82c3a4f5700f1ed7dd910Thomas Tafertshofer** distributed under the License is distributed on an "AS IS" BASIS,
136b1e838fc16d397359f82c3a4f5700f1ed7dd910Thomas Tafertshofer** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
146b1e838fc16d397359f82c3a4f5700f1ed7dd910Thomas Tafertshofer** See the License for the specific language governing permissions and
156b1e838fc16d397359f82c3a4f5700f1ed7dd910Thomas Tafertshofer** limitations under the License.
166b1e838fc16d397359f82c3a4f5700f1ed7dd910Thomas Tafertshofer*/
176b1e838fc16d397359f82c3a4f5700f1ed7dd910Thomas Tafertshofer
186b1e838fc16d397359f82c3a4f5700f1ed7dd910Thomas Tafertshoferpackage android.opengl;
196b1e838fc16d397359f82c3a4f5700f1ed7dd910Thomas Tafertshofer
206b1e838fc16d397359f82c3a4f5700f1ed7dd910Thomas Tafertshofer/**
219b18b515909354d7b48c8ebc33ec38e2c6bbdf37Thomas Tafertshofer * Base class for wrapped EGL objects.
229b18b515909354d7b48c8ebc33ec38e2c6bbdf37Thomas Tafertshofer *
236b1e838fc16d397359f82c3a4f5700f1ed7dd910Thomas Tafertshofer */
246b1e838fc16d397359f82c3a4f5700f1ed7dd910Thomas Tafertshoferpublic abstract class EGLObjectHandle {
2584bbeb9e0c9c185a22d4882b79e0bc8a598642abAshok Bhat    private final long mHandle;
266b1e838fc16d397359f82c3a4f5700f1ed7dd910Thomas Tafertshofer
2784bbeb9e0c9c185a22d4882b79e0bc8a598642abAshok Bhat    // TODO Deprecate EGLObjectHandle(int) method
289b18b515909354d7b48c8ebc33ec38e2c6bbdf37Thomas Tafertshofer    protected EGLObjectHandle(int handle) {
296b1e838fc16d397359f82c3a4f5700f1ed7dd910Thomas Tafertshofer        mHandle = handle;
306b1e838fc16d397359f82c3a4f5700f1ed7dd910Thomas Tafertshofer    }
3184bbeb9e0c9c185a22d4882b79e0bc8a598642abAshok Bhat    // TODO Unhide the EGLObjectHandle(long) method
3284bbeb9e0c9c185a22d4882b79e0bc8a598642abAshok Bhat    /**
3384bbeb9e0c9c185a22d4882b79e0bc8a598642abAshok Bhat     * {@hide}
3484bbeb9e0c9c185a22d4882b79e0bc8a598642abAshok Bhat     */
3584bbeb9e0c9c185a22d4882b79e0bc8a598642abAshok Bhat    protected EGLObjectHandle(long handle) {
3684bbeb9e0c9c185a22d4882b79e0bc8a598642abAshok Bhat        mHandle = handle;
3784bbeb9e0c9c185a22d4882b79e0bc8a598642abAshok Bhat    }
3884bbeb9e0c9c185a22d4882b79e0bc8a598642abAshok Bhat    // TODO Deprecate getHandle() method in favor of getNativeHandle()
399b18b515909354d7b48c8ebc33ec38e2c6bbdf37Thomas Tafertshofer    /**
409b18b515909354d7b48c8ebc33ec38e2c6bbdf37Thomas Tafertshofer     * Returns the native handle of the wrapped EGL object. This handle can be
419b18b515909354d7b48c8ebc33ec38e2c6bbdf37Thomas Tafertshofer     * cast to the corresponding native type on the native side.
429b18b515909354d7b48c8ebc33ec38e2c6bbdf37Thomas Tafertshofer     *
439b18b515909354d7b48c8ebc33ec38e2c6bbdf37Thomas Tafertshofer     * For example, EGLDisplay dpy = (EGLDisplay)handle;
449b18b515909354d7b48c8ebc33ec38e2c6bbdf37Thomas Tafertshofer     *
459b18b515909354d7b48c8ebc33ec38e2c6bbdf37Thomas Tafertshofer     * @return the native handle of the wrapped EGL object.
469b18b515909354d7b48c8ebc33ec38e2c6bbdf37Thomas Tafertshofer     */
476b1e838fc16d397359f82c3a4f5700f1ed7dd910Thomas Tafertshofer    public int getHandle() {
4884bbeb9e0c9c185a22d4882b79e0bc8a598642abAshok Bhat        if ((mHandle & 0xffffffffL) != mHandle) {
4984bbeb9e0c9c185a22d4882b79e0bc8a598642abAshok Bhat            throw new UnsupportedOperationException();
5084bbeb9e0c9c185a22d4882b79e0bc8a598642abAshok Bhat        }
5184bbeb9e0c9c185a22d4882b79e0bc8a598642abAshok Bhat        return (int)mHandle;
526b1e838fc16d397359f82c3a4f5700f1ed7dd910Thomas Tafertshofer    }
539b18b515909354d7b48c8ebc33ec38e2c6bbdf37Thomas Tafertshofer
5484bbeb9e0c9c185a22d4882b79e0bc8a598642abAshok Bhat    // TODO Unhide getNativeHandle() method
5584bbeb9e0c9c185a22d4882b79e0bc8a598642abAshok Bhat    /**
5684bbeb9e0c9c185a22d4882b79e0bc8a598642abAshok Bhat     * {@hide}
5784bbeb9e0c9c185a22d4882b79e0bc8a598642abAshok Bhat     */
5884bbeb9e0c9c185a22d4882b79e0bc8a598642abAshok Bhat    public long getNativeHandle() {
5984bbeb9e0c9c185a22d4882b79e0bc8a598642abAshok Bhat        return mHandle;
6084bbeb9e0c9c185a22d4882b79e0bc8a598642abAshok Bhat    }
619b18b515909354d7b48c8ebc33ec38e2c6bbdf37Thomas Tafertshofer    @Override
629b18b515909354d7b48c8ebc33ec38e2c6bbdf37Thomas Tafertshofer    public int hashCode() {
6384bbeb9e0c9c185a22d4882b79e0bc8a598642abAshok Bhat        /*
6484bbeb9e0c9c185a22d4882b79e0bc8a598642abAshok Bhat         * Based on the algorithm suggested in
6584bbeb9e0c9c185a22d4882b79e0bc8a598642abAshok Bhat         * http://developer.android.com/reference/java/lang/Object.html
6684bbeb9e0c9c185a22d4882b79e0bc8a598642abAshok Bhat         */
6784bbeb9e0c9c185a22d4882b79e0bc8a598642abAshok Bhat        int result = 17;
6884bbeb9e0c9c185a22d4882b79e0bc8a598642abAshok Bhat        result = 31 * result + (int) (mHandle ^ (mHandle >>> 32));
6984bbeb9e0c9c185a22d4882b79e0bc8a598642abAshok Bhat        return result;
709b18b515909354d7b48c8ebc33ec38e2c6bbdf37Thomas Tafertshofer    }
716b1e838fc16d397359f82c3a4f5700f1ed7dd910Thomas Tafertshofer}
72