summaryrefslogtreecommitdiffstats
path: root/libs/rs
diff options
context:
space:
mode:
authorJason Sams <rjsams@android.com>2010-01-07 15:40:45 -0800
committerJason Sams <rjsams@android.com>2010-01-07 16:26:42 -0800
commit6286953eced16648d18e1efc57c3b089c49b5608 (patch)
treee2e683664592acd3d8571a9d1e86395cc636503c /libs/rs
parentedc5189c33de03f3e2f5f73edc0e007992b933c9 (diff)
downloadframeworks_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.
Diffstat (limited to 'libs/rs')
-rw-r--r--libs/rs/rsProgramVertex.cpp8
-rw-r--r--libs/rs/rsVertexArray.cpp16
-rw-r--r--libs/rs/rsVertexArray.h1
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];
};