diff options
| author | Jason Sams <rjsams@android.com> | 2010-02-09 16:05:07 -0800 |
|---|---|---|
| committer | Jason Sams <rjsams@android.com> | 2010-02-09 16:05:07 -0800 |
| commit | 704ff64b099406bb328898a7443921f22dbffd6d (patch) | |
| tree | f5ec300c4d3bd6cdb6225909b4435d44a4a226dd | |
| parent | 5bec3aa2c6bcde7f81ca77b0887296bf05a745c8 (diff) | |
| download | frameworks_base-704ff64b099406bb328898a7443921f22dbffd6d.zip frameworks_base-704ff64b099406bb328898a7443921f22dbffd6d.tar.gz frameworks_base-704ff64b099406bb328898a7443921f22dbffd6d.tar.bz2 | |
Preview seperating RenderScript into RenderScript and RenderScriptGL
| -rw-r--r-- | graphics/java/android/renderscript/RSSurfaceView.java | 8 | ||||
| -rw-r--r-- | graphics/java/android/renderscript/RenderScript.java | 114 | ||||
| -rw-r--r-- | graphics/java/android/renderscript/RenderScriptGL.java | 127 | ||||
| -rw-r--r-- | graphics/jni/android_renderscript_RenderScript.cpp | 18 | ||||
| -rw-r--r-- | libs/rs/RenderScript.h | 3 | ||||
| -rw-r--r-- | libs/rs/java/Film/src/com/android/film/FilmRS.java | 4 | ||||
| -rw-r--r-- | libs/rs/java/Film/src/com/android/film/FilmView.java | 3 | ||||
| -rw-r--r-- | libs/rs/java/Fountain/src/com/android/fountain/FountainRS.java | 4 | ||||
| -rw-r--r-- | libs/rs/java/Fountain/src/com/android/fountain/FountainView.java | 3 | ||||
| -rw-r--r-- | libs/rs/java/ImageProcessing/src/com/android/rs/image/ImageProcessingActivity.java | 5 | ||||
| -rw-r--r-- | libs/rs/rsContext.cpp | 76 | ||||
| -rw-r--r-- | libs/rs/rsContext.h | 3 |
12 files changed, 229 insertions, 139 deletions
diff --git a/graphics/java/android/renderscript/RSSurfaceView.java b/graphics/java/android/renderscript/RSSurfaceView.java index ad1bb54..1d3f82d 100644 --- a/graphics/java/android/renderscript/RSSurfaceView.java +++ b/graphics/java/android/renderscript/RSSurfaceView.java @@ -36,7 +36,7 @@ import android.view.SurfaceView; **/ public class RSSurfaceView extends SurfaceView implements SurfaceHolder.Callback { private SurfaceHolder mSurfaceHolder; - private RenderScript mRS; + private RenderScriptGL mRS; /** * Standard View constructor. In order to render something, you @@ -146,13 +146,13 @@ public class RSSurfaceView extends SurfaceView implements SurfaceHolder.Callback // ---------------------------------------------------------------------- - public RenderScript createRenderScript(boolean useDepth, boolean forceSW) { + public RenderScriptGL createRenderScript(boolean useDepth, boolean forceSW) { Log.v(RenderScript.LOG_TAG, "createRenderScript"); - mRS = new RenderScript(useDepth, forceSW); + mRS = new RenderScriptGL(useDepth, forceSW); return mRS; } - public RenderScript createRenderScript(boolean useDepth) { + public RenderScriptGL createRenderScript(boolean useDepth) { return createRenderScript(useDepth, false); } diff --git a/graphics/java/android/renderscript/RenderScript.java b/graphics/java/android/renderscript/RenderScript.java index 29361af..84b1a70 100644 --- a/graphics/java/android/renderscript/RenderScript.java +++ b/graphics/java/android/renderscript/RenderScript.java @@ -31,11 +31,9 @@ import android.view.Surface; **/ public class RenderScript { static final String LOG_TAG = "RenderScript_jni"; - private static final boolean DEBUG = false; + protected static final boolean DEBUG = false; @SuppressWarnings({"UnusedDeclaration", "deprecation"}) - private static final boolean LOG_ENABLED = DEBUG ? Config.LOGD : Config.LOGV; - int mWidth; - int mHeight; + protected static final boolean LOG_ENABLED = DEBUG ? Config.LOGD : Config.LOGV; @@ -44,8 +42,8 @@ public class RenderScript { * field offsets. */ @SuppressWarnings({"FieldCanBeLocal", "UnusedDeclaration"}) - private static boolean sInitialized; - native private static void _nInit(); + protected static boolean sInitialized; + native protected static void _nInit(); static { @@ -64,7 +62,8 @@ public class RenderScript { native int nDeviceCreate(); native void nDeviceDestroy(int dev); native void nDeviceSetConfig(int dev, int param, int value); - native int nContextCreate(int dev, int ver, boolean useDepth); + native int nContextCreateGL(int dev, int ver, boolean useDepth); + native int nContextCreate(int dev, int ver); native void nContextDestroy(int con); native void nContextSetSurface(int w, int h, Surface sur); native void nContextSetPriority(int p); @@ -190,11 +189,10 @@ public class RenderScript { native void nAnimationAdd(float time, float[] attribs); native int nAnimationCreate(); - private int mDev; - private int mContext; + protected int mDev; + protected int mContext; @SuppressWarnings({"FieldCanBeLocal"}) - private Surface mSurface; - private MessageThread mMessageThread; + protected MessageThread mMessageThread; Element mElement_USER_U8; Element mElement_USER_I8; @@ -251,7 +249,7 @@ public class RenderScript { nContextSetPriority(p.mID); } - private static class MessageThread extends Thread { + protected static class MessageThread extends Thread { RenderScript mRS; boolean mRun = true; @@ -289,26 +287,18 @@ public class RenderScript { } } - public RenderScript(boolean useDepth, boolean forceSW) { - mSurface = null; - mWidth = 0; - mHeight = 0; - mDev = nDeviceCreate(); - if(forceSW) { - nDeviceSetConfig(mDev, 0, 1); - } - mContext = nContextCreate(mDev, 0, useDepth); - mMessageThread = new MessageThread(this); - mMessageThread.start(); - Element.initPredefined(this); + protected RenderScript() { } - public void contextSetSurface(int w, int h, Surface sur) { - mSurface = sur; - mWidth = w; - mHeight = h; - validate(); - nContextSetSurface(w, h, mSurface); + public static RenderScript create() { + RenderScript rs = new RenderScript(); + + rs.mDev = rs.nDeviceCreate(); + rs.mContext = rs.nContextCreate(rs.mDev, 0); + rs.mMessageThread = new MessageThread(rs); + rs.mMessageThread.start(); + Element.initPredefined(rs); + return rs; } public void contextDump(int bits) { @@ -332,77 +322,15 @@ public class RenderScript { return mContext != 0; } - void pause() { - validate(); - nContextPause(); - } - - void resume() { - validate(); - nContextResume(); - } - - ////////////////////////////////////////////////////////////////////////////////// - // File - - public class File extends BaseObj { - File(int id) { - super(RenderScript.this); - mID = id; - } - } - - public File fileOpen(String s) throws IllegalStateException, IllegalArgumentException - { - if(s.length() < 1) { - throw new IllegalArgumentException("fileOpen does not accept a zero length string."); - } - - try { - byte[] bytes = s.getBytes("UTF-8"); - int id = nFileOpen(bytes); - return new File(id); - } catch (java.io.UnsupportedEncodingException e) { - throw new RuntimeException(e); - } - } - - /////////////////////////////////////////////////////////////////////////////////// // Root state - private int safeID(BaseObj o) { + protected int safeID(BaseObj o) { if(o != null) { return o.mID; } return 0; } - - public void contextBindRootScript(Script s) { - validate(); - nContextBindRootScript(safeID(s)); - } - - public void contextBindProgramFragmentStore(ProgramStore p) { - validate(); - nContextBindProgramFragmentStore(safeID(p)); - } - - public void contextBindProgramFragment(ProgramFragment p) { - validate(); - nContextBindProgramFragment(safeID(p)); - } - - public void contextBindProgramRaster(ProgramRaster p) { - validate(); - nContextBindProgramRaster(safeID(p)); - } - - public void contextBindProgramVertex(ProgramVertex p) { - validate(); - nContextBindProgramVertex(safeID(p)); - } - } diff --git a/graphics/java/android/renderscript/RenderScriptGL.java b/graphics/java/android/renderscript/RenderScriptGL.java new file mode 100644 index 0000000..d1df23d --- /dev/null +++ b/graphics/java/android/renderscript/RenderScriptGL.java @@ -0,0 +1,127 @@ +/* + * Copyright (C) 2008 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.lang.reflect.Field; + +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.util.Config; +import android.util.Log; +import android.view.Surface; + + +/** + * @hide + * + **/ +public class RenderScriptGL extends RenderScript { + private Surface mSurface; + int mWidth; + int mHeight; + + + public RenderScriptGL(boolean useDepth, boolean forceSW) { + mSurface = null; + mWidth = 0; + mHeight = 0; + mDev = nDeviceCreate(); + if(forceSW) { + nDeviceSetConfig(mDev, 0, 1); + } + mContext = nContextCreateGL(mDev, 0, useDepth); + mMessageThread = new MessageThread(this); + mMessageThread.start(); + Element.initPredefined(this); + } + + public void contextSetSurface(int w, int h, Surface sur) { + mSurface = sur; + mWidth = w; + mHeight = h; + validate(); + nContextSetSurface(w, h, mSurface); + } + + + void pause() { + validate(); + nContextPause(); + } + + void resume() { + validate(); + nContextResume(); + } + + + public void contextBindRootScript(Script s) { + validate(); + nContextBindRootScript(safeID(s)); + } + + public void contextBindProgramFragmentStore(ProgramStore p) { + validate(); + nContextBindProgramFragmentStore(safeID(p)); + } + + public void contextBindProgramFragment(ProgramFragment p) { + validate(); + nContextBindProgramFragment(safeID(p)); + } + + public void contextBindProgramRaster(ProgramRaster p) { + validate(); + nContextBindProgramRaster(safeID(p)); + } + + public void contextBindProgramVertex(ProgramVertex p) { + validate(); + nContextBindProgramVertex(safeID(p)); + } + + + + + ////////////////////////////////////////////////////////////////////////////////// + // File + + public class File extends BaseObj { + File(int id) { + super(RenderScriptGL.this); + mID = id; + } + } + + public File fileOpen(String s) throws IllegalStateException, IllegalArgumentException + { + if(s.length() < 1) { + throw new IllegalArgumentException("fileOpen does not accept a zero length string."); + } + + try { + byte[] bytes = s.getBytes("UTF-8"); + int id = nFileOpen(bytes); + return new File(id); + } catch (java.io.UnsupportedEncodingException e) { + throw new RuntimeException(e); + } + } + +} + + diff --git a/graphics/jni/android_renderscript_RenderScript.cpp b/graphics/jni/android_renderscript_RenderScript.cpp index 7ded133..4d35c37 100644 --- a/graphics/jni/android_renderscript_RenderScript.cpp +++ b/graphics/jni/android_renderscript_RenderScript.cpp @@ -151,10 +151,17 @@ nDeviceSetConfig(JNIEnv *_env, jobject _this, jint dev, jint p, jint value) } static jint -nContextCreate(JNIEnv *_env, jobject _this, jint dev, jint ver, jboolean useDepth) +nContextCreate(JNIEnv *_env, jobject _this, jint dev, jint ver) { LOG_API("nContextCreate"); - return (jint)rsContextCreate((RsDevice)dev, ver, useDepth); + return (jint)rsContextCreate((RsDevice)dev, ver); +} + +static jint +nContextCreateGL(JNIEnv *_env, jobject _this, jint dev, jint ver, jboolean useDepth) +{ + LOG_API("nContextCreateGL"); + return (jint)rsContextCreateGL((RsDevice)dev, ver, useDepth); } static void @@ -260,7 +267,7 @@ nElementCreate2(JNIEnv *_env, jobject _this, jintArray _ids, jobjectArray _names { int fieldCount = _env->GetArrayLength(_ids); RsContext con = (RsContext)(_env->GetIntField(_this, gContextId)); - LOG_API("nElementCreate, con(%p), type(%i), kind(%i), norm(%i), size(%i)", con, type, kind, norm, size); + LOG_API("nElementCreate2, con(%p)", con); jint *ids = _env->GetIntArrayElements(_ids, NULL); const char ** nameArray = (const char **)calloc(fieldCount, sizeof(char *)); @@ -1089,7 +1096,7 @@ nProgramFragmentCreate(JNIEnv *_env, jobject _this, jintArray params) jint *paramPtr = _env->GetIntArrayElements(params, NULL); jint paramLen = _env->GetArrayLength(params); - LOG_API("nProgramFragmentCreate, con(%p), paramLen(%i)", con, shaderLen, paramLen); + LOG_API("nProgramFragmentCreate, con(%p), paramLen(%i)", con, paramLen); jint ret = (jint)rsProgramFragmentCreate(con, (uint32_t *)paramPtr, paramLen); _env->ReleaseIntArrayElements(params, paramPtr, JNI_ABORT); @@ -1332,7 +1339,8 @@ static JNINativeMethod methods[] = { {"nDeviceCreate", "()I", (void*)nDeviceCreate }, {"nDeviceDestroy", "(I)V", (void*)nDeviceDestroy }, {"nDeviceSetConfig", "(III)V", (void*)nDeviceSetConfig }, -{"nContextCreate", "(IIZ)I", (void*)nContextCreate }, +{"nContextCreate", "(II)I", (void*)nContextCreate }, +{"nContextCreateGL", "(IIZ)I", (void*)nContextCreateGL }, {"nContextSetPriority", "(I)V", (void*)nContextSetPriority }, {"nContextSetSurface", "(IILandroid/view/Surface;)V", (void*)nContextSetSurface }, {"nContextDestroy", "(I)V", (void*)nContextDestroy }, diff --git a/libs/rs/RenderScript.h b/libs/rs/RenderScript.h index 6662333..02667d8 100644 --- a/libs/rs/RenderScript.h +++ b/libs/rs/RenderScript.h @@ -55,7 +55,8 @@ RsDevice rsDeviceCreate(); void rsDeviceDestroy(RsDevice); void rsDeviceSetConfig(RsDevice, RsDeviceParam, int32_t value); -RsContext rsContextCreate(RsDevice, uint32_t version, bool useDepth); +RsContext rsContextCreate(RsDevice, uint32_t version); +RsContext rsContextCreateGL(RsDevice, uint32_t version, bool useDepth); void rsContextDestroy(RsContext); void rsObjDestroyOOB(RsContext, void *); diff --git a/libs/rs/java/Film/src/com/android/film/FilmRS.java b/libs/rs/java/Film/src/com/android/film/FilmRS.java index b80e619..7d04502 100644 --- a/libs/rs/java/Film/src/com/android/film/FilmRS.java +++ b/libs/rs/java/Film/src/com/android/film/FilmRS.java @@ -40,7 +40,7 @@ public class FilmRS { public FilmRS() { } - public void init(RenderScript rs, Resources res, int width, int height) { + public void init(RenderScriptGL rs, Resources res, int width, int height) { mRS = rs; mRes = res; initRS(); @@ -65,7 +65,7 @@ public class FilmRS { private Resources mRes; - private RenderScript mRS; + private RenderScriptGL mRS; private Script mScriptStrip; private Script mScriptImage; private Sampler mSampler; diff --git a/libs/rs/java/Film/src/com/android/film/FilmView.java b/libs/rs/java/Film/src/com/android/film/FilmView.java index 4a201fd..5bc2811 100644 --- a/libs/rs/java/Film/src/com/android/film/FilmView.java +++ b/libs/rs/java/Film/src/com/android/film/FilmView.java @@ -22,6 +22,7 @@ import java.util.concurrent.Semaphore; import android.renderscript.RSSurfaceView; import android.renderscript.RenderScript; +import android.renderscript.RenderScriptGL; import android.content.Context; import android.content.res.Resources; @@ -45,7 +46,7 @@ public class FilmView extends RSSurfaceView { //setFocusable(true); } - private RenderScript mRS; + private RenderScriptGL mRS; private FilmRS mRender; diff --git a/libs/rs/java/Fountain/src/com/android/fountain/FountainRS.java b/libs/rs/java/Fountain/src/com/android/fountain/FountainRS.java index 71f95a7..9356579 100644 --- a/libs/rs/java/Fountain/src/com/android/fountain/FountainRS.java +++ b/libs/rs/java/Fountain/src/com/android/fountain/FountainRS.java @@ -37,7 +37,7 @@ public class FountainRS { public FountainRS() { } - public void init(RenderScript rs, Resources res, int width, int height) { + public void init(RenderScriptGL rs, Resources res, int width, int height) { mRS = rs; mRes = res; initRS(); @@ -65,7 +65,7 @@ public class FountainRS { private Resources mRes; - private RenderScript mRS; + private RenderScriptGL mRS; private Allocation mIntAlloc; private SimpleMesh mSM; private SomeData mSD; diff --git a/libs/rs/java/Fountain/src/com/android/fountain/FountainView.java b/libs/rs/java/Fountain/src/com/android/fountain/FountainView.java index fcb93f4..dfd6a49 100644 --- a/libs/rs/java/Fountain/src/com/android/fountain/FountainView.java +++ b/libs/rs/java/Fountain/src/com/android/fountain/FountainView.java @@ -22,6 +22,7 @@ import java.util.concurrent.Semaphore; import android.renderscript.RSSurfaceView; import android.renderscript.RenderScript; +import android.renderscript.RenderScriptGL; import android.content.Context; import android.content.res.Resources; @@ -45,7 +46,7 @@ public class FountainView extends RSSurfaceView { //setFocusable(true); } - private RenderScript mRS; + private RenderScriptGL mRS; private FountainRS mRender; public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) { diff --git a/libs/rs/java/ImageProcessing/src/com/android/rs/image/ImageProcessingActivity.java b/libs/rs/java/ImageProcessing/src/com/android/rs/image/ImageProcessingActivity.java index 0ca00b3..568d3ab 100644 --- a/libs/rs/java/ImageProcessing/src/com/android/rs/image/ImageProcessingActivity.java +++ b/libs/rs/java/ImageProcessing/src/com/android/rs/image/ImageProcessingActivity.java @@ -126,14 +126,13 @@ public class ImageProcessingActivity extends Activity implements SurfaceHolder.C } public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { - mRS.contextSetSurface(width, height, holder.getSurface()); } public void surfaceDestroyed(SurfaceHolder holder) { } private Script.Invokable createScript() { - mRS = new RenderScript(false, false); + mRS = RenderScript.create(); mRS.mMessageCallback = new FilterCallback(); mParamsType = Type.createFromClass(mRS, Params.class, 1, "Parameters"); @@ -164,7 +163,7 @@ public class ImageProcessingActivity extends Activity implements SurfaceHolder.C sb.setType(true, 2); Script.Invokable invokable = sb.addInvokable("main"); sb.setScript(getResources(), R.raw.threshold); - sb.setRoot(true); + //sb.setRoot(true); ScriptC script = sb.create(); script.bindAllocation(mParamsAllocation, 0); diff --git a/libs/rs/rsContext.cpp b/libs/rs/rsContext.cpp index 261b827..2e47ea3 100644 --- a/libs/rs/rsContext.cpp +++ b/libs/rs/rsContext.cpp @@ -289,15 +289,17 @@ void * Context::threadProc(void *vrsc) LOGE("pthread_setspecific %i", status); } - rsc->mStateRaster.init(rsc, rsc->mEGL.mWidth, rsc->mEGL.mHeight); - rsc->setRaster(NULL); - rsc->mStateVertex.init(rsc, rsc->mEGL.mWidth, rsc->mEGL.mHeight); - rsc->setVertex(NULL); - rsc->mStateFragment.init(rsc, rsc->mEGL.mWidth, rsc->mEGL.mHeight); - rsc->setFragment(NULL); - rsc->mStateFragmentStore.init(rsc, rsc->mEGL.mWidth, rsc->mEGL.mHeight); - rsc->setFragmentStore(NULL); - rsc->mStateVertexArray.init(rsc); + if (rsc->mIsGraphicsContext) { + rsc->mStateRaster.init(rsc, rsc->mEGL.mWidth, rsc->mEGL.mHeight); + rsc->setRaster(NULL); + rsc->mStateVertex.init(rsc, rsc->mEGL.mWidth, rsc->mEGL.mHeight); + rsc->setVertex(NULL); + rsc->mStateFragment.init(rsc, rsc->mEGL.mWidth, rsc->mEGL.mHeight); + rsc->setFragment(NULL); + rsc->mStateFragmentStore.init(rsc, rsc->mEGL.mWidth, rsc->mEGL.mHeight); + rsc->setFragmentStore(NULL); + rsc->mStateVertexArray.init(rsc); + } rsc->mRunning = true; bool mDraw = true; @@ -307,7 +309,7 @@ void * Context::threadProc(void *vrsc) mDraw &= (rsc->mWndSurface != NULL); uint32_t targetTime = 0; - if (mDraw) { + if (mDraw && rsc->mIsGraphicsContext) { targetTime = rsc->runRootScript(); mDraw = targetTime && !rsc->mPaused; rsc->timerSet(RS_TIMER_CLEAR_SWAP); @@ -329,23 +331,27 @@ void * Context::threadProc(void *vrsc) } LOGV("RS Thread exiting"); - rsc->mRaster.clear(); - rsc->mFragment.clear(); - rsc->mVertex.clear(); - rsc->mFragmentStore.clear(); - rsc->mRootScript.clear(); - rsc->mStateRaster.deinit(rsc); - rsc->mStateVertex.deinit(rsc); - rsc->mStateFragment.deinit(rsc); - rsc->mStateFragmentStore.deinit(rsc); + if (rsc->mIsGraphicsContext) { + rsc->mRaster.clear(); + rsc->mFragment.clear(); + rsc->mVertex.clear(); + rsc->mFragmentStore.clear(); + rsc->mRootScript.clear(); + rsc->mStateRaster.deinit(rsc); + rsc->mStateVertex.deinit(rsc); + rsc->mStateFragment.deinit(rsc); + rsc->mStateFragmentStore.deinit(rsc); + } ObjectBase::zeroAllUserRef(rsc); rsc->mObjDestroy.mNeedToEmpty = true; rsc->objDestroyOOBRun(); - pthread_mutex_lock(&gInitMutex); - rsc->deinitEGL(); - pthread_mutex_unlock(&gInitMutex); + if (rsc->mIsGraphicsContext) { + pthread_mutex_lock(&gInitMutex); + rsc->deinitEGL(); + pthread_mutex_unlock(&gInitMutex); + } LOGV("RS Thread exited"); return NULL; @@ -371,7 +377,7 @@ void Context::setPriority(int32_t p) #endif } -Context::Context(Device *dev, bool useDepth) +Context::Context(Device *dev, bool isGraphics, bool useDepth) { pthread_mutex_lock(&gInitMutex); @@ -383,6 +389,8 @@ Context::Context(Device *dev, bool useDepth) mPaused = false; mObjHead = NULL; memset(&mEGL, 0, sizeof(mEGL)); + memset(&mGL, 0, sizeof(mGL)); + mIsGraphicsContext = isGraphics; int status; pthread_attr_t threadAttr; @@ -454,7 +462,7 @@ Context::~Context() void Context::setSurface(uint32_t w, uint32_t h, Surface *sur) { - LOGV("setSurface %i %i %p", w, h, sur); + rsAssert(mIsGraphicsContext); EGLBoolean ret; if (mEGL.mSurface != NULL) { @@ -544,21 +552,25 @@ void Context::setSurface(uint32_t w, uint32_t h, Surface *sur) void Context::pause() { + rsAssert(mIsGraphicsContext); mPaused = true; } void Context::resume() { + rsAssert(mIsGraphicsContext); mPaused = false; } void Context::setRootScript(Script *s) { + rsAssert(mIsGraphicsContext); mRootScript.set(s); } void Context::setFragmentStore(ProgramFragmentStore *pfs) { + rsAssert(mIsGraphicsContext); if (pfs == NULL) { mFragmentStore.set(mStateFragmentStore.mDefault); } else { @@ -568,6 +580,7 @@ void Context::setFragmentStore(ProgramFragmentStore *pfs) void Context::setFragment(ProgramFragment *pf) { + rsAssert(mIsGraphicsContext); if (pf == NULL) { mFragment.set(mStateFragment.mDefault); } else { @@ -577,6 +590,7 @@ void Context::setFragment(ProgramFragment *pf) void Context::setRaster(ProgramRaster *pr) { + rsAssert(mIsGraphicsContext); if (pr == NULL) { mRaster.set(mStateRaster.mDefault); } else { @@ -586,6 +600,7 @@ void Context::setRaster(ProgramRaster *pr) void Context::setVertex(ProgramVertex *pv) { + rsAssert(mIsGraphicsContext); if (pv == NULL) { mVertex.set(mStateVertex.mDefault); } else { @@ -860,10 +875,19 @@ void rsi_ContextDump(Context *rsc, int32_t bits) } -RsContext rsContextCreate(RsDevice vdev, uint32_t version, bool useDepth) +RsContext rsContextCreate(RsDevice vdev, uint32_t version) +{ + LOGV("rsContextCreate %p", vdev); + Device * dev = static_cast<Device *>(vdev); + Context *rsc = new Context(dev, false, false); + return rsc; +} + +RsContext rsContextCreateGL(RsDevice vdev, uint32_t version, bool useDepth) { + LOGV("rsContextCreateGL %p, %i", vdev, useDepth); Device * dev = static_cast<Device *>(vdev); - Context *rsc = new Context(dev, useDepth); + Context *rsc = new Context(dev, true, useDepth); return rsc; } diff --git a/libs/rs/rsContext.h b/libs/rs/rsContext.h index 2edd16d..31d8cc8 100644 --- a/libs/rs/rsContext.h +++ b/libs/rs/rsContext.h @@ -51,7 +51,7 @@ namespace renderscript { class Context { public: - Context(Device *, bool useDepth); + Context(Device *, bool isGraphics, bool useDepth); ~Context(); static pthread_key_t gThreadTLSKey; @@ -201,6 +201,7 @@ protected: uint32_t mWidth; uint32_t mHeight; int32_t mThreadPriority; + bool mIsGraphicsContext; bool mRunning; bool mExit; |
