Example #1
0
	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;
	}
Example #2
0
        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;
}