1 /* 2 * Copyright (C) 2006 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.google.android.gles_jni; 18 19 import javax.microedition.khronos.egl.*; 20 21 import android.graphics.SurfaceTexture; 22 import android.view.Surface; 23 import android.view.SurfaceView; 24 import android.view.SurfaceHolder; 25 26 public class EGLImpl implements EGL10 { 27 private EGLContextImpl mContext = new EGLContextImpl(-1); 28 private EGLDisplayImpl mDisplay = new EGLDisplayImpl(-1); 29 private EGLSurfaceImpl mSurface = new EGLSurfaceImpl(-1); 30 eglInitialize(EGLDisplay display, int[] major_minor)31 public native boolean eglInitialize(EGLDisplay display, int[] major_minor); eglQueryContext(EGLDisplay display, EGLContext context, int attribute, int[] value)32 public native boolean eglQueryContext(EGLDisplay display, EGLContext context, int attribute, int[] value); eglQuerySurface(EGLDisplay display, EGLSurface surface, int attribute, int[] value)33 public native boolean eglQuerySurface(EGLDisplay display, EGLSurface surface, int attribute, int[] value); eglChooseConfig(EGLDisplay display, int[] attrib_list, EGLConfig[] configs, int config_size, int[] num_config)34 public native boolean eglChooseConfig(EGLDisplay display, int[] attrib_list, EGLConfig[] configs, int config_size, int[] num_config); eglGetConfigAttrib(EGLDisplay display, EGLConfig config, int attribute, int[] value)35 public native boolean eglGetConfigAttrib(EGLDisplay display, EGLConfig config, int attribute, int[] value); eglGetConfigs(EGLDisplay display, EGLConfig[] configs, int config_size, int[] num_config)36 public native boolean eglGetConfigs(EGLDisplay display, EGLConfig[] configs, int config_size, int[] num_config); eglGetError()37 public native int eglGetError(); eglDestroyContext(EGLDisplay display, EGLContext context)38 public native boolean eglDestroyContext(EGLDisplay display, EGLContext context); eglDestroySurface(EGLDisplay display, EGLSurface surface)39 public native boolean eglDestroySurface(EGLDisplay display, EGLSurface surface); eglMakeCurrent(EGLDisplay display, EGLSurface draw, EGLSurface read, EGLContext context)40 public native boolean eglMakeCurrent(EGLDisplay display, EGLSurface draw, EGLSurface read, EGLContext context); eglQueryString(EGLDisplay display, int name)41 public native String eglQueryString(EGLDisplay display, int name); eglSwapBuffers(EGLDisplay display, EGLSurface surface)42 public native boolean eglSwapBuffers(EGLDisplay display, EGLSurface surface); eglTerminate(EGLDisplay display)43 public native boolean eglTerminate(EGLDisplay display); eglCopyBuffers(EGLDisplay display, EGLSurface surface, Object native_pixmap)44 public native boolean eglCopyBuffers(EGLDisplay display, EGLSurface surface, Object native_pixmap); eglWaitGL()45 public native boolean eglWaitGL(); eglWaitNative(int engine, Object bindTarget)46 public native boolean eglWaitNative(int engine, Object bindTarget); 47 eglCreateContext(EGLDisplay display, EGLConfig config, EGLContext share_context, int[] attrib_list)48 public EGLContext eglCreateContext(EGLDisplay display, EGLConfig config, EGLContext share_context, int[] attrib_list) { 49 int eglContextId = _eglCreateContext(display, config, share_context, attrib_list); 50 if (eglContextId == 0) { 51 return EGL10.EGL_NO_CONTEXT; 52 } 53 return new EGLContextImpl( eglContextId ); 54 } 55 eglCreatePbufferSurface(EGLDisplay display, EGLConfig config, int[] attrib_list)56 public EGLSurface eglCreatePbufferSurface(EGLDisplay display, EGLConfig config, int[] attrib_list) { 57 int eglSurfaceId = _eglCreatePbufferSurface(display, config, attrib_list); 58 if (eglSurfaceId == 0) { 59 return EGL10.EGL_NO_SURFACE; 60 } 61 return new EGLSurfaceImpl( eglSurfaceId ); 62 } 63 eglCreatePixmapSurface(EGLDisplay display, EGLConfig config, Object native_pixmap, int[] attrib_list)64 public EGLSurface eglCreatePixmapSurface(EGLDisplay display, EGLConfig config, Object native_pixmap, int[] attrib_list) { 65 EGLSurfaceImpl sur = new EGLSurfaceImpl(); 66 _eglCreatePixmapSurface(sur, display, config, native_pixmap, attrib_list); 67 if (sur.mEGLSurface == 0) { 68 return EGL10.EGL_NO_SURFACE; 69 } 70 return sur; 71 } 72 eglCreateWindowSurface(EGLDisplay display, EGLConfig config, Object native_window, int[] attrib_list)73 public EGLSurface eglCreateWindowSurface(EGLDisplay display, EGLConfig config, Object native_window, int[] attrib_list) { 74 Surface sur = null; 75 if (native_window instanceof SurfaceView) { 76 SurfaceView surfaceView = (SurfaceView)native_window; 77 sur = surfaceView.getHolder().getSurface(); 78 } else if (native_window instanceof SurfaceHolder) { 79 SurfaceHolder holder = (SurfaceHolder)native_window; 80 sur = holder.getSurface(); 81 } 82 83 int eglSurfaceId; 84 if (sur != null) { 85 eglSurfaceId = _eglCreateWindowSurface(display, config, sur, attrib_list); 86 } else if (native_window instanceof SurfaceTexture) { 87 eglSurfaceId = _eglCreateWindowSurfaceTexture(display, config, 88 (SurfaceTexture) native_window, attrib_list); 89 } else { 90 throw new java.lang.UnsupportedOperationException( 91 "eglCreateWindowSurface() can only be called with an instance of " + 92 "SurfaceView, SurfaceHolder or SurfaceTexture at the moment, " + 93 "this will be fixed later."); 94 } 95 96 if (eglSurfaceId == 0) { 97 return EGL10.EGL_NO_SURFACE; 98 } 99 return new EGLSurfaceImpl( eglSurfaceId ); 100 } 101 eglGetDisplay(Object native_display)102 public synchronized EGLDisplay eglGetDisplay(Object native_display) { 103 int value = _eglGetDisplay(native_display); 104 if (value == 0) { 105 return EGL10.EGL_NO_DISPLAY; 106 } 107 if (mDisplay.mEGLDisplay != value) 108 mDisplay = new EGLDisplayImpl(value); 109 return mDisplay; 110 } 111 eglGetCurrentContext()112 public synchronized EGLContext eglGetCurrentContext() { 113 int value = _eglGetCurrentContext(); 114 if (value == 0) { 115 return EGL10.EGL_NO_CONTEXT; 116 } 117 if (mContext.mEGLContext != value) 118 mContext = new EGLContextImpl(value); 119 return mContext; 120 } 121 eglGetCurrentDisplay()122 public synchronized EGLDisplay eglGetCurrentDisplay() { 123 int value = _eglGetCurrentDisplay(); 124 if (value == 0) { 125 return EGL10.EGL_NO_DISPLAY; 126 } 127 if (mDisplay.mEGLDisplay != value) 128 mDisplay = new EGLDisplayImpl(value); 129 return mDisplay; 130 } 131 eglGetCurrentSurface(int readdraw)132 public synchronized EGLSurface eglGetCurrentSurface(int readdraw) { 133 int value = _eglGetCurrentSurface(readdraw); 134 if (value == 0) { 135 return EGL10.EGL_NO_SURFACE; 136 } 137 if (mSurface.mEGLSurface != value) 138 mSurface = new EGLSurfaceImpl(value); 139 return mSurface; 140 } 141 _eglCreateContext(EGLDisplay display, EGLConfig config, EGLContext share_context, int[] attrib_list)142 private native int _eglCreateContext(EGLDisplay display, EGLConfig config, EGLContext share_context, int[] attrib_list); _eglCreatePbufferSurface(EGLDisplay display, EGLConfig config, int[] attrib_list)143 private native int _eglCreatePbufferSurface(EGLDisplay display, EGLConfig config, int[] attrib_list); _eglCreatePixmapSurface(EGLSurface sur, EGLDisplay display, EGLConfig config, Object native_pixmap, int[] attrib_list)144 private native void _eglCreatePixmapSurface(EGLSurface sur, EGLDisplay display, EGLConfig config, Object native_pixmap, int[] attrib_list); _eglCreateWindowSurface(EGLDisplay display, EGLConfig config, Object native_window, int[] attrib_list)145 private native int _eglCreateWindowSurface(EGLDisplay display, EGLConfig config, Object native_window, int[] attrib_list); _eglCreateWindowSurfaceTexture(EGLDisplay display, EGLConfig config, Object native_window, int[] attrib_list)146 private native int _eglCreateWindowSurfaceTexture(EGLDisplay display, EGLConfig config, Object native_window, int[] attrib_list); _eglGetDisplay(Object native_display)147 private native int _eglGetDisplay(Object native_display); _eglGetCurrentContext()148 private native int _eglGetCurrentContext(); _eglGetCurrentDisplay()149 private native int _eglGetCurrentDisplay(); _eglGetCurrentSurface(int readdraw)150 private native int _eglGetCurrentSurface(int readdraw); 151 _nativeClassInit()152 native private static void _nativeClassInit(); _nativeClassInit()153 static { _nativeClassInit(); } 154 } 155