Changeset View
Changeset View
Standalone View
Standalone View
source/blender/draw/engines/image/image_engine.c
| Show First 20 Lines • Show All 107 Lines • ▼ Show 20 Lines | static void space_image_gpu_texture_get(Image *image, | ||||
| SpaceImage *sima = (SpaceImage *)draw_ctx->space_data; | SpaceImage *sima = (SpaceImage *)draw_ctx->space_data; | ||||
| if (BKE_image_is_multilayer(image)) { | if (BKE_image_is_multilayer(image)) { | ||||
| /* update multiindex and pass for the current eye */ | /* update multiindex and pass for the current eye */ | ||||
| BKE_image_multilayer_index(image->rr, &sima->iuser); | BKE_image_multilayer_index(image->rr, &sima->iuser); | ||||
| } | } | ||||
| BKE_image_multiview_index(image, &sima->iuser); | BKE_image_multiview_index(image, &sima->iuser); | ||||
| if (ibuf) { | if (ibuf) { | ||||
| if (sima->flag & SI_SHOW_ZBUF && (ibuf->zbuf || ibuf->zbuf_float || (ibuf->channels == 1))) { | const int sima_flag = sima->flag & ED_space_image_get_display_channel_mask(ibuf); | ||||
| if (sima_flag & SI_SHOW_ZBUF && (ibuf->zbuf || ibuf->zbuf_float || (ibuf->channels == 1))) { | |||||
| if (ibuf->zbuf) { | if (ibuf->zbuf) { | ||||
| BLI_assert(!"Integer based depth buffers not supported"); | BLI_assert(!"Integer based depth buffers not supported"); | ||||
| } | } | ||||
| else if (ibuf->zbuf_float) { | else if (ibuf->zbuf_float) { | ||||
| *r_gpu_texture = GPU_texture_create_2d( | *r_gpu_texture = GPU_texture_create_2d( | ||||
| __func__, ibuf->x, ibuf->y, 0, GPU_R16F, ibuf->zbuf_float); | __func__, ibuf->x, ibuf->y, 0, GPU_R16F, ibuf->zbuf_float); | ||||
| *r_owns_texture = true; | *r_owns_texture = true; | ||||
| } | } | ||||
| ▲ Show 20 Lines • Show All 74 Lines • ▼ Show 20 Lines | if (pd->texture) { | ||||
| } | } | ||||
| const bool use_premul_alpha = BKE_image_has_gpu_texture_premultiplied_alpha(image, ibuf); | const bool use_premul_alpha = BKE_image_has_gpu_texture_premultiplied_alpha(image, ibuf); | ||||
| const bool is_tiled_texture = tex_tile_data != NULL; | const bool is_tiled_texture = tex_tile_data != NULL; | ||||
| int draw_flags = 0; | int draw_flags = 0; | ||||
| if (space_type == SPACE_IMAGE) { | if (space_type == SPACE_IMAGE) { | ||||
| SpaceImage *sima = (SpaceImage *)draw_ctx->space_data; | SpaceImage *sima = (SpaceImage *)draw_ctx->space_data; | ||||
| const int sima_flag = sima->flag & ED_space_image_get_display_channel_mask(ibuf); | |||||
| const bool do_repeat = (!is_tiled_texture) && ((sima->flag & SI_DRAW_TILE) != 0); | const bool do_repeat = (!is_tiled_texture) && ((sima->flag & SI_DRAW_TILE) != 0); | ||||
| SET_FLAG_FROM_TEST(draw_flags, do_repeat, IMAGE_DRAW_FLAG_DO_REPEAT); | SET_FLAG_FROM_TEST(draw_flags, do_repeat, IMAGE_DRAW_FLAG_DO_REPEAT); | ||||
| SET_FLAG_FROM_TEST(draw_flags, is_tiled_texture, IMAGE_DRAW_FLAG_USE_WORLD_POS); | SET_FLAG_FROM_TEST(draw_flags, is_tiled_texture, IMAGE_DRAW_FLAG_USE_WORLD_POS); | ||||
| if ((sima->flag & SI_USE_ALPHA) != 0) { | if ((sima_flag & SI_USE_ALPHA) != 0) { | ||||
| /* Show RGBA */ | /* Show RGBA */ | ||||
| draw_flags |= IMAGE_DRAW_FLAG_SHOW_ALPHA | IMAGE_DRAW_FLAG_APPLY_ALPHA; | draw_flags |= IMAGE_DRAW_FLAG_SHOW_ALPHA | IMAGE_DRAW_FLAG_APPLY_ALPHA; | ||||
| } | } | ||||
| else if ((sima->flag & SI_SHOW_ALPHA) != 0) { | else if ((sima_flag & SI_SHOW_ALPHA) != 0) { | ||||
| draw_flags |= IMAGE_DRAW_FLAG_SHUFFLING; | draw_flags |= IMAGE_DRAW_FLAG_SHUFFLING; | ||||
| copy_v4_fl4(shuffle, 0.0f, 0.0f, 0.0f, 1.0f); | copy_v4_fl4(shuffle, 0.0f, 0.0f, 0.0f, 1.0f); | ||||
| } | } | ||||
| else if ((sima->flag & SI_SHOW_ZBUF) != 0) { | else if ((sima_flag & SI_SHOW_ZBUF) != 0) { | ||||
| draw_flags |= IMAGE_DRAW_FLAG_DEPTH | IMAGE_DRAW_FLAG_SHUFFLING; | draw_flags |= IMAGE_DRAW_FLAG_DEPTH | IMAGE_DRAW_FLAG_SHUFFLING; | ||||
| copy_v4_fl4(shuffle, 1.0f, 0.0f, 0.0f, 0.0f); | copy_v4_fl4(shuffle, 1.0f, 0.0f, 0.0f, 0.0f); | ||||
| } | } | ||||
| else if ((sima->flag & SI_SHOW_R) != 0) { | else if ((sima_flag & SI_SHOW_R) != 0) { | ||||
| draw_flags |= IMAGE_DRAW_FLAG_APPLY_ALPHA | IMAGE_DRAW_FLAG_SHUFFLING; | draw_flags |= IMAGE_DRAW_FLAG_APPLY_ALPHA | IMAGE_DRAW_FLAG_SHUFFLING; | ||||
| copy_v4_fl4(shuffle, 1.0f, 0.0f, 0.0f, 0.0f); | copy_v4_fl4(shuffle, 1.0f, 0.0f, 0.0f, 0.0f); | ||||
| } | } | ||||
| else if ((sima->flag & SI_SHOW_G) != 0) { | else if ((sima_flag & SI_SHOW_G) != 0) { | ||||
| draw_flags |= IMAGE_DRAW_FLAG_APPLY_ALPHA | IMAGE_DRAW_FLAG_SHUFFLING; | draw_flags |= IMAGE_DRAW_FLAG_APPLY_ALPHA | IMAGE_DRAW_FLAG_SHUFFLING; | ||||
| copy_v4_fl4(shuffle, 0.0f, 1.0f, 0.0f, 0.0f); | copy_v4_fl4(shuffle, 0.0f, 1.0f, 0.0f, 0.0f); | ||||
| } | } | ||||
| else if ((sima->flag & SI_SHOW_B) != 0) { | else if ((sima_flag & SI_SHOW_B) != 0) { | ||||
| draw_flags |= IMAGE_DRAW_FLAG_APPLY_ALPHA | IMAGE_DRAW_FLAG_SHUFFLING; | draw_flags |= IMAGE_DRAW_FLAG_APPLY_ALPHA | IMAGE_DRAW_FLAG_SHUFFLING; | ||||
| copy_v4_fl4(shuffle, 0.0f, 0.0f, 1.0f, 0.0f); | copy_v4_fl4(shuffle, 0.0f, 0.0f, 1.0f, 0.0f); | ||||
| } | } | ||||
| else /* RGB */ { | else /* RGB */ { | ||||
| draw_flags |= IMAGE_DRAW_FLAG_APPLY_ALPHA; | draw_flags |= IMAGE_DRAW_FLAG_APPLY_ALPHA; | ||||
| } | } | ||||
| } | } | ||||
| if (space_type == SPACE_NODE) { | if (space_type == SPACE_NODE) { | ||||
| ▲ Show 20 Lines • Show All 179 Lines • Show Last 20 Lines | |||||