[Bf-blender-cvs] [58feee2b1a7] temp-T98375-share-gpu-textures: Moved enum to image_gpu.

Jeroen Bakker noreply at git.blender.org
Mon May 30 16:04:25 CEST 2022


Commit: 58feee2b1a75b504dbb1f78e40fdae243ba602ba
Author: Jeroen Bakker
Date:   Mon May 30 16:04:21 2022 +0200
Branches: temp-T98375-share-gpu-textures
https://developer.blender.org/rB58feee2b1a75b504dbb1f78e40fdae243ba602ba

Moved enum to image_gpu.

===================================================================

M	source/blender/blenkernel/intern/image_gpu.cc
M	source/blender/blenkernel/intern/movieclip.c
M	source/blender/makesdna/DNA_image_types.h
M	source/blender/makesdna/DNA_movieclip_types.h

===================================================================

diff --git a/source/blender/blenkernel/intern/image_gpu.cc b/source/blender/blenkernel/intern/image_gpu.cc
index d0d9234f9ab..476c0b23fe5 100644
--- a/source/blender/blenkernel/intern/image_gpu.cc
+++ b/source/blender/blenkernel/intern/image_gpu.cc
@@ -38,6 +38,15 @@
 using namespace blender::bke::image::partial_update;
 
 namespace blender::bke::image::gpu {
+
+/* Used to get the correct gpu texture from an Image datablock. */
+typedef enum eGPUTextureTarget {
+  TEXTARGET_2D = 0,
+  TEXTARGET_2D_ARRAY,
+  TEXTARGET_TILE_MAPPING,
+  TEXTARGET_COUNT,
+} eGPUTextureTarget;
+
 struct ImageGPUTextureStore {
   class Entry : NonCopyable {
    public:
diff --git a/source/blender/blenkernel/intern/movieclip.c b/source/blender/blenkernel/intern/movieclip.c
index 19ee2ba6605..cdf70bf742c 100644
--- a/source/blender/blenkernel/intern/movieclip.c
+++ b/source/blender/blenkernel/intern/movieclip.c
@@ -1642,12 +1642,7 @@ static void free_buffers(MovieClip *clip)
 
   MovieClip_RuntimeGPUTexture *tex;
   for (tex = clip->runtime.gputextures.first; tex; tex = tex->next) {
-    for (int i = 0; i < TEXTARGET_COUNT; i++) {
-      if (tex->gputexture[i] != NULL) {
-        GPU_texture_free(tex->gputexture[i]);
-        tex->gputexture[i] = NULL;
-      }
-    }
+    GPU_TEXTURE_FREE_SAFE(tex->gputexture);
   }
   BLI_freelistN(&clip->runtime.gputextures);
 }
@@ -2035,9 +2030,7 @@ void BKE_movieclip_eval_selection_update(struct Depsgraph *depsgraph, MovieClip
 /** \name GPU textures
  * \{ */
 
-static GPUTexture **movieclip_get_gputexture_ptr(MovieClip *clip,
-                                                 MovieClipUser *cuser,
-                                                 eGPUTextureTarget textarget)
+static GPUTexture **movieclip_get_gputexture_ptr(MovieClip *clip, MovieClipUser *cuser)
 {
   /* Check if we have an existing entry for that clip user. */
   MovieClip_RuntimeGPUTexture *tex;
@@ -2051,16 +2044,13 @@ static GPUTexture **movieclip_get_gputexture_ptr(MovieClip *clip,
   if (tex == NULL) {
     tex = (MovieClip_RuntimeGPUTexture *)MEM_mallocN(sizeof(MovieClip_RuntimeGPUTexture),
                                                      __func__);
-
-    for (int i = 0; i < TEXTARGET_COUNT; i++) {
-      tex->gputexture[i] = NULL;
-    }
+    tex->gputexture = NULL;
 
     memcpy(&tex->user, cuser, sizeof(MovieClipUser));
     BLI_addtail(&clip->runtime.gputextures, tex);
   }
 
-  return &tex->gputexture[textarget];
+  return &tex->gputexture;
 }
 
 GPUTexture *BKE_movieclip_get_gpu_texture(MovieClip *clip, MovieClipUser *cuser)
@@ -2069,7 +2059,7 @@ GPUTexture *BKE_movieclip_get_gpu_texture(MovieClip *clip, MovieClipUser *cuser)
     return NULL;
   }
 
-  GPUTexture **tex = movieclip_get_gputexture_ptr(clip, cuser, TEXTARGET_2D);
+  GPUTexture **tex = movieclip_get_gputexture_ptr(clip, cuser);
   if (*tex) {
     return *tex;
   }
@@ -2105,13 +2095,7 @@ void BKE_movieclip_free_gputexture(struct MovieClip *clip)
   while (BLI_listbase_count(&clip->runtime.gputextures) > MOVIECLIP_NUM_GPUTEXTURES) {
     MovieClip_RuntimeGPUTexture *tex = (MovieClip_RuntimeGPUTexture *)BLI_pophead(
         &clip->runtime.gputextures);
-    for (int i = 0; i < TEXTARGET_COUNT; i++) {
-      /* free glsl image binding */
-      if (tex->gputexture[i]) {
-        GPU_texture_free(tex->gputexture[i]);
-        tex->gputexture[i] = NULL;
-      }
-    }
+    GPU_TEXTURE_FREE_SAFE(tex->gputexture);
     MEM_freeN(tex);
   }
 }
diff --git a/source/blender/makesdna/DNA_image_types.h b/source/blender/makesdna/DNA_image_types.h
index beef410d362..48fe7608522 100644
--- a/source/blender/makesdna/DNA_image_types.h
+++ b/source/blender/makesdna/DNA_image_types.h
@@ -105,14 +105,6 @@ typedef struct ImageTile {
 #define IMA_SHOW_STEREO (1 << 4)
 /* #define IMA_UNUSED_5         (1 << 5) */
 
-/* Used to get the correct gpu texture from an Image datablock. */
-typedef enum eGPUTextureTarget {
-  TEXTARGET_2D = 0,
-  TEXTARGET_2D_ARRAY,
-  TEXTARGET_TILE_MAPPING,
-  TEXTARGET_COUNT,
-} eGPUTextureTarget;
-
 /* Defined in BKE_image.h. */
 struct PartialUpdateRegister;
 struct PartialUpdateUser;
@@ -137,8 +129,6 @@ typedef struct Image {
 
   /** Not written in file. */
   struct MovieCache *cache;
-  /** Not written in file 3 = TEXTARGET_COUNT, 2 = stereo eyes. */
-  // struct GPUTexture *gputexture[3][2];
 
   /* sources from: */
   ListBase anims;
diff --git a/source/blender/makesdna/DNA_movieclip_types.h b/source/blender/makesdna/DNA_movieclip_types.h
index a262baf6a2b..0d53af32989 100644
--- a/source/blender/makesdna/DNA_movieclip_types.h
+++ b/source/blender/makesdna/DNA_movieclip_types.h
@@ -47,8 +47,7 @@ typedef struct MovieClipProxy {
 typedef struct MovieClip_RuntimeGPUTexture {
   void *next, *prev;
   MovieClipUser user;
-  /** Not written in file 3 = TEXTARGET_COUNT. */
-  struct GPUTexture *gputexture[3];
+  struct GPUTexture *gputexture;
 } MovieClip_RuntimeGPUTexture;
 
 typedef struct MovieClip_Runtime {



More information about the Bf-blender-cvs mailing list