From ebfb436a49673693b98469683451bd9ede797557 Mon Sep 17 00:00:00 2001 From: Jason Sams Date: Wed, 23 Sep 2009 13:57:02 -0700 Subject: Add raster object to control point and line params. Add flag to force SW rendering. --- libs/rs/rsProgramRaster.cpp | 137 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 137 insertions(+) create mode 100644 libs/rs/rsProgramRaster.cpp (limited to 'libs/rs/rsProgramRaster.cpp') diff --git a/libs/rs/rsProgramRaster.cpp b/libs/rs/rsProgramRaster.cpp new file mode 100644 index 000000000000..0f5ec5134a4c --- /dev/null +++ b/libs/rs/rsProgramRaster.cpp @@ -0,0 +1,137 @@ +/* + * Copyright (C) 2009 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. + */ + +#include "rsContext.h" +#include "rsProgramRaster.h" + +#include +#include + +using namespace android; +using namespace android::renderscript; + + +ProgramRaster::ProgramRaster(Element *in, + Element *out, + bool pointSmooth, + bool lineSmooth, + bool pointSprite) : + Program(in, out) +{ + mPointSmooth = pointSmooth; + mLineSmooth = lineSmooth; + mPointSprite = pointSprite; + + mPointSize = 1.0f; + mLineWidth = 1.0f; +} + +ProgramRaster::~ProgramRaster() +{ +} + +void ProgramRaster::setLineWidth(float s) +{ + mLineWidth = s; +} + +void ProgramRaster::setPointSize(float s) +{ + mPointSize = s; +} + +void ProgramRaster::setupGL(const Context *rsc, ProgramRasterState *state) +{ + if (state->mLast.get() == this) { + return; + } + state->mLast.set(this); + + LOGE("setup %i %i %i %f %f", mPointSmooth, mLineSmooth, mPointSprite, mPointSize, mLineWidth); + + glPointSize(mPointSize); + if (mPointSmooth) { + glEnable(GL_POINT_SMOOTH); + } else { + glDisable(GL_POINT_SMOOTH); + } + + glLineWidth(mLineWidth); + if (mLineSmooth) { + glEnable(GL_LINE_SMOOTH); + } else { + glEnable(GL_LINE_SMOOTH); + } + + if (rsc->checkVersion1_1()) { + if (mPointSprite) { + glEnable(GL_POINT_SPRITE_OES); + } else { + glDisable(GL_POINT_SPRITE_OES); + } + } +} + + + +ProgramRasterState::ProgramRasterState() +{ +} + +ProgramRasterState::~ProgramRasterState() +{ +} + +void ProgramRasterState::init(Context *rsc, int32_t w, int32_t h) +{ + ProgramRaster *pr = new ProgramRaster(NULL, NULL, false, false, false); + mDefault.set(pr); +} + + +namespace android { +namespace renderscript { + +RsProgramRaster rsi_ProgramRasterCreate(Context * rsc, RsElement in, RsElement out, + bool pointSmooth, + bool lineSmooth, + bool pointSprite) +{ + ProgramRaster *pr = new ProgramRaster(static_cast(in), + static_cast(out), + pointSmooth, + lineSmooth, + pointSprite); + pr->incUserRef(); + return pr; +} + +void rsi_ProgramRasterSetPointSize(Context * rsc, RsProgramRaster vpr, float s) +{ + ProgramRaster *pr = static_cast(vpr); + pr->setPointSize(s); +} + +void rsi_ProgramRasterSetLineWidth(Context * rsc, RsProgramRaster vpr, float s) +{ + ProgramRaster *pr = static_cast(vpr); + pr->setLineWidth(s); +} + + +} +} + -- cgit v1.2.3-59-g8ed1b