Merge "Preview seperating RenderScript into RenderScript and RenderScriptGL"
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
127
graphics/java/android/renderscript/RenderScriptGL.java
Normal file
127
graphics/java/android/renderscript/RenderScriptGL.java
Normal file
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -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 },
|
||||
|
||||
@@ -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 *);
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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, useDepth);
|
||||
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, true, useDepth);
|
||||
return rsc;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user