mirror of
https://github.com/overte-org/overte.git
synced 2025-08-09 07:37:20 +02:00
arrange status icons in two rows of 4 each
This commit is contained in:
parent
a16a477134
commit
83d5c9cf4a
2 changed files with 23 additions and 10 deletions
|
@ -163,6 +163,7 @@ void DrawStatus::run(const SceneContextPointer& sceneContext, const RenderContex
|
||||||
Transform viewMat;
|
Transform viewMat;
|
||||||
args->_viewFrustum->evalProjectionMatrix(projMat);
|
args->_viewFrustum->evalProjectionMatrix(projMat);
|
||||||
args->_viewFrustum->evalViewTransform(viewMat);
|
args->_viewFrustum->evalViewTransform(viewMat);
|
||||||
|
batch.setViewportTransform(args->_viewport);
|
||||||
|
|
||||||
batch.setProjectionTransform(projMat);
|
batch.setProjectionTransform(projMat);
|
||||||
batch.setViewTransform(viewMat);
|
batch.setViewTransform(viewMat);
|
||||||
|
|
|
@ -46,12 +46,14 @@ vec3 paintRainbow(float normalizedHue) {
|
||||||
}
|
}
|
||||||
|
|
||||||
const int INVALID_STATUS = int(0xFFFFFFFF);
|
const int INVALID_STATUS = int(0xFFFFFFFF);
|
||||||
|
const int MAX_NUM_ICONS = 8;
|
||||||
|
const int ICONS_PER_ROW = 4;
|
||||||
|
|
||||||
int getIconStatus(int icon) {
|
int getIconStatus(int icon) {
|
||||||
if (icon < 4) {
|
if (icon < ICONS_PER_ROW) {
|
||||||
return inStatus0[icon];
|
return inStatus0[icon];
|
||||||
} else if (icon < 8) {
|
} else if (icon < MAX_NUM_ICONS) {
|
||||||
return inStatus1[icon - 4];
|
return inStatus1[icon - ICONS_PER_ROW];
|
||||||
}
|
}
|
||||||
return INVALID_STATUS;
|
return INVALID_STATUS;
|
||||||
}
|
}
|
||||||
|
@ -63,10 +65,8 @@ vec3 unpackStatus(int v) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void main(void) {
|
void main(void) {
|
||||||
const vec2 ICON_PIXEL_SIZE = vec2(20, 20);
|
const int NUM_VERTICES_PER_ICON = 6;
|
||||||
const vec2 MARGIN_PIXEL_SIZE = vec2(2, 2);
|
const vec4 UNIT_QUAD[NUM_VERTICES_PER_ICON] = vec4[NUM_VERTICES_PER_ICON](
|
||||||
const int NUM_VERTICES = 6;
|
|
||||||
const vec4 UNIT_QUAD[NUM_VERTICES] = vec4[NUM_VERTICES](
|
|
||||||
vec4(-1.0, -1.0, 0.0, 1.0),
|
vec4(-1.0, -1.0, 0.0, 1.0),
|
||||||
vec4(1.0, -1.0, 0.0, 1.0),
|
vec4(1.0, -1.0, 0.0, 1.0),
|
||||||
vec4(-1.0, 1.0, 0.0, 1.0),
|
vec4(-1.0, 1.0, 0.0, 1.0),
|
||||||
|
@ -75,6 +75,17 @@ void main(void) {
|
||||||
vec4(1.0, 1.0, 0.0, 1.0)
|
vec4(1.0, 1.0, 0.0, 1.0)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const vec2 ICON_PIXEL_SIZE = vec2(20, 20);
|
||||||
|
const vec2 MARGIN_PIXEL_SIZE = vec2(2, 2);
|
||||||
|
const vec2 ICON_GRID_SLOTS[MAX_NUM_ICONS] = vec2[MAX_NUM_ICONS](vec2(-1.5, 0.5),
|
||||||
|
vec2(-0.5, 0.5),
|
||||||
|
vec2(0.5, 0.5),
|
||||||
|
vec2(1.5, 0.5),
|
||||||
|
vec2(-1.5,-0.5),
|
||||||
|
vec2(-0.5,-0.5),
|
||||||
|
vec2(0.5, -0.5),
|
||||||
|
vec2(1.5, -0.5));
|
||||||
|
|
||||||
// anchor point in clip space
|
// anchor point in clip space
|
||||||
vec4 anchorPoint = vec4(inBoundPos, 1.0) + vec4(inBoundDim, 0.0) * vec4(0.5, 0.5, 0.5, 0.0);
|
vec4 anchorPoint = vec4(inBoundPos, 1.0) + vec4(inBoundDim, 0.0) * vec4(0.5, 0.5, 0.5, 0.0);
|
||||||
TransformCamera cam = getTransformCamera();
|
TransformCamera cam = getTransformCamera();
|
||||||
|
@ -82,7 +93,7 @@ void main(void) {
|
||||||
<$transformModelToClipPos(cam, obj, anchorPoint, anchorPoint)$>
|
<$transformModelToClipPos(cam, obj, anchorPoint, anchorPoint)$>
|
||||||
|
|
||||||
// Which icon are we dealing with ?
|
// Which icon are we dealing with ?
|
||||||
int iconNum = gl_VertexID / NUM_VERTICES;
|
int iconNum = gl_VertexID / NUM_VERTICES_PER_ICON;
|
||||||
int packedIconStatus = getIconStatus(iconNum);
|
int packedIconStatus = getIconStatus(iconNum);
|
||||||
|
|
||||||
// if invalid, just kill
|
// if invalid, just kill
|
||||||
|
@ -93,7 +104,7 @@ void main(void) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Which quad vertex pos?
|
// Which quad vertex pos?
|
||||||
int twoTriID = gl_VertexID - iconNum * NUM_VERTICES;
|
int twoTriID = gl_VertexID - iconNum * NUM_VERTICES_PER_ICON;
|
||||||
vec4 quadPos = UNIT_QUAD[twoTriID];
|
vec4 quadPos = UNIT_QUAD[twoTriID];
|
||||||
|
|
||||||
// unpack to get x and y satus
|
// unpack to get x and y satus
|
||||||
|
@ -110,7 +121,8 @@ void main(void) {
|
||||||
iconScale = max(vec2(0, 0), (iconScale * iconStatus.x));
|
iconScale = max(vec2(0, 0), (iconScale * iconStatus.x));
|
||||||
|
|
||||||
//Offset icon to the right based on the iconNum
|
//Offset icon to the right based on the iconNum
|
||||||
vec2 offset = vec2(iconNum * (ICON_PIXEL_SIZE.x + MARGIN_PIXEL_SIZE.x), 0);
|
vec2 gridOffset = ICON_GRID_SLOTS[iconNum];
|
||||||
|
vec2 offset = gridOffset * (ICON_PIXEL_SIZE + MARGIN_PIXEL_SIZE);
|
||||||
|
|
||||||
// Final position in pixel space
|
// Final position in pixel space
|
||||||
vec2 quadPixelPos = offset.xy + quadPos.xy * 0.5 * iconScale;
|
vec2 quadPixelPos = offset.xy + quadPos.xy * 0.5 * iconScale;
|
||||||
|
|
Loading…
Reference in a new issue