Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
CityDoctor
CityDoctor2
Commits
e03de645
Commit
e03de645
authored
Jun 19, 2026
by
Matthias Betz
Browse files
Add PickingCodec for color-picking id encoding
parent
caa2d703
Changes
2
Show whitespace changes
Inline
Side-by-side
CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/gl/PickingCodec.java
0 → 100644
View file @
e03de645
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
);
}
}
CityDoctorParent/Extensions/CityDoctorGUI/src/test/java/de/hft/stuttgart/citydoctor2/gui/gl/PickingCodecTest.java
0 → 100644
View file @
e03de645
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
));
}
}
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment