Commit e03de645 authored by Matthias Betz's avatar Matthias Betz
Browse files

Add PickingCodec for color-picking id encoding

parent caa2d703
package de.hft.stuttgart.citydoctor2.gui.gl;
/** Encodes integer ids into RGB bytes for GPU color-picking. Id 0 is reserved for background. */
public final class PickingCodec {
private PickingCodec() {}
public static int red(int id) { return id & 0xFF; }
public static int green(int id) { return (id >> 8) & 0xFF; }
public static int blue(int id) { return (id >> 16) & 0xFF; }
public static int decode(int r, int g, int b) {
return (r & 0xFF) | ((g & 0xFF) << 8) | ((b & 0xFF) << 16);
}
}
package de.hft.stuttgart.citydoctor2.gui.gl;
import static org.junit.Assert.assertEquals;
import org.junit.Test;
public class PickingCodecTest {
@Test
public void roundTripsIdsThroughRgbBytes() {
int[] ids = {1, 255, 256, 65535, 65536, 16777215};
for (int id : ids) {
int r = PickingCodec.red(id);
int g = PickingCodec.green(id);
int b = PickingCodec.blue(id);
assertEquals(id, PickingCodec.decode(r, g, b));
}
}
@Test
public void blackDecodesToZeroBackground() {
assertEquals(0, PickingCodec.decode(0, 0, 0));
}
}
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment