diff options
| author | Tim Keller <tjkeller.xyz> | 2025-05-25 21:38:37 -0500 |
|---|---|---|
| committer | Tim Keller <tjkeller.xyz> | 2025-05-25 21:38:37 -0500 |
| commit | e1a6fc09afc088dcb67263ed5923f5be41c32c31 (patch) | |
| tree | a3f80830180881ed4b55687b0870f83bdc006b2b /texture.py | |
| parent | 31f1940ec8c4aba6a0c21b20eff9657d5d11cf80 (diff) | |
| download | immich-frame-e1a6fc09afc088dcb67263ed5923f5be41c32c31.tar.xz immich-frame-e1a6fc09afc088dcb67263ed5923f5be41c32c31.zip | |
use lazy caching texture list to limit number of images loaded at one time
Diffstat (limited to 'texture.py')
| -rw-r--r-- | texture.py | 26 |
1 files changed, 25 insertions, 1 deletions
@@ -3,6 +3,7 @@ from OpenGL.GLUT import * from OpenGL.GLU import * from PIL import Image, ExifTags + class ImageTexture: def __init__(self, image_source, exif=None): self.id = None @@ -13,6 +14,7 @@ class ImageTexture: self.width = img.width self.height = img.height self._img_data = img.tobytes("raw", "RGBA", 0, -1) # Convert image data to bytes + self.initialized = True def gl_init(self): if self.id: @@ -26,7 +28,14 @@ class ImageTexture: glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR) del self._img_data # No longer needed, clear mem - print(f"Loaded texture {self.id}") + #print(f"Loaded texture {self.id}") + + def free(self): + if self.id is None: + del self._img_data + else: + glBindTexture(GL_TEXTURE_2D, 0) # Unbind + glDeleteTextures([self.id]) @staticmethod def get_exif(img): @@ -41,3 +50,18 @@ class ImageTexture: if orientation == 8: return img.rotate( 90, expand=True) return img + + +class ImageTextureImmichAsset(ImageTexture): + def __init__(self, asset, asset_index): + self.initialized = False + self.asset_index = asset_index + self.asset_key = asset["id"] + self.exif = asset.get("exif", None) + + # So that free can work + self.id = None + self._img_data = None + + def initialize(self, image_source): + super().__init__(image_source, self.exif) |
