Color Management: fix for tiled image draw and remove unused code

This commit is contained in:
Sergey Sharybin
2012-09-05 12:14:09 +00:00
parent 201583592f
commit ade9acca41
2 changed files with 18 additions and 64 deletions

View File

@@ -247,19 +247,6 @@ static void draw_movieclip_notes(SpaceClip *sc, ARegion *ar)
ED_region_info_draw(ar, str, block, 0.6f);
}
/* OCIO_TODO: after finishing proper color management pipeline integration
* this wouldn't be needed -- color managed display buffer
* would be used unstead
*/
#if 0
static void verify_buffer_float(ImBuf *ibuf)
{
if (ibuf->rect_float && (ibuf->rect == NULL || (ibuf->userflags & IB_RECT_INVALID))) {
IMB_rect_from_float(ibuf);
}
}
#endif
static void draw_movieclip_buffer(const bContext *C, SpaceClip *sc, ARegion *ar, ImBuf *ibuf,
int width, int height, float zoomx, float zoomy)
{
@@ -277,9 +264,6 @@ static void draw_movieclip_buffer(const bContext *C, SpaceClip *sc, ARegion *ar,
unsigned char *display_buffer;
void *cache_handle;
/* OCIO_TODO: finally get rid of this stuff */
/* verify_buffer_float(ibuf); */
display_buffer = IMB_display_buffer_acquire_ctx(C, ibuf, &cache_handle);
if (display_buffer) {

View File

@@ -80,36 +80,6 @@
#define HEADER_HEIGHT 18
/* OCIO_TODO: after finishing proper color management pipeline integration
* this wouldn't be needed -- color managed display buffer
* would be used unstead
*/
static void image_verify_buffer_float(Image *ima, ImBuf *ibuf, int color_manage)
{
/* detect if we need to redo the curve map.
* ibuf->rect is zero for compositor and render results after change
* convert to 32 bits always... drawing float rects isn't supported well (atis)
*
* NOTE: if float buffer changes, we have to manually remove the rect
*/
if (ibuf->rect_float && (ibuf->rect == NULL || (ibuf->userflags & IB_RECT_INVALID)) ) {
if (color_manage) {
if (ima && ima->source == IMA_SRC_VIEWER)
ibuf->profile = IB_PROFILE_LINEAR_RGB;
}
else
ibuf->profile = IB_PROFILE_NONE;
/* OCIO_TODO: currently only get rid of old-style color managed byte
* buffer calculation to save some time on buffer display,
* but still need to set image buffer's profile to prevent
* comatibility breackage
*/
/* IMB_rect_from_float(ibuf); */
}
}
static void draw_render_info(Scene *scene, Image *ima, ARegion *ar)
{
RenderResult *rr;
@@ -442,10 +412,9 @@ static void sima_draw_zbuffloat_pixels(Scene *scene, float x1, float y1, int rec
MEM_freeN(rectf);
}
static void draw_image_buffer(const bContext *C, SpaceImage *sima, ARegion *ar, Scene *scene, Image *ima, ImBuf *ibuf, float fx, float fy, float zoomx, float zoomy)
static void draw_image_buffer(const bContext *C, SpaceImage *sima, ARegion *ar, Scene *scene, ImBuf *ibuf, float fx, float fy, float zoomx, float zoomy)
{
int x, y;
int color_manage = scene->r.color_mgt_flag & R_COLOR_MANAGEMENT;
/* set zoom */
glPixelZoom(zoomx, zoomy);
@@ -479,10 +448,6 @@ static void draw_image_buffer(const bContext *C, SpaceImage *sima, ARegion *ar,
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
}
/* we don't draw floats buffers directly but
* convert them, and optionally apply curves */
image_verify_buffer_float(ima, ibuf, color_manage);
display_buffer = IMB_display_buffer_acquire_ctx(C, ibuf, &cache_handle);
if (display_buffer)
@@ -502,14 +467,14 @@ static void draw_image_buffer(const bContext *C, SpaceImage *sima, ARegion *ar,
glPixelZoom(1.0f, 1.0f);
}
static unsigned int *get_part_from_ibuf(ImBuf *ibuf, short startx, short starty, short endx, short endy)
static unsigned int *get_part_from_buffer(unsigned int *buffer, int width, short startx, short starty, short endx, short endy)
{
unsigned int *rt, *rp, *rectmain;
short y, heigth, len;
/* the right offset in rectot */
rt = ibuf->rect + (starty * ibuf->x + startx);
rt = buffer + (starty * width + startx);
len = (endx - startx);
heigth = (endy - starty);
@@ -518,7 +483,7 @@ static unsigned int *get_part_from_ibuf(ImBuf *ibuf, short startx, short starty,
for (y = 0; y < heigth; y++) {
memcpy(rp, rt, len * 4);
rt += ibuf->x;
rt += width;
rp += len;
}
return rectmain;
@@ -526,28 +491,31 @@ static unsigned int *get_part_from_ibuf(ImBuf *ibuf, short startx, short starty,
static void draw_image_buffer_tiled(SpaceImage *sima, ARegion *ar, Scene *scene, Image *ima, ImBuf *ibuf, float fx, float fy, float zoomx, float zoomy)
{
unsigned int *rect;
unsigned int *display_buffer, *rect;
int dx, dy, sx, sy, x, y;
int color_manage = scene->r.color_mgt_flag & R_COLOR_MANAGEMENT;
void *cache_handle;
/* verify valid values, just leave this a while */
if (ima->xrep < 1) return;
if (ima->yrep < 1) return;
display_buffer = (unsigned int *) IMB_display_buffer_acquire(ibuf, &scene->view_settings,
&scene->display_settings, &cache_handle);
if (!display_buffer)
return;
glPixelZoom(zoomx, zoomy);
if (sima->curtile >= ima->xrep * ima->yrep)
sima->curtile = ima->xrep * ima->yrep - 1;
/* create char buffer from float if needed */
image_verify_buffer_float(ima, ibuf, color_manage);
/* retrieve part of image buffer */
dx = ibuf->x / ima->xrep;
dy = ibuf->y / ima->yrep;
sx = (sima->curtile % ima->xrep) * dx;
sy = (sima->curtile / ima->xrep) * dy;
rect = get_part_from_ibuf(ibuf, sx, sy, sx + dx, sy + dy);
rect = get_part_from_buffer(display_buffer, ibuf->x, sx, sy, sx + dx, sy + dy);
/* draw repeated */
for (sy = 0; sy + dy <= ibuf->y; sy += dy) {
@@ -560,6 +528,8 @@ static void draw_image_buffer_tiled(SpaceImage *sima, ARegion *ar, Scene *scene,
glPixelZoom(1.0f, 1.0f);
IMB_display_buffer_release(cache_handle);
MEM_freeN(rect);
}
@@ -580,7 +550,7 @@ static void draw_image_buffer_repeated(const bContext *C, SpaceImage *sima, AReg
if (ima && (ima->tpageflag & IMA_TILES))
draw_image_buffer_tiled(sima, ar, scene, ima, ibuf, x, y, zoomx, zoomy);
else
draw_image_buffer(C, sima, ar, scene, ima, ibuf, x, y, zoomx, zoomy);
draw_image_buffer(C, sima, ar, scene, ibuf, x, y, zoomx, zoomy);
/* only draw until running out of time */
if ((PIL_check_seconds_timer() - time_current) > 0.25)
@@ -798,7 +768,7 @@ void draw_image_main(const bContext *C, ARegion *ar)
else if (ima && (ima->tpageflag & IMA_TILES))
draw_image_buffer_tiled(sima, ar, scene, ima, ibuf, 0.0f, 0.0, zoomx, zoomy);
else
draw_image_buffer(C, sima, ar, scene, ima, ibuf, 0.0f, 0.0f, zoomx, zoomy);
draw_image_buffer(C, sima, ar, scene, ibuf, 0.0f, 0.0f, zoomx, zoomy);
/* paint helpers */
if (sima->mode == SI_MODE_PAINT)