Loading graphics/java/android/renderscript/RSTextureView.java 0 → 100644 +171 −0 Original line number Diff line number Diff line /* * Copyright (C) 2011 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.renderscript; import java.io.Writer; import java.util.ArrayList; import java.util.concurrent.Semaphore; import android.content.Context; import android.graphics.SurfaceTexture; import android.os.Handler; import android.os.Message; import android.util.AttributeSet; import android.util.Log; import android.view.TextureView; /** * The Surface View for a graphics renderscript (RenderScriptGL) to draw on. * * @hide */ public class RSTextureView extends TextureView implements TextureView.SurfaceTextureListener { private RenderScriptGL mRS; private SurfaceTexture mSurfaceTexture; /** * Standard View constructor. In order to render something, you * must call {@link android.opengl.GLSurfaceView#setRenderer} to * register a renderer. */ public RSTextureView(Context context) { super(context); init(); //Log.v(RenderScript.LOG_TAG, "RSSurfaceView"); } /** * Standard View constructor. In order to render something, you * must call {@link android.opengl.GLSurfaceView#setRenderer} to * register a renderer. */ public RSTextureView(Context context, AttributeSet attrs) { super(context, attrs); init(); //Log.v(RenderScript.LOG_TAG, "RSSurfaceView"); } private void init() { setSurfaceTextureListener(this); //android.util.Log.e("rs", "getSurfaceTextureListerner " + getSurfaceTextureListener()); } @Override public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) { //Log.e(RenderScript.LOG_TAG, "onSurfaceTextureAvailable"); mSurfaceTexture = surface; if (mRS != null) { mRS.setSurfaceTexture(mSurfaceTexture, width, height); } } @Override public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) { //Log.e(RenderScript.LOG_TAG, "onSurfaceTextureSizeChanged"); mSurfaceTexture = surface; if (mRS != null) { mRS.setSurfaceTexture(mSurfaceTexture, width, height); } } @Override public void onSurfaceTextureDestroyed(SurfaceTexture surface) { //Log.e(RenderScript.LOG_TAG, "onSurfaceTextureDestroyed"); mSurfaceTexture = surface; if (mRS != null) { mRS.setSurfaceTexture(null, 0, 0); } } /** * Inform the view that the activity is paused. The owner of this view must * call this method when the activity is paused. Calling this method will * pause the rendering thread. * Must not be called before a renderer has been set. */ public void pause() { if(mRS != null) { mRS.pause(); } } /** * Inform the view that the activity is resumed. The owner of this view must * call this method when the activity is resumed. Calling this method will * recreate the OpenGL display and resume the rendering * thread. * Must not be called before a renderer has been set. */ public void resume() { if(mRS != null) { mRS.resume(); } } /** * Create a new RenderScriptGL object and attach it to the * TextureView if present. * * * @param sc The RS surface config to create. * * @return RenderScriptGL The new object created. */ public RenderScriptGL createRenderScriptGL(RenderScriptGL.SurfaceConfig sc) { RenderScriptGL rs = new RenderScriptGL(this.getContext(), sc); setRenderScriptGL(rs); if (mSurfaceTexture != null) { mRS.setSurfaceTexture(mSurfaceTexture, getWidth(), getHeight()); } return rs; } /** * Destroy the RenderScriptGL object associated with this * TextureView. */ public void destroyRenderScriptGL() { mRS.destroy(); mRS = null; } /** * Set a new RenderScriptGL object. This also will attach the * new object to the TextureView if present. * * @param rs The new RS object. */ public void setRenderScriptGL(RenderScriptGL rs) { mRS = rs; if (mSurfaceTexture != null) { mRS.setSurfaceTexture(mSurfaceTexture, getWidth(), getHeight()); } } /** * Returns the previously set RenderScriptGL object. * * @return RenderScriptGL */ public RenderScriptGL getRenderScriptGL() { return mRS; } } graphics/java/android/renderscript/RenderScript.java +6 −0 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import android.content.Context; import android.content.res.AssetManager; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.SurfaceTexture; import android.os.Process; import android.util.Log; import android.view.Surface; Loading Loading @@ -109,6 +110,11 @@ public class RenderScript { validate(); rsnContextSetSurface(mContext, w, h, sur); } native void rsnContextSetSurfaceTexture(int con, int w, int h, SurfaceTexture sur); synchronized void nContextSetSurfaceTexture(int w, int h, SurfaceTexture sur) { validate(); rsnContextSetSurfaceTexture(mContext, w, h, sur); } native void rsnContextSetPriority(int con, int p); synchronized void nContextSetPriority(int p) { validate(); Loading graphics/java/android/renderscript/RenderScriptGL.java +22 −6 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import android.content.Context; import android.graphics.PixelFormat; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.SurfaceTexture; import android.util.Log; import android.view.Surface; import android.view.SurfaceHolder; Loading @@ -35,7 +36,6 @@ import android.view.SurfaceView; * the screen. **/ public class RenderScriptGL extends RenderScript { private Surface mSurface; int mWidth; int mHeight; Loading Loading @@ -160,7 +160,6 @@ public class RenderScriptGL extends RenderScript { super(ctx); mSurfaceConfig = new SurfaceConfig(sc); mSurface = null; mWidth = 0; mHeight = 0; mDev = nDeviceCreate(); Loading Loading @@ -189,14 +188,31 @@ public class RenderScriptGL extends RenderScript { */ public void setSurface(SurfaceHolder sur, int w, int h) { validate(); Surface s = null; if (sur != null) { mSurface = sur.getSurface(); } else { mSurface = null; s = sur.getSurface(); } mWidth = w; mHeight = h; nContextSetSurface(w, h, mSurface); nContextSetSurface(w, h, s); } /** * Bind an os surface * * @hide * * @param w * @param h * @param sur */ public void setSurfaceTexture(SurfaceTexture sur, int w, int h) { validate(); //android.util.Log.v("rs", "set surface " + sur + " w=" + w + ", h=" + h); mWidth = w; mHeight = h; nContextSetSurfaceTexture(w, h, sur); } /** Loading graphics/jni/android_renderscript_RenderScript.cpp +22 −1 Original line number Diff line number Diff line /* * Copyright (C) 2006 The Android Open Source Project * Copyright (C) 2011 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. Loading Loading @@ -43,6 +43,9 @@ #include <RenderScript.h> #include <RenderScriptEnv.h> #include <gui/SurfaceTexture.h> #include <gui/SurfaceTextureClient.h> #include <android_runtime/android_graphics_SurfaceTexture.h> //#define LOG_API LOGE #define LOG_API(...) Loading Loading @@ -200,6 +203,23 @@ nContextSetSurface(JNIEnv *_env, jobject _this, RsContext con, jint width, jint rsContextSetSurface(con, width, height, window); } static void nContextSetSurfaceTexture(JNIEnv *_env, jobject _this, RsContext con, jint width, jint height, jobject sur) { LOG_API("nContextSetSurfaceTexture, con(%p), width(%i), height(%i), surface(%p)", con, width, height, (Surface *)sur); sp<ANativeWindow> window; sp<SurfaceTexture> st; if (sur == 0) { } else { st = SurfaceTexture_getSurfaceTexture(_env, sur); window = new SurfaceTextureClient(st); } rsContextSetSurface(con, width, height, window.get()); } static void nContextDestroy(JNIEnv *_env, jobject _this, RsContext con) { Loading Loading @@ -1197,6 +1217,7 @@ static JNINativeMethod methods[] = { {"rsnContextFinish", "(I)V", (void*)nContextFinish }, {"rsnContextSetPriority", "(II)V", (void*)nContextSetPriority }, {"rsnContextSetSurface", "(IIILandroid/view/Surface;)V", (void*)nContextSetSurface }, {"rsnContextSetSurfaceTexture", "(IIILandroid/graphics/SurfaceTexture;)V", (void*)nContextSetSurfaceTexture }, {"rsnContextDestroy", "(I)V", (void*)nContextDestroy }, {"rsnContextDump", "(II)V", (void*)nContextDump }, {"rsnContextPause", "(I)V", (void*)nContextPause }, Loading libs/rs/driver/rsdGL.cpp +5 −0 Original line number Diff line number Diff line Loading @@ -321,8 +321,13 @@ bool rsdGLSetSurface(const Context *rsc, uint32_t w, uint32_t h, RsNativeWindow dc->gl.height = 1; } if (dc->gl.wndSurface != NULL) { dc->gl.wndSurface->decStrong(NULL); } dc->gl.wndSurface = (ANativeWindow *)sur; if (dc->gl.wndSurface != NULL) { dc->gl.wndSurface->incStrong(NULL); dc->gl.width = w; dc->gl.height = h; Loading Loading
graphics/java/android/renderscript/RSTextureView.java 0 → 100644 +171 −0 Original line number Diff line number Diff line /* * Copyright (C) 2011 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.renderscript; import java.io.Writer; import java.util.ArrayList; import java.util.concurrent.Semaphore; import android.content.Context; import android.graphics.SurfaceTexture; import android.os.Handler; import android.os.Message; import android.util.AttributeSet; import android.util.Log; import android.view.TextureView; /** * The Surface View for a graphics renderscript (RenderScriptGL) to draw on. * * @hide */ public class RSTextureView extends TextureView implements TextureView.SurfaceTextureListener { private RenderScriptGL mRS; private SurfaceTexture mSurfaceTexture; /** * Standard View constructor. In order to render something, you * must call {@link android.opengl.GLSurfaceView#setRenderer} to * register a renderer. */ public RSTextureView(Context context) { super(context); init(); //Log.v(RenderScript.LOG_TAG, "RSSurfaceView"); } /** * Standard View constructor. In order to render something, you * must call {@link android.opengl.GLSurfaceView#setRenderer} to * register a renderer. */ public RSTextureView(Context context, AttributeSet attrs) { super(context, attrs); init(); //Log.v(RenderScript.LOG_TAG, "RSSurfaceView"); } private void init() { setSurfaceTextureListener(this); //android.util.Log.e("rs", "getSurfaceTextureListerner " + getSurfaceTextureListener()); } @Override public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) { //Log.e(RenderScript.LOG_TAG, "onSurfaceTextureAvailable"); mSurfaceTexture = surface; if (mRS != null) { mRS.setSurfaceTexture(mSurfaceTexture, width, height); } } @Override public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) { //Log.e(RenderScript.LOG_TAG, "onSurfaceTextureSizeChanged"); mSurfaceTexture = surface; if (mRS != null) { mRS.setSurfaceTexture(mSurfaceTexture, width, height); } } @Override public void onSurfaceTextureDestroyed(SurfaceTexture surface) { //Log.e(RenderScript.LOG_TAG, "onSurfaceTextureDestroyed"); mSurfaceTexture = surface; if (mRS != null) { mRS.setSurfaceTexture(null, 0, 0); } } /** * Inform the view that the activity is paused. The owner of this view must * call this method when the activity is paused. Calling this method will * pause the rendering thread. * Must not be called before a renderer has been set. */ public void pause() { if(mRS != null) { mRS.pause(); } } /** * Inform the view that the activity is resumed. The owner of this view must * call this method when the activity is resumed. Calling this method will * recreate the OpenGL display and resume the rendering * thread. * Must not be called before a renderer has been set. */ public void resume() { if(mRS != null) { mRS.resume(); } } /** * Create a new RenderScriptGL object and attach it to the * TextureView if present. * * * @param sc The RS surface config to create. * * @return RenderScriptGL The new object created. */ public RenderScriptGL createRenderScriptGL(RenderScriptGL.SurfaceConfig sc) { RenderScriptGL rs = new RenderScriptGL(this.getContext(), sc); setRenderScriptGL(rs); if (mSurfaceTexture != null) { mRS.setSurfaceTexture(mSurfaceTexture, getWidth(), getHeight()); } return rs; } /** * Destroy the RenderScriptGL object associated with this * TextureView. */ public void destroyRenderScriptGL() { mRS.destroy(); mRS = null; } /** * Set a new RenderScriptGL object. This also will attach the * new object to the TextureView if present. * * @param rs The new RS object. */ public void setRenderScriptGL(RenderScriptGL rs) { mRS = rs; if (mSurfaceTexture != null) { mRS.setSurfaceTexture(mSurfaceTexture, getWidth(), getHeight()); } } /** * Returns the previously set RenderScriptGL object. * * @return RenderScriptGL */ public RenderScriptGL getRenderScriptGL() { return mRS; } }
graphics/java/android/renderscript/RenderScript.java +6 −0 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import android.content.Context; import android.content.res.AssetManager; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.SurfaceTexture; import android.os.Process; import android.util.Log; import android.view.Surface; Loading Loading @@ -109,6 +110,11 @@ public class RenderScript { validate(); rsnContextSetSurface(mContext, w, h, sur); } native void rsnContextSetSurfaceTexture(int con, int w, int h, SurfaceTexture sur); synchronized void nContextSetSurfaceTexture(int w, int h, SurfaceTexture sur) { validate(); rsnContextSetSurfaceTexture(mContext, w, h, sur); } native void rsnContextSetPriority(int con, int p); synchronized void nContextSetPriority(int p) { validate(); Loading
graphics/java/android/renderscript/RenderScriptGL.java +22 −6 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import android.content.Context; import android.graphics.PixelFormat; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.SurfaceTexture; import android.util.Log; import android.view.Surface; import android.view.SurfaceHolder; Loading @@ -35,7 +36,6 @@ import android.view.SurfaceView; * the screen. **/ public class RenderScriptGL extends RenderScript { private Surface mSurface; int mWidth; int mHeight; Loading Loading @@ -160,7 +160,6 @@ public class RenderScriptGL extends RenderScript { super(ctx); mSurfaceConfig = new SurfaceConfig(sc); mSurface = null; mWidth = 0; mHeight = 0; mDev = nDeviceCreate(); Loading Loading @@ -189,14 +188,31 @@ public class RenderScriptGL extends RenderScript { */ public void setSurface(SurfaceHolder sur, int w, int h) { validate(); Surface s = null; if (sur != null) { mSurface = sur.getSurface(); } else { mSurface = null; s = sur.getSurface(); } mWidth = w; mHeight = h; nContextSetSurface(w, h, mSurface); nContextSetSurface(w, h, s); } /** * Bind an os surface * * @hide * * @param w * @param h * @param sur */ public void setSurfaceTexture(SurfaceTexture sur, int w, int h) { validate(); //android.util.Log.v("rs", "set surface " + sur + " w=" + w + ", h=" + h); mWidth = w; mHeight = h; nContextSetSurfaceTexture(w, h, sur); } /** Loading
graphics/jni/android_renderscript_RenderScript.cpp +22 −1 Original line number Diff line number Diff line /* * Copyright (C) 2006 The Android Open Source Project * Copyright (C) 2011 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. Loading Loading @@ -43,6 +43,9 @@ #include <RenderScript.h> #include <RenderScriptEnv.h> #include <gui/SurfaceTexture.h> #include <gui/SurfaceTextureClient.h> #include <android_runtime/android_graphics_SurfaceTexture.h> //#define LOG_API LOGE #define LOG_API(...) Loading Loading @@ -200,6 +203,23 @@ nContextSetSurface(JNIEnv *_env, jobject _this, RsContext con, jint width, jint rsContextSetSurface(con, width, height, window); } static void nContextSetSurfaceTexture(JNIEnv *_env, jobject _this, RsContext con, jint width, jint height, jobject sur) { LOG_API("nContextSetSurfaceTexture, con(%p), width(%i), height(%i), surface(%p)", con, width, height, (Surface *)sur); sp<ANativeWindow> window; sp<SurfaceTexture> st; if (sur == 0) { } else { st = SurfaceTexture_getSurfaceTexture(_env, sur); window = new SurfaceTextureClient(st); } rsContextSetSurface(con, width, height, window.get()); } static void nContextDestroy(JNIEnv *_env, jobject _this, RsContext con) { Loading Loading @@ -1197,6 +1217,7 @@ static JNINativeMethod methods[] = { {"rsnContextFinish", "(I)V", (void*)nContextFinish }, {"rsnContextSetPriority", "(II)V", (void*)nContextSetPriority }, {"rsnContextSetSurface", "(IIILandroid/view/Surface;)V", (void*)nContextSetSurface }, {"rsnContextSetSurfaceTexture", "(IIILandroid/graphics/SurfaceTexture;)V", (void*)nContextSetSurfaceTexture }, {"rsnContextDestroy", "(I)V", (void*)nContextDestroy }, {"rsnContextDump", "(II)V", (void*)nContextDump }, {"rsnContextPause", "(I)V", (void*)nContextPause }, Loading
libs/rs/driver/rsdGL.cpp +5 −0 Original line number Diff line number Diff line Loading @@ -321,8 +321,13 @@ bool rsdGLSetSurface(const Context *rsc, uint32_t w, uint32_t h, RsNativeWindow dc->gl.height = 1; } if (dc->gl.wndSurface != NULL) { dc->gl.wndSurface->decStrong(NULL); } dc->gl.wndSurface = (ANativeWindow *)sur; if (dc->gl.wndSurface != NULL) { dc->gl.wndSurface->incStrong(NULL); dc->gl.width = w; dc->gl.height = h; Loading