diff options
Diffstat (limited to 'honey/image.lua')
-rw-r--r-- | honey/image.lua | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/honey/image.lua b/honey/image.lua new file mode 100644 index 0000000..f074272 --- /dev/null +++ b/honey/image.lua @@ -0,0 +1,50 @@ +local gl = honey.gl + +local module = {} +setmetatable(module, {__index=_G}) +setfenv(1, module) + +function Image(filename, params) + local params = params or {} + local data, width, height = honey.image.load(filename, 4) + local self = {} + self.width = width + self.height = height + + self.texture = gl.GenTextures() + gl.BindTexture(gl.TEXTURE_2D, self.texture) + for param, value in pairs(params) do + gl.TexParameteri(gl.TEXTURE_2D, gl[param], value) + end + gl.TexImage2D( + gl.TEXTURE_2D, 0, + gl.RGBA, width, height, + gl.RGBA, gl.UNSIGNED_BYTE, data + ) + gl.GenerateMipmap(gl.TEXTURE_2D) + honey.image.destroy(data) + + self.__gc = honey.util.gc_canary(function() + gl.DeleteTextures(self.texture) + end) + + return self +end + + +local cache = {} +function loadImage(filename, params) + if not cache[filename] then + local img = Image(filename, params) + cache[filename] = img + return img + end + + return cache[filename] +end + +function clearImageCache() + cache = {} +end + +return module |