Image editor: Show actual value of single-channel buffer in sample info
Previously if image only had single channel only z buffer value was displaying. This isn't handy for cases when you've got single channel buffer which is not a z buffer. Also fixed possible read past the array.
This commit is contained in:
parent
b72aef92c4
commit
958d613f66
|
@ -197,6 +197,19 @@ void ED_image_draw_info(Scene *scene, ARegion *ar, bool color_manage, bool use_d
|
|||
dx += BLF_width(blf_mono_font, str, sizeof(str));
|
||||
}
|
||||
|
||||
if (channels == 1 && (cp != NULL || fp != NULL)) {
|
||||
if (fp != NULL) {
|
||||
BLI_snprintf(str, sizeof(str), " Val:%-.3f |", fp[0]);
|
||||
}
|
||||
else if (cp != NULL) {
|
||||
BLI_snprintf(str, sizeof(str), " Val:%-.3f |", cp[0] / 255.0f);
|
||||
}
|
||||
glColor3ub(255, 255, 255);
|
||||
BLF_position(blf_mono_font, dx, dy, 0);
|
||||
BLF_draw_ascii(blf_mono_font, str, sizeof(str));
|
||||
dx += BLF_width(blf_mono_font, str, sizeof(str));
|
||||
}
|
||||
|
||||
if (channels >= 3) {
|
||||
glColor3ubv(red);
|
||||
if (fp)
|
||||
|
|
|
@ -2826,8 +2826,8 @@ typedef struct ImageSampleInfo {
|
|||
int *zp;
|
||||
float *zfp;
|
||||
|
||||
int draw;
|
||||
int color_manage;
|
||||
bool draw;
|
||||
bool color_manage;
|
||||
int use_default_view;
|
||||
} ImageSampleInfo;
|
||||
|
||||
|
@ -2901,7 +2901,7 @@ static void image_sample_apply(bContext *C, wmOperator *op, const wmEvent *event
|
|||
|
||||
if (ibuf == NULL) {
|
||||
ED_space_image_release_buffer(sima, ibuf, lock);
|
||||
info->draw = 0;
|
||||
info->draw = false;
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -2918,7 +2918,7 @@ static void image_sample_apply(bContext *C, wmOperator *op, const wmEvent *event
|
|||
|
||||
info->x = x;
|
||||
info->y = y;
|
||||
info->draw = 1;
|
||||
info->draw = true;
|
||||
info->channels = ibuf->channels;
|
||||
|
||||
info->colp = NULL;
|
||||
|
@ -2951,10 +2951,24 @@ static void image_sample_apply(bContext *C, wmOperator *op, const wmEvent *event
|
|||
if (ibuf->rect_float) {
|
||||
fp = (ibuf->rect_float + (ibuf->channels) * (y * ibuf->x + x));
|
||||
|
||||
info->colf[0] = fp[0];
|
||||
info->colf[1] = fp[1];
|
||||
info->colf[2] = fp[2];
|
||||
info->colf[3] = fp[3];
|
||||
if (ibuf->channels == 4) {
|
||||
info->colf[0] = fp[0];
|
||||
info->colf[1] = fp[1];
|
||||
info->colf[2] = fp[2];
|
||||
info->colf[3] = fp[3];
|
||||
}
|
||||
else if (ibuf->channels == 3) {
|
||||
info->colf[0] = fp[0];
|
||||
info->colf[1] = fp[1];
|
||||
info->colf[2] = fp[2];
|
||||
info->colf[3] = 1.0f;
|
||||
}
|
||||
else {
|
||||
info->colf[0] = fp[0];
|
||||
info->colf[1] = fp[0];
|
||||
info->colf[2] = fp[0];
|
||||
info->colf[3] = 1.0f;
|
||||
}
|
||||
info->colfp = info->colf;
|
||||
|
||||
copy_v4_v4(info->linearcol, info->colf);
|
||||
|
@ -2965,10 +2979,16 @@ static void image_sample_apply(bContext *C, wmOperator *op, const wmEvent *event
|
|||
if (ibuf->zbuf) {
|
||||
info->z = ibuf->zbuf[y * ibuf->x + x];
|
||||
info->zp = &info->z;
|
||||
if (ibuf->zbuf == (int*)ibuf->rect) {
|
||||
info->colp = NULL;
|
||||
}
|
||||
}
|
||||
if (ibuf->zbuf_float) {
|
||||
info->zf = ibuf->zbuf_float[y * ibuf->x + x];
|
||||
info->zfp = &info->zf;
|
||||
if (ibuf->zbuf_float == ibuf->rect_float) {
|
||||
info->colfp = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
if (curve_mapping && ibuf->channels == 4) {
|
||||
|
|
Loading…
Reference in New Issue