Parcourir la source

Merge pull request #504 from dariomanesku/master

Doing scissor test on CPU.
Branimir Karadžić il y a 10 ans
Parent
commit
0978ce36da
1 fichiers modifiés avec 22 ajouts et 0 suppressions
  1. 22 0
      examples/common/imgui/imgui.cpp

+ 22 - 0
examples/common/imgui/imgui.cpp

@@ -1221,6 +1221,11 @@ struct Imgui
 
 		const uint32_t rgb0 = _rgb0&0x00ffffff;
 
+		if (!visible(yy, height, area.m_scissorY, area.m_scissorHeight))
+		{
+			return false;
+		}
+
 		drawRoundedRect( (float)xx
 					   , (float)yy
 					   , (float)width
@@ -1266,6 +1271,11 @@ struct Imgui
 		const bool over = enabled && inRect(xx, yy, width, height);
 		const bool res = buttonLogic(id, over);
 
+		if (!visible(yy, height, area.m_scissorY, area.m_scissorHeight))
+		{
+			return false;
+		}
+
 		if (isHot(id) )
 		{
 			drawRoundedRect( (float)xx
@@ -1316,6 +1326,12 @@ struct Imgui
 
 		const int32_t cx = xx + BUTTON_HEIGHT / 2 - CHECK_SIZE / 2;
 		const int32_t cy = yy + BUTTON_HEIGHT / 2 - CHECK_SIZE / 2;
+
+		if (!visible(cy, CHECK_SIZE+6, area.m_scissorY, area.m_scissorHeight))
+		{
+			return false;
+		}
+
 		drawRoundedRect( (float)cx - 3
 			, (float)cy - 3
 			, (float)CHECK_SIZE + 6
@@ -3062,6 +3078,12 @@ struct Imgui
 		bool m_scissorEnabled;
 	};
 
+	bool visible(int32_t _elemY, int32_t _elemHeight, int32_t _scissorY, int32_t _scissorHeight)
+	{
+		return _elemY > _scissorY
+		   && (_elemY+_elemHeight) < (_scissorY+_scissorHeight);
+	}
+
 	inline Area& getCurrentArea()
 	{
 		return m_areas[m_areaId];