diff options
author | 2010-07-12 15:50:32 -0700 | |
---|---|---|
committer | 2010-07-12 15:50:32 -0700 | |
commit | 80a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41ae (patch) | |
tree | 1add64a0dee5bf0ac1c98b63bd3b43648ca7af50 /libs/rs/rsProgramRaster.cpp | |
parent | cefd8d9588230577356d24597acc04ce1e276582 (diff) |
Work on synchronizing a3d created files and java layer.
Adding culling to ProgramRaster
Change-Id: I58ccc82d37edc9539289d5eba44ea0e720874af5
Diffstat (limited to 'libs/rs/rsProgramRaster.cpp')
-rw-r--r-- | libs/rs/rsProgramRaster.cpp | 50 |
1 files changed, 47 insertions, 3 deletions
diff --git a/libs/rs/rsProgramRaster.cpp b/libs/rs/rsProgramRaster.cpp index 76638409aa09..5b6937017294 100644 --- a/libs/rs/rsProgramRaster.cpp +++ b/libs/rs/rsProgramRaster.cpp @@ -42,6 +42,7 @@ ProgramRaster::ProgramRaster(Context *rsc, mLineSmooth = lineSmooth; mPointSprite = pointSprite; mLineWidth = 1.0f; + mCull = RS_CULL_BACK; } ProgramRaster::~ProgramRaster() @@ -51,14 +52,22 @@ ProgramRaster::~ProgramRaster() void ProgramRaster::setLineWidth(float s) { mLineWidth = s; + mDirty = true; +} + +void ProgramRaster::setCullMode(RsCullMode mode) +{ + mCull = mode; + mDirty = true; } void ProgramRaster::setupGL(const Context *rsc, ProgramRasterState *state) { - if (state->mLast.get() == this) { + if (state->mLast.get() == this && !mDirty) { return; } state->mLast.set(this); + mDirty = false; if (mPointSmooth) { glEnable(GL_POINT_SMOOTH); @@ -82,14 +91,43 @@ void ProgramRaster::setupGL(const Context *rsc, ProgramRasterState *state) } #endif //ANDROID_RS_BUILD_FOR_HOST } + + switch(mCull) { + case RS_CULL_BACK: + glEnable(GL_CULL_FACE); + glCullFace(GL_BACK); + break; + case RS_CULL_FRONT: + glEnable(GL_CULL_FACE); + glCullFace(GL_FRONT); + break; + case RS_CULL_NONE: + glDisable(GL_CULL_FACE); + break; + } } void ProgramRaster::setupGL2(const Context *rsc, ProgramRasterState *state) { - if (state->mLast.get() == this) { + if (state->mLast.get() == this && !mDirty) { return; } state->mLast.set(this); + mDirty = false; + + switch(mCull) { + case RS_CULL_BACK: + glEnable(GL_CULL_FACE); + glCullFace(GL_BACK); + break; + case RS_CULL_FRONT: + glEnable(GL_CULL_FACE); + glCullFace(GL_FRONT); + break; + case RS_CULL_NONE: + glDisable(GL_CULL_FACE); + break; + } } void ProgramRaster::serialize(OStream *stream) const @@ -126,7 +164,7 @@ void ProgramRasterState::deinit(Context *rsc) namespace android { namespace renderscript { -RsProgramRaster rsi_ProgramRasterCreate(Context * rsc, RsElement in, RsElement out, +RsProgramRaster rsi_ProgramRasterCreate(Context * rsc, bool pointSmooth, bool lineSmooth, bool pointSprite) @@ -145,6 +183,12 @@ void rsi_ProgramRasterSetLineWidth(Context * rsc, RsProgramRaster vpr, float s) pr->setLineWidth(s); } +void rsi_ProgramRasterSetCullMode(Context * rsc, RsProgramRaster vpr, RsCullMode mode) +{ + ProgramRaster *pr = static_cast<ProgramRaster *>(vpr); + pr->setCullMode(mode); +} + } } |