TEST(FeatureSets, Compatible) { std::vector<ImageIndex> vertices(4); vertices[0] = ImageIndex(0, 0); vertices[1] = ImageIndex(0, 0); vertices[2] = ImageIndex(0, 1); vertices[3] = ImageIndex(0, 2); FeatureSets<int> sets; sets.init(vertices); ASSERT_EQ(sets.compatible(0, 1), false); ASSERT_EQ(sets.compatible(0, 2), true); ASSERT_EQ(sets.compatible(0, 3), true); ASSERT_EQ(sets.compatible(1, 2), true); ASSERT_EQ(sets.compatible(1, 3), true); ASSERT_EQ(sets.compatible(2, 3), true); sets.join(0, 2); ASSERT_EQ(sets.compatible(0, 1), false); ASSERT_EQ(sets.compatible(0, 3), true); ASSERT_EQ(sets.compatible(1, 2), false); ASSERT_EQ(sets.compatible(1, 3), true); ASSERT_EQ(sets.compatible(2, 3), true); sets.join(1, 3); ASSERT_EQ(sets.compatible(0, 1), false); ASSERT_EQ(sets.compatible(0, 3), false); ASSERT_EQ(sets.compatible(1, 2), false); ASSERT_EQ(sets.compatible(2, 3), false); }
TEST(FeatureSets, Count) { std::vector<ImageIndex> vertices(4); vertices[0] = ImageIndex(0, 0); vertices[1] = ImageIndex(0, 0); vertices[2] = ImageIndex(0, 1); vertices[3] = ImageIndex(0, 2); // Check that there are four sets. FeatureSets<int> sets; sets.init(vertices); ASSERT_EQ(sets.count(), 4); }
TEST(FeatureSets, SeparateJoin) { std::vector<ImageIndex> vertices(4); vertices[0] = ImageIndex(0, 0); vertices[1] = ImageIndex(0, 0); vertices[2] = ImageIndex(0, 1); vertices[3] = ImageIndex(0, 2); FeatureSets<int> sets; sets.init(vertices); sets.join(0, 2); sets.join(1, 3); // There should be only two sets. ASSERT_EQ(sets.count(), 2); std::map<ImageIndex, int> desired; desired[ImageIndex(0, 0)] = 0; desired[ImageIndex(0, 1)] = 2; ASSERT_EQ(sets.find(0).elements, desired); ASSERT_EQ(sets.find(2).elements, desired); desired.clear(); desired[ImageIndex(0, 0)] = 1; desired[ImageIndex(0, 2)] = 3; ASSERT_EQ(sets.find(1).elements, desired); ASSERT_EQ(sets.find(3).elements, desired); }
ImageIndex ImageIndex::MakeGeneric(GLenum target, GLint mipIndex) { GLint layerIndex = IsCubeMapTextureTarget(target) ? static_cast<GLint>(CubeMapTextureTargetToLayerIndex(target)) : ENTIRE_LEVEL; return ImageIndex(target, mipIndex, layerIndex); }
ImageIndex ImageIndex::MakeInvalid() { return ImageIndex(GL_NONE, -1, -1); }
ImageIndex ImageIndex::Make3D(GLint mipIndex, GLint layerIndex) { return ImageIndex(GL_TEXTURE_3D, mipIndex, layerIndex); }
ImageIndex ImageIndex::MakeCube(GLenum target, GLint mipIndex) { ASSERT(gl::IsCubeMapTextureTarget(target)); return ImageIndex(target, mipIndex, static_cast<GLint>(CubeMapTextureTargetToLayerIndex(target))); }
ImageIndex ImageIndex::Make2DArray(GLint mipIndex, GLint layerIndex) { return ImageIndex(GL_TEXTURE_2D_ARRAY, mipIndex, layerIndex); }
ImageIndex ImageIndex::Make2D(GLint mipIndex) { return ImageIndex(GL_TEXTURE_2D, mipIndex, ENTIRE_LEVEL); }
ImageIndex ImageIndex::MakeCube(GLenum target, GLint mipIndex) { ASSERT(gl::IsCubemapTextureTarget(target)); return ImageIndex(target, mipIndex, TextureCubeMap::targetToLayerIndex(target)); }
ImageIndex ImageIndex::Make2DMultisample() { return ImageIndex(GL_TEXTURE_2D_MULTISAMPLE, 0, ENTIRE_LEVEL, 1); }
ImageIndex ImageIndex::Make2DArrayRange(GLint mipIndex, GLint layerIndex, GLint numLayers) { return ImageIndex(GL_TEXTURE_2D_ARRAY, mipIndex, layerIndex, numLayers); }
ImageIndex ImageIndex::MakeRectangle(GLint mipIndex) { return ImageIndex(GL_TEXTURE_RECTANGLE_ANGLE, mipIndex, ENTIRE_LEVEL, 1); }