diff options
Diffstat (limited to 'libs/rs/rsProgramVertex.cpp')
-rw-r--r-- | libs/rs/rsProgramVertex.cpp | 74 |
1 files changed, 52 insertions, 22 deletions
diff --git a/libs/rs/rsProgramVertex.cpp b/libs/rs/rsProgramVertex.cpp index a2b2df4..5558007 100644 --- a/libs/rs/rsProgramVertex.cpp +++ b/libs/rs/rsProgramVertex.cpp @@ -14,13 +14,19 @@ * limitations under the License. */ +#ifndef ANDROID_RS_BUILD_FOR_HOST #include "rsContext.h" -#include "rsProgramVertex.h" - #include <GLES/gl.h> #include <GLES/glext.h> #include <GLES2/gl2.h> #include <GLES2/gl2ext.h> +#else +#include "rsContextHostStub.h" +#include <OpenGL/gl.h> +#include <OpenGL/glext.h> +#endif //ANDROID_RS_BUILD_FOR_HOST + +#include "rsProgramVertex.h" using namespace android; using namespace android::renderscript; @@ -81,9 +87,12 @@ void ProgramVertex::setupGL(const Context *rsc, ProgramVertexState *state) glMatrixMode(GL_MODELVIEW); glLoadIdentity(); if (mLightCount) { +#ifndef ANDROID_RS_BUILD_FOR_HOST // GLES Only int v = 0; 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); @@ -92,6 +101,7 @@ void ProgramVertex::setupGL(const Context *rsc, ProgramVertexState *state) for (uint32_t ct = mLightCount; ct < MAX_LIGHTS; ct++) { glDisable(GL_LIGHT0 + ct); } +#endif //ANDROID_RS_BUILD_FOR_HOST } else { glDisable(GL_LIGHTING); } @@ -128,6 +138,11 @@ void ProgramVertex::createShader() const Element *e = mConstantTypes[ct]->getElement(); for (uint32_t field=0; field < e->getFieldCount(); field++) { const Element *f = e->getField(field); + const char *fn = e->getFieldName(field); + + if (fn[0] == '#') { + continue; + } // Cannot be complex rsAssert(!f->getFieldCount()); @@ -140,7 +155,7 @@ void ProgramVertex::createShader() rsAssert(0); } - mShader.append(e->getFieldName(field)); + mShader.append(fn); mShader.append(";\n"); } } @@ -150,6 +165,11 @@ void ProgramVertex::createShader() const Element *e = mInputElements[ct].get(); for (uint32_t field=0; field < e->getFieldCount(); field++) { const Element *f = e->getField(field); + const char *fn = e->getFieldName(field); + + if (fn[0] == '#') { + continue; + } // Cannot be complex rsAssert(!f->getFieldCount()); @@ -162,17 +182,16 @@ void ProgramVertex::createShader() rsAssert(0); } - mShader.append(e->getFieldName(field)); + mShader.append(fn); mShader.append(";\n"); } } mShader.append(mUserShader); } else { - mShader.append("attribute vec4 ATTRIB_LegacyPosition;\n"); - mShader.append("attribute vec4 ATTRIB_LegacyColor;\n"); - mShader.append("attribute vec3 ATTRIB_LegacyNormal;\n"); - mShader.append("attribute float ATTRIB_LegacyPointSize;\n"); - mShader.append("attribute vec4 ATTRIB_LegacyTexture;\n"); + mShader.append("attribute vec4 ATTRIB_position;\n"); + mShader.append("attribute vec4 ATTRIB_color;\n"); + mShader.append("attribute vec3 ATTRIB_normal;\n"); + mShader.append("attribute vec4 ATTRIB_texture0;\n"); for (uint32_t ct=0; ct < mUniformCount; ct++) { mShader.append("uniform mat4 "); @@ -181,18 +200,15 @@ void ProgramVertex::createShader() } mShader.append("void main() {\n"); - mShader.append(" gl_Position = UNI_MVP * ATTRIB_LegacyPosition;\n"); - mShader.append(" gl_PointSize = ATTRIB_LegacyPointSize;\n"); + mShader.append(" gl_Position = UNI_MVP * ATTRIB_position;\n"); + mShader.append(" gl_PointSize = 1.0;\n"); - mShader.append(" varColor = ATTRIB_LegacyColor;\n"); + mShader.append(" varColor = ATTRIB_color;\n"); if (mTextureMatrixEnable) { - mShader.append(" varTex0 = UNI_TexMatrix * ATTRIB_LegacyTexture;\n"); + mShader.append(" varTex0 = UNI_TexMatrix * ATTRIB_texture0;\n"); } else { - mShader.append(" varTex0 = ATTRIB_LegacyTexture;\n"); + mShader.append(" varTex0 = ATTRIB_texture0;\n"); } - //mShader.append(" pos.x = pos.x / 480.0;\n"); - //mShader.append(" pos.y = pos.y / 800.0;\n"); - //mShader.append(" gl_Position = pos;\n"); mShader.append("}\n"); } } @@ -201,7 +217,7 @@ void ProgramVertex::setupGL2(const Context *rsc, ProgramVertexState *state, Shad { //LOGE("sgl2 vtx1 %x", glGetError()); if ((state->mLast.get() == this) && !mDirty) { - //return; + return; } rsc->checkError("ProgramVertex::setupGL2 start"); @@ -351,6 +367,16 @@ void ProgramVertex::init(Context *rsc) createShader(); } +void ProgramVertex::serialize(OStream *stream) const +{ + +} + +ProgramVertex *ProgramVertex::createFromStream(Context *rsc, IStream *stream) +{ + return NULL; +} + /////////////////////////////////////////////////////////////////////// @@ -362,8 +388,9 @@ ProgramVertexState::~ProgramVertexState() { } -void ProgramVertexState::init(Context *rsc, int32_t w, int32_t h) +void ProgramVertexState::init(Context *rsc) { +#ifndef ANDROID_RS_BUILD_FOR_HOST RsElement e = (RsElement) Element::create(rsc, RS_TYPE_FLOAT_32, RS_KIND_USER, false, 1); rsi_TypeBegin(rsc, e); @@ -372,6 +399,7 @@ void ProgramVertexState::init(Context *rsc, int32_t w, int32_t h) ProgramVertex *pv = new ProgramVertex(rsc, false); Allocation *alloc = (Allocation *)rsi_AllocationCreateTyped(rsc, mAllocType.get()); + mDefaultAlloc.set(alloc); mDefault.set(pv); pv->init(rsc); @@ -382,13 +410,15 @@ void ProgramVertexState::init(Context *rsc, int32_t w, int32_t h) color[2] = 1.f; color[3] = 1.f; - updateSize(rsc, w, h); + updateSize(rsc); +#endif //ANDROID_RS_BUILD_FOR_HOST + } -void ProgramVertexState::updateSize(Context *rsc, int32_t w, int32_t h) +void ProgramVertexState::updateSize(Context *rsc) { Matrix m; - m.loadOrtho(0,w, h,0, -1,1); + m.loadOrtho(0,rsc->getWidth(), rsc->getHeight(),0, -1,1); mDefaultAlloc->subData(RS_PROGRAM_VERTEX_PROJECTION_OFFSET, 16, &m.m[0], 16*4); m.loadIdentity(); |