Skip to content
Snippets Groups Projects
Commit 231280e8 authored by Vojtech Moravec's avatar Vojtech Moravec
Browse files

Greatly simplify the wrapping logic for block loading.

parent ae6606ab
No related branches found
No related tags found
No related merge requests found
...@@ -135,27 +135,18 @@ public abstract class BasicLoader { ...@@ -135,27 +135,18 @@ public abstract class BasicLoader {
return blocks; return blocks;
} }
private void loadBlock(final int[] block, final int planeIndex, final int blockXOffset, final int blockYOffset, final V2i blockDim) { private void loadBlock(final int[] block, final int planeIndex, final int blockXOffset, final int blockYOffset, final V2i blockDim) {
int srcX, srcY; int srcX, srcY;
for (int y = 0; y < blockDim.getY(); y++) { for (int y = 0; y < blockDim.getY(); y++) {
srcY = blockYOffset + y; srcY = blockYOffset + y;
// Row overflow // Row overflow
if (srcY >= dims.getY()) { if (srcY >= dims.getY()) {
if (wrappingStrategy == DataWrappingStrategy.LeaveBlank) {
if (wrappingStrategy == DataWrappingStrategy.LeaveBlank)
break; break;
} else if (wrappingStrategy == DataWrappingStrategy.ClampToEdge) {
if (wrappingStrategy == DataWrappingStrategy.ClampToEdge) { srcY = dims.getY() - 1;
final int srcRow = dims.getY() - 1;
final int dstOffset = y * blockDim.getX();
duplicateDataFromSrcRow(block, planeIndex, blockXOffset, blockDim, srcRow, dstOffset);
continue;
} else if (wrappingStrategy == DataWrappingStrategy.MirroredRepeat) { } else if (wrappingStrategy == DataWrappingStrategy.MirroredRepeat) {
final int srcRow = dims.getY() - ((srcY - dims.getY()) + 1); srcY = dims.getY() - ((srcY - dims.getY()) + 1);
final int dstOffset = y * blockDim.getX();
duplicateDataFromSrcRow(block, planeIndex, blockXOffset, blockDim, srcRow, dstOffset);
} }
} }
...@@ -164,17 +155,12 @@ public abstract class BasicLoader { ...@@ -164,17 +155,12 @@ public abstract class BasicLoader {
// Column overflow. // Column overflow.
if (srcX >= dims.getX()) { if (srcX >= dims.getX()) {
if (wrappingStrategy == DataWrappingStrategy.LeaveBlank) {
if (wrappingStrategy == DataWrappingStrategy.LeaveBlank)
break; break;
if (wrappingStrategy == DataWrappingStrategy.ClampToEdge) { } else if (wrappingStrategy == DataWrappingStrategy.ClampToEdge) {
block[Block.index(x, y, blockDim.getX())] = valueAt(planeIndex, Block.index(dims.getX() - 1, srcY, dims.getX())); srcX = dims.getX() - 1;
continue;
} else if (wrappingStrategy == DataWrappingStrategy.MirroredRepeat) { } else if (wrappingStrategy == DataWrappingStrategy.MirroredRepeat) {
srcX = dims.getX() - ((srcX - dims.getX()) + 1);
block[Block.index(x, y, blockDim.getX())] =
valueAt(planeIndex, Block.index(dims.getX() - ((srcX - dims.getX()) + 1), srcY, dims.getX()));
continue;
} }
} }
block[Block.index(x, y, blockDim.getX())] = valueAt(planeIndex, Block.index(srcX, srcY, dims.getX())); block[Block.index(x, y, blockDim.getX())] = valueAt(planeIndex, Block.index(srcX, srcY, dims.getX()));
...@@ -182,35 +168,6 @@ public abstract class BasicLoader { ...@@ -182,35 +168,6 @@ public abstract class BasicLoader {
} }
} }
private void duplicateDataFromSrcRow(final int[] block,
final int planeIndex,
final int blockXOffset,
final V2i blockDim,
final int srcRow,
final int dstOffset) {
int srcX;
for (int x = 0; x < blockDim.getX(); x++) {
srcX = (blockXOffset + x);
if (srcX >= dims.getX())
srcX = dims.getX() - 1;
block[dstOffset + x] = valueAt(planeIndex, Block.index(srcX, srcRow, dims.getX()));
}
}
private void duplicateDataFromSrcRow(final int[] block,
final int[] planeData,
final int blockXOffset,
final V2i blockDim,
final int srcRow,
final int dstOffset) {
int srcX;
for (int x = 0; x < blockDim.getX(); x++) {
srcX = (blockXOffset + x);
if (srcX >= dims.getX())
srcX = dims.getX() - 1;
block[dstOffset + x] = planeData[Block.index(srcX, srcRow, dims.getX())];
}
}
private void loadBlock(final int[] block, final int[] planeData, final int blockXOffset, final int blockYOffset, final V2i blockDim) { private void loadBlock(final int[] block, final int[] planeData, final int blockXOffset, final int blockYOffset, final V2i blockDim) {
int srcX, srcY; int srcX, srcY;
...@@ -218,36 +175,24 @@ public abstract class BasicLoader { ...@@ -218,36 +175,24 @@ public abstract class BasicLoader {
srcY = blockYOffset + y; srcY = blockYOffset + y;
// Row overflow // Row overflow
if (srcY >= dims.getY()) { if (srcY >= dims.getY()) {
if (wrappingStrategy == DataWrappingStrategy.LeaveBlank) {
if (wrappingStrategy == DataWrappingStrategy.LeaveBlank)
break; break;
} else if (wrappingStrategy == DataWrappingStrategy.ClampToEdge) {
if (wrappingStrategy == DataWrappingStrategy.ClampToEdge) { srcY = dims.getY() - 1;
final int srcRow = dims.getY() - 1;
final int dstOffset = y * blockDim.getX();
duplicateDataFromSrcRow(block, planeData, blockXOffset, blockDim, srcRow, dstOffset);
continue;
} else if (wrappingStrategy == DataWrappingStrategy.MirroredRepeat) { } else if (wrappingStrategy == DataWrappingStrategy.MirroredRepeat) {
final int srcRow = dims.getY() - ((srcY - dims.getY()) + 1); srcY = dims.getY() - ((srcY - dims.getY()) + 1);
final int dstOffset = y * blockDim.getX();
duplicateDataFromSrcRow(block, planeData, blockXOffset, blockDim, srcRow, dstOffset);
} }
} }
for (int x = 0; x < blockDim.getX(); x++) { for (int x = 0; x < blockDim.getX(); x++) {
srcX = blockXOffset + x; srcX = blockXOffset + x;
// Column overflow. // Column overflow.
if (srcX >= dims.getX()) { if (srcX >= dims.getX()) {
if (wrappingStrategy == DataWrappingStrategy.LeaveBlank) {
if (wrappingStrategy == DataWrappingStrategy.LeaveBlank)
break; break;
if (wrappingStrategy == DataWrappingStrategy.ClampToEdge) { } else if (wrappingStrategy == DataWrappingStrategy.ClampToEdge) {
block[Block.index(x, y, blockDim.getX())] = planeData[Block.index(dims.getX() - 1, srcY, dims.getX())]; srcX = dims.getX() - 1;
continue;
} else if (wrappingStrategy == DataWrappingStrategy.MirroredRepeat) { } else if (wrappingStrategy == DataWrappingStrategy.MirroredRepeat) {
srcX = dims.getX() - ((srcX - dims.getX()) + 1);
block[Block.index(x, y, blockDim.getX())] =
planeData[Block.index(dims.getX() - ((srcX - dims.getX()) + 1), srcY, dims.getX())];
continue;
} }
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment