diff options
author | Jason Sams <rjsams@android.com> | 2010-01-07 15:40:45 -0800 |
---|---|---|
committer | Jason Sams <rjsams@android.com> | 2010-01-07 16:26:42 -0800 |
commit | 6286953eced16648d18e1efc57c3b089c49b5608 (patch) | |
tree | e2e683664592acd3d8571a9d1e86395cc636503c | |
parent | edc5189c33de03f3e2f5f73edc0e007992b933c9 (diff) | |
download | frameworks_base-6286953eced16648d18e1efc57c3b089c49b5608.zip frameworks_base-6286953eced16648d18e1efc57c3b089c49b5608.tar.gz frameworks_base-6286953eced16648d18e1efc57c3b089c49b5608.tar.bz2 |
Change user attribs to look for empty slot rather than using them in order. Prevents conflict with numbered legacy slots.
-rw-r--r-- | libs/rs/rsProgramVertex.cpp | 8 | ||||
-rw-r--r-- | libs/rs/rsVertexArray.cpp | 16 | ||||
-rw-r--r-- | libs/rs/rsVertexArray.h | 1 |
3 files changed, 12 insertions, 13 deletions
diff --git a/libs/rs/rsProgramVertex.cpp b/libs/rs/rsProgramVertex.cpp index 2be6a7d..8e59bc2 100644 --- a/libs/rs/rsProgramVertex.cpp +++ b/libs/rs/rsProgramVertex.cpp @@ -56,10 +56,10 @@ ProgramVertex::~ProgramVertex() static void logMatrix(const char *txt, const float *f) { LOGV("Matrix %s, %p", txt, f); - LOGV("%6.2f, %6.2f, %6.2f, %6.2f", f[0], f[4], f[8], f[12]); - LOGV("%6.2f, %6.2f, %6.2f, %6.2f", f[1], f[5], f[9], f[13]); - LOGV("%6.2f, %6.2f, %6.2f, %6.2f", f[2], f[6], f[10], f[14]); - LOGV("%6.2f, %6.2f, %6.2f, %6.2f", f[3], f[7], f[11], f[15]); + LOGV("%6.4f, %6.4f, %6.4f, %6.4f", f[0], f[4], f[8], f[12]); + LOGV("%6.4f, %6.4f, %6.4f, %6.4f", f[1], f[5], f[9], f[13]); + LOGV("%6.4f, %6.4f, %6.4f, %6.4f", f[2], f[6], f[10], f[14]); + LOGV("%6.4f, %6.4f, %6.4f, %6.4f", f[3], f[7], f[11], f[15]); } void ProgramVertex::setupGL(const Context *rsc, ProgramVertexState *state) diff --git a/libs/rs/rsVertexArray.cpp b/libs/rs/rsVertexArray.cpp index 7a8e054..7124eb5 100644 --- a/libs/rs/rsVertexArray.cpp +++ b/libs/rs/rsVertexArray.cpp @@ -26,7 +26,6 @@ using namespace android::renderscript; VertexArray::VertexArray() { mActiveBuffer = 0; - mUserCount = 0; } VertexArray::~VertexArray() @@ -40,7 +39,6 @@ void VertexArray::clearAll() mAttribs[ct].clear(); } mActiveBuffer = 0; - mUserCount = 0; } VertexArray::Attrib::Attrib() @@ -127,10 +125,13 @@ void VertexArray::setTexture(uint32_t size, uint32_t type, uint32_t stride, uint void VertexArray::setUser(const Attrib &a, uint32_t stride) { - mAttribs[mUserCount].set(a); - mAttribs[mUserCount].buffer = mActiveBuffer; - mAttribs[mUserCount].stride = stride; - mUserCount ++; + // Find empty slot, some may be taken by legacy 1.1 slots. + uint32_t slot = 0; + while (mAttribs[slot].size) slot++; + rsAssert(slot < RS_MAX_ATTRIBS); + mAttribs[slot].set(a); + mAttribs[slot].buffer = mActiveBuffer; + mAttribs[slot].stride = stride; } void VertexArray::logAttrib(uint32_t idx, uint32_t slot) const { @@ -215,9 +216,8 @@ void VertexArray::setupGL2(const Context *rsc, class VertexArrayState *state, Sh } for (uint32_t ct=0; ct < RS_MAX_ATTRIBS; ct++) { - if (mAttribs[ct].size) { + if (mAttribs[ct].size && (sc->vtxAttribSlot(ct) >= 0)) { //logAttrib(ct, sc->vtxAttribSlot(ct)); - rsAssert(sc->vtxAttribSlot(ct) >= 0); glEnableVertexAttribArray(sc->vtxAttribSlot(ct)); glBindBuffer(GL_ARRAY_BUFFER, mAttribs[ct].buffer); diff --git a/libs/rs/rsVertexArray.h b/libs/rs/rsVertexArray.h index 998e9ad..26e6f84 100644 --- a/libs/rs/rsVertexArray.h +++ b/libs/rs/rsVertexArray.h @@ -76,7 +76,6 @@ public: protected: uint32_t mActiveBuffer; - uint32_t mUserCount; Attrib mAttribs[RS_MAX_ATTRIBS]; }; |