summaryrefslogtreecommitdiff
path: root/libs/rs/rsProgramVertex.cpp
diff options
context:
space:
mode:
author Jason Sams <rjsams@android.com> 2009-07-21 12:20:54 -0700
committer Jason Sams <rjsams@android.com> 2009-07-21 12:20:54 -0700
commitee41112e1539de95596600fd2c6dada5d275217f (patch)
tree669b445213276b1f57f4f35f314fb9997b88c26c /libs/rs/rsProgramVertex.cpp
parentc7b0dba641d5417286caa3694e70b039012d1e91 (diff)
Enable light sources and update film test app.
Diffstat (limited to 'libs/rs/rsProgramVertex.cpp')
-rw-r--r--libs/rs/rsProgramVertex.cpp38
1 files changed, 36 insertions, 2 deletions
diff --git a/libs/rs/rsProgramVertex.cpp b/libs/rs/rsProgramVertex.cpp
index 4089507bbb98..417ba6aed13e 100644
--- a/libs/rs/rsProgramVertex.cpp
+++ b/libs/rs/rsProgramVertex.cpp
@@ -28,6 +28,7 @@ ProgramVertex::ProgramVertex(Element *in, Element *out) :
Program(in, out)
{
mTextureMatrixEnable = false;
+ mLightCount = 0;
}
ProgramVertex::~ProgramVertex()
@@ -54,8 +55,29 @@ void ProgramVertex::setupGL()
glLoadIdentity();
}
- //logMatrix("prog", &f[RS_PROGRAM_VERTEX_PROJECTION_OFFSET]);
- //logMatrix("model", &f[RS_PROGRAM_VERTEX_MODELVIEW_OFFSET]);
+
+ LOGE("lights %i ", mLightCount);
+ glMatrixMode(GL_MODELVIEW);
+ glLoadIdentity();
+ if (mLightCount) {
+ int v = 1;
+ glEnable(GL_LIGHTING);
+ glLightModelxv(GL_LIGHT_MODEL_TWO_SIDE, &v);
+ for (uint32_t ct = 0; ct < mLightCount; ct++) {
+ const Light *l = mLights[ct].get();
+ glEnable(GL_LIGHT0 + ct);
+ l->setupGL(ct);
+ }
+ for (uint32_t ct = mLightCount; ct < MAX_LIGHTS; ct++) {
+ glDisable(GL_LIGHT0 + ct);
+ }
+ } else {
+ glDisable(GL_LIGHTING);
+ }
+
+ if (!f) {
+ LOGE("Must bind constants to vertex program");
+ }
glMatrixMode(GL_PROJECTION);
glLoadMatrixf(&f[RS_PROGRAM_VERTEX_PROJECTION_OFFSET]);
@@ -73,6 +95,14 @@ void ProgramVertex::bindAllocation(uint32_t slot, Allocation *a)
mConstants[slot].set(a);
}
+void ProgramVertex::addLight(const Light *l)
+{
+ if (mLightCount < MAX_LIGHTS) {
+ mLights[mLightCount].set(l);
+ mLightCount++;
+ }
+}
+
ProgramVertexState::ProgramVertexState()
{
@@ -136,6 +166,10 @@ void rsi_ProgramVertexSetTextureMatrixEnable(Context *rsc, bool enable)
rsc->mStateVertex.mPV->setTextureMatrixEnable(enable);
}
+void rsi_ProgramVertexAddLight(Context *rsc, RsLight light)
+{
+ rsc->mStateVertex.mPV->addLight(static_cast<const Light *>(light));
+}
}