void Mesh::applyIndexing() { vector<vec3> outVertexData; vector<vec3> outNormalData; vector<vec2> outUvData; vector<unsigned int> outIndexData; map<Vertex, unsigned int> VertexToOutIndex; bool hasUV = uvData.size() > 0; bool hasNormal = normalData.size() > 0; const vec3 zero(0.0f); unsigned int n = vertexData.size(); for (unsigned int i = 0; i < n; i++) { Vertex packed(vertexData[i], hasNormal ? normalData[i] : zero, hasUV ? uvData[i] : vec2(0.0f)); unsigned int index; bool found = getSimilarVertexIndex(packed, VertexToOutIndex, index); if (found) outIndexData.push_back(index); else { outVertexData.push_back(vertexData[i]); if(hasUV) outUvData.push_back(uvData[i]); if(hasNormal) outNormalData.push_back(normalData[i]); outIndexData.push_back(outVertexData.size() - 1); VertexToOutIndex[packed] = outVertexData.size() - 1; } } indexData.setData(outIndexData); vertexData = outVertexData; uvData = outUvData; normalData = outNormalData; }
void RunTest1(unsigned capacity, bool useVirtualAlloc) { for (unsigned bitsPerEntry = 1; bitsPerEntry < 57; ++bitsPerEntry) { PackedArray packed(capacity, bitsPerEntry, useVirtualAlloc); uint64_t modulus = 1ULL << bitsPerEntry; for (unsigned i = 0 ; i < capacity; ++i) { packed.Set(i, i % modulus); // Verify contents of buffer. for (unsigned j = 0 ; j < capacity; ++j) { uint64_t expected = (j <= i) ? (j % modulus) : 0; uint64_t found = packed.Get(j); // If we have written the index, we expect the value we wrote. EXPECT_EQ(expected, found); } } } }
void AstNodeClassDType::dump(ostream& str) { this->AstNode::dump(str); if (packed()) str<<" [PACKED]"; }
std::vector<char> ide::buffer_compress(const int* values, const std::size_t& sz) { std::vector<char> packed(0); int current = 0; int delta, i; unsigned int j; bool le = little_endian(); short s; char c; char * b; for (j = 0; j < sz; j++) { delta = values[j] - current; if ((-127 <= delta) && (delta < 128)) { c = (char) delta; packed.push_back(c); current += delta; continue; } packed.push_back(-128); if ((-32767 <= delta) && (delta < 32768)) { s = (short) delta; b = ((u_s *) & s)[0].b; if (!le) { byte_swap_short(b); } packed.push_back(b[0]); packed.push_back(b[1]); current += delta; continue; } s = -32768; b = ((u_s *) & s)[0].b; if (!le) { byte_swap_short(b); } packed.push_back(b[0]); packed.push_back(b[1]); if ((-2147483647 <= delta) && (delta <= 2147483647)) { i = delta; b = ((u_i *) & i)[0].b; if (!le) { byte_swap_int(b); } packed.push_back(b[0]); packed.push_back(b[1]); packed.push_back(b[2]); packed.push_back(b[3]); current += delta; continue; } /* FIXME I should not get here */ //fail silently or throw an exception? } return packed; }