summaryrefslogtreecommitdiffstats
path: root/libs/rs/rsProgramRaster.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'libs/rs/rsProgramRaster.cpp')
-rw-r--r--libs/rs/rsProgramRaster.cpp128
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);
}
-
}
}