diff options
Diffstat (limited to 'libs/rs/rsProgramRaster.cpp')
-rw-r--r-- | libs/rs/rsProgramRaster.cpp | 128 |
1 files changed, 55 insertions, 73 deletions
diff --git a/libs/rs/rsProgramRaster.cpp b/libs/rs/rsProgramRaster.cpp index 13887d1..f2b5b9a 100644 --- a/libs/rs/rsProgramRaster.cpp +++ b/libs/rs/rsProgramRaster.cpp @@ -14,136 +14,118 @@ * limitations under the License. */ +#ifndef ANDROID_RS_BUILD_FOR_HOST #include "rsContext.h" -#include "rsProgramRaster.h" - #include <GLES/gl.h> #include <GLES/glext.h> +#else +#include "rsContextHostStub.h" +#include <OpenGL/gl.h> +#include <OpenGl/glext.h> +#endif //ANDROID_RS_BUILD_FOR_HOST + +#include "rsProgramRaster.h" using namespace android; using namespace android::renderscript; -ProgramRaster::ProgramRaster(Context *rsc, - bool pointSmooth, - bool lineSmooth, - bool pointSprite) : - Program(rsc) -{ - mAllocFile = __FILE__; - mAllocLine = __LINE__; +ProgramRaster::ProgramRaster(Context *rsc, bool pointSmooth, + bool lineSmooth, bool pointSprite) + : Program(rsc) { + mPointSmooth = pointSmooth; mLineSmooth = lineSmooth; mPointSprite = pointSprite; - - mPointSize = 1.0f; mLineWidth = 1.0f; + mCull = RS_CULL_BACK; } -ProgramRaster::~ProgramRaster() -{ +ProgramRaster::~ProgramRaster() { } -void ProgramRaster::setLineWidth(float s) -{ +void ProgramRaster::setLineWidth(float s) { mLineWidth = s; + mDirty = true; } -void ProgramRaster::setPointSize(float s) -{ - mPointSize = s; +void ProgramRaster::setCullMode(RsCullMode mode) { + mCull = mode; + mDirty = true; } -void ProgramRaster::setupGL(const Context *rsc, ProgramRasterState *state) -{ - if (state->mLast.get() == this) { +void ProgramRaster::setupGL2(const Context *rsc, ProgramRasterState *state) { + if (state->mLast.get() == this && !mDirty) { return; } state->mLast.set(this); - - glPointSize(mPointSize); - if (mPointSmooth) { - glEnable(GL_POINT_SMOOTH); - } else { - glDisable(GL_POINT_SMOOTH); - } - - glLineWidth(mLineWidth); - if (mLineSmooth) { - glEnable(GL_LINE_SMOOTH); - } else { - glDisable(GL_LINE_SMOOTH); - } - - if (rsc->checkVersion1_1()) { - if (mPointSprite) { - glEnable(GL_POINT_SPRITE_OES); - } else { - glDisable(GL_POINT_SPRITE_OES); - } + 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::setupGL2(const Context *rsc, ProgramRasterState *state) -{ - if (state->mLast.get() == this) { - return; - } - state->mLast.set(this); +void ProgramRaster::serialize(OStream *stream) const { } +ProgramRaster *ProgramRaster::createFromStream(Context *rsc, IStream *stream) { + return NULL; +} - -ProgramRasterState::ProgramRasterState() -{ +ProgramRasterState::ProgramRasterState() { } -ProgramRasterState::~ProgramRasterState() -{ +ProgramRasterState::~ProgramRasterState() { } -void ProgramRasterState::init(Context *rsc, int32_t w, int32_t h) -{ +void ProgramRasterState::init(Context *rsc) { ProgramRaster *pr = new ProgramRaster(rsc, false, false, false); mDefault.set(pr); } -void ProgramRasterState::deinit(Context *rsc) -{ +void ProgramRasterState::deinit(Context *rsc) { mDefault.clear(); mLast.clear(); } - namespace android { namespace renderscript { -RsProgramRaster rsi_ProgramRasterCreate(Context * rsc, RsElement in, RsElement out, +RsProgramRaster rsi_ProgramRasterCreate(Context * rsc, bool pointSmooth, bool lineSmooth, - bool pointSprite) -{ - ProgramRaster *pr = new ProgramRaster(rsc, - pointSmooth, - lineSmooth, - pointSprite); + bool pointSprite) { + ProgramRaster *pr = new ProgramRaster(rsc, pointSmooth, + lineSmooth, pointSprite); pr->incUserRef(); return pr; } -void rsi_ProgramRasterSetPointSize(Context * rsc, RsProgramRaster vpr, float s) -{ +void rsi_ProgramRasterSetLineWidth(Context * rsc, + RsProgramRaster vpr, + float s) { ProgramRaster *pr = static_cast<ProgramRaster *>(vpr); - pr->setPointSize(s); + pr->setLineWidth(s); } -void rsi_ProgramRasterSetLineWidth(Context * rsc, RsProgramRaster vpr, float s) -{ +void rsi_ProgramRasterSetCullMode(Context * rsc, + RsProgramRaster vpr, + RsCullMode mode) { ProgramRaster *pr = static_cast<ProgramRaster *>(vpr); - pr->setLineWidth(s); + pr->setCullMode(mode); } - } } |