浏览代码

Fix bitfieldInsert according to GLSL spec
"bitfieldInsert inserts the bits least significant bits of insert into base at offset offset..."

Florian Penzkofer 7 年之前
父节点
当前提交
d0ae3f966e
共有 2 个文件被更改,包括 4 次插入4 次删除
  1. 1 1
      glm/detail/func_integer.inl
  2. 3 3
      test/core/core_func_integer.cpp

+ 1 - 1
glm/detail/func_integer.inl

@@ -269,7 +269,7 @@ namespace detail
 		GLM_STATIC_ASSERT(std::numeric_limits<T>::is_integer, "'bitfieldInsert' only accept integer values");
 
 		T const Mask = static_cast<T>(detail::mask(Bits) << Offset);
-		return (Base & ~Mask) | (Insert & Mask);
+		return (Base & ~Mask) | ((Insert << static_cast<T>(Offset)) & Mask);
 	}
 
 	// bitfieldReverse

+ 3 - 3
test/core/core_func_integer.cpp

@@ -41,9 +41,9 @@ namespace bitfieldInsert
 		{0x00000000, 0xffffffff,  0, 32, 0xffffffff},
 		{0x00000000, 0xffffffff,  0, 31, 0x7fffffff},
 		{0x00000000, 0xffffffff,  0,  0, 0x00000000},
-		{0xff000000, 0x0000ff00,  8,  8, 0xff00ff00},
-		{0xffff0000, 0x0000ffff, 16, 16, 0x00000000},
-		{0x0000ffff, 0xffff0000, 16, 16, 0xffffffff}
+		{0xff000000, 0x000000ff,  8,  8, 0xff00ff00},
+		{0xffff0000, 0xffff0000, 16, 16, 0x00000000},
+		{0x0000ffff, 0x0000ffff, 16, 16, 0xffffffff}
 	};
 
 	static int test()