Enable light sources and update film test app.
diff --git a/rsProgramVertex.cpp b/rsProgramVertex.cpp
index 4089507..417ba6a 100644
--- a/rsProgramVertex.cpp
+++ b/rsProgramVertex.cpp
@@ -28,6 +28,7 @@
Program(in, out)
{
mTextureMatrixEnable = false;
+ mLightCount = 0;
}
ProgramVertex::~ProgramVertex()
@@ -54,8 +55,29 @@
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 @@
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 @@
rsc->mStateVertex.mPV->setTextureMatrixEnable(enable);
}
+void rsi_ProgramVertexAddLight(Context *rsc, RsLight light)
+{
+ rsc->mStateVertex.mPV->addLight(static_cast<const Light *>(light));
+}
}