Add raster object to control point and line params. Add flag to force SW rendering.
diff --git a/libs/rs/rsContext.cpp b/libs/rs/rsContext.cpp
index 3e4c9af..ab8d065 100644
--- a/libs/rs/rsContext.cpp
+++ b/libs/rs/rsContext.cpp
@@ -46,6 +46,12 @@
configAttribsPtr += 2;
}
+ if (mDev->mForceSW) {
+ configAttribsPtr[0] = EGL_CONFIG_CAVEAT;
+ configAttribsPtr[1] = EGL_SLOW_CONFIG;
+ configAttribsPtr += 2;
+ }
+
configAttribsPtr[0] = EGL_NONE;
rsAssert(configAttribsPtr < (configAttribs + (sizeof(configAttribs) / sizeof(EGLint))));
@@ -116,7 +122,7 @@
eglQuerySurface(mEGL.mDisplay, mEGL.mSurface, EGL_HEIGHT, &mEGL.mHeight);
glViewport(0, 0, mEGL.mWidth, mEGL.mHeight);
glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
- glEnable(GL_POINT_SMOOTH);
+ //glEnable(GL_POINT_SMOOTH);
glClearColor(mRootScript->mEnviroment.mClearColor[0],
mRootScript->mEnviroment.mClearColor[1],
@@ -192,16 +198,10 @@
void Context::setupCheck()
{
- if (mFragmentStore.get()) {
- mFragmentStore->setupGL(this, &mStateFragmentStore);
- }
- if (mFragment.get()) {
- mFragment->setupGL(this, &mStateFragment);
- }
- if (mVertex.get()) {
- mVertex->setupGL(this, &mStateVertex);
- }
-
+ mFragmentStore->setupGL(this, &mStateFragmentStore);
+ mFragment->setupGL(this, &mStateFragment);
+ mRaster->setupGL(this, &mStateRaster);
+ mVertex->setupGL(this, &mStateVertex);
}
@@ -223,6 +223,8 @@
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);
@@ -350,6 +352,15 @@
}
}
+void Context::setRaster(ProgramRaster *pr)
+{
+ if (pr == NULL) {
+ mRaster.set(mStateRaster.mDefault);
+ } else {
+ mRaster.set(pr);
+ }
+}
+
void Context::allocationCheck(const Allocation *a)
{
mVertex->checkUpdatedAllocation(a);
@@ -519,6 +530,12 @@
rsc->setFragment(pf);
}
+void rsi_ContextBindProgramRaster(Context *rsc, RsProgramRaster vpr)
+{
+ ProgramRaster *pr = static_cast<ProgramRaster *>(vpr);
+ rsc->setRaster(pr);
+}
+
void rsi_ContextBindProgramVertex(Context *rsc, RsProgramVertex vpv)
{
ProgramVertex *pv = static_cast<ProgramVertex *>(vpv);