[Bf-blender-cvs] [0d4dd0d] cycles-ptex-49: Code cleanup: use BPXRect in Ptex layout interface

Nicholas Bishop noreply at git.blender.org
Thu Feb 12 14:16:39 CET 2015


Commit: 0d4dd0df6cfc0e97082faba78d7f05e3e24119d7
Author: Nicholas Bishop
Date:   Wed Feb 11 17:06:39 2015 +0100
Branches: cycles-ptex-49
https://developer.blender.org/rB0d4dd0df6cfc0e97082faba78d7f05e3e24119d7

Code cleanup: use BPXRect in Ptex layout interface

===================================================================

M	extern/ptex/BPX_packed_layout.h
M	extern/ptex/BPX_ptex.h
M	extern/ptex/BPX_rect.h
M	extern/ptex/bpx_c_api.cpp
M	intern/cycles/render/image.cpp
M	source/blender/imbuf/intern/imb_ptex.c

===================================================================

diff --git a/extern/ptex/BPX_packed_layout.h b/extern/ptex/BPX_packed_layout.h
index ad8ea08..082a4c5 100644
--- a/extern/ptex/BPX_packed_layout.h
+++ b/extern/ptex/BPX_packed_layout.h
@@ -5,6 +5,8 @@
 #include <cassert>
 #include <vector>
 
+#include "BPX_rect.h"
+
 // TODO(nicholasbishop): there's a lot of room for improvement
 // here. None of this data is saved to a file, so we should be able to
 // safely improve it to improve performance, decrease memory usage,
diff --git a/extern/ptex/BPX_ptex.h b/extern/ptex/BPX_ptex.h
index 15dcae2..3351637 100644
--- a/extern/ptex/BPX_ptex.h
+++ b/extern/ptex/BPX_ptex.h
@@ -121,8 +121,8 @@ void BPX_packed_layout_finalize(struct BPXPackedLayout *layout);
 int BPX_packed_layout_width(const struct BPXPackedLayout *layout);
 int BPX_packed_layout_height(const struct BPXPackedLayout *layout);
 bool BPX_packed_layout_item(const struct BPXPackedLayout *layout,
-							int id, int *x, int *y,
-							int *width, int *height);
+							const int index,
+							struct BPXRect *r_rect);
 void BPX_packed_layout_delete(struct BPXPackedLayout *layout);
 
 #ifdef __cplusplus
diff --git a/extern/ptex/BPX_rect.h b/extern/ptex/BPX_rect.h
index 5702265..b3393fe 100644
--- a/extern/ptex/BPX_rect.h
+++ b/extern/ptex/BPX_rect.h
@@ -6,8 +6,9 @@ extern "C"{
 #endif
 
 /* TODO(nicholasbishop): this is yet another 2D integer rect
- * structure. Would be better to reuse rcti. */
+ * structure. Could be nicer to reuse rcti. */
 
+/* Note: begin is inclusive, end is exclusive to match OIIO::ROI */
 typedef struct BPXRect {
 	int xbegin;
 	int xend;
diff --git a/extern/ptex/bpx_c_api.cpp b/extern/ptex/bpx_c_api.cpp
index 253cc75..19565cc 100644
--- a/extern/ptex/bpx_c_api.cpp
+++ b/extern/ptex/bpx_c_api.cpp
@@ -1239,16 +1239,15 @@ int BPX_packed_layout_height(const BPXPackedLayout * const layout)
 }
 
 bool BPX_packed_layout_item(const BPXPackedLayout * const layout,
-							 const int item_id, int *x, int *y,
-							 int *width, int *height)
+							const int item_id, BPXRect *r_rect)
 {
-	if (layout && x && y && width && height) {
+	if (layout && r_rect) {
 		const BPXPackedLayout::Items &items = layout->get_items();
 		if (item_id >= 0 && item_id < items.size()) {
-			(*x) = items[item_id].x;
-			(*y) = items[item_id].y;
-			(*width) = items[item_id].u_res;
-			(*height) = items[item_id].v_res;
+			r_rect->xbegin = items[item_id].x;
+			r_rect->ybegin = items[item_id].y;
+			r_rect->xend = items[item_id].x + items[item_id].u_res;
+			r_rect->yend = items[item_id].y + items[item_id].v_res;
 			return true;
 		}
 	}
diff --git a/intern/cycles/render/image.cpp b/intern/cycles/render/image.cpp
index 144a837..4cd2124 100644
--- a/intern/cycles/render/image.cpp
+++ b/intern/cycles/render/image.cpp
@@ -406,12 +406,12 @@ static BPXImageBuf *ptex_pack_uchar_cb(const struct BPXPackedLayout *layout,
 											 width, height, num_regions*4);
 
 	for (int i = 0; i < num_regions; i++) {
-		int x, y, w, h;
-		if (BPX_packed_layout_item(layout, i, &x, &y, &w, &h)) {
-			regions[i][0] = x;
-			regions[i][1] = y;
-			regions[i][2] = w;
-			regions[i][3] = h;
+		BPXRect rect;
+		if (BPX_packed_layout_item(layout, i, &rect)) {
+			regions[i][0] = rect.xbegin;
+			regions[i][1] = rect.ybegin;
+			regions[i][2] = rect.xend - rect.xbegin;
+			regions[i][3] = rect.yend - rect.ybegin;
 		}
 		else {
 			// TODO
diff --git a/source/blender/imbuf/intern/imb_ptex.c b/source/blender/imbuf/intern/imb_ptex.c
index 622f29a..96a7364 100644
--- a/source/blender/imbuf/intern/imb_ptex.c
+++ b/source/blender/imbuf/intern/imb_ptex.c
@@ -42,10 +42,14 @@ ImBuf *IMB_alloc_from_ptex_layout(const struct BPXPackedLayout *layout)
 
 		for (i = 0; i < ibuf->num_ptex_regions; i++) {
 			ImPtexRegion *dst_region = &ibuf->ptex_regions[i];
-			if (!BPX_packed_layout_item(layout, i, &dst_region->x,
-										 &dst_region->y, &dst_region->width,
-										 &dst_region->height))
-			{
+			BPXRect rect;
+			if (BPX_packed_layout_item(layout, i, &rect)) {
+				dst_region->x = rect.xbegin;
+				dst_region->y = rect.ybegin;
+				dst_region->width = rect.xend - rect.xbegin;
+				dst_region->height = rect.yend - rect.ybegin;
+			}
+			else {
 				/* Error */
 				IMB_freeImBuf(ibuf);
 				return NULL;




More information about the Bf-blender-cvs mailing list