mirror of
https://git.sr.ht/~eliasnaur/gio
synced 2026-07-05 09:25:38 +00:00
gpu: implement automatic mipmaps for images
All GPU APIs except OpenGL ES 2 can generate mipmaps for textures. This trades 33% more GPU memory use for improved rendering quality and speed for downscaled images. Signed-off-by: Elias Naur <mail@eliasnaur.com>
This commit is contained in:
@@ -72,6 +72,7 @@ typedef void (*_glFlush)(void);
|
||||
typedef void (*_glFramebufferRenderbuffer)(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
|
||||
typedef void (*_glFramebufferTexture2D)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
|
||||
typedef void (*_glGenBuffers)(GLsizei n, GLuint *buffers);
|
||||
typedef void (*_glGenerateMipmap)(GLenum target);
|
||||
typedef void (*_glGenFramebuffers)(GLsizei n, GLuint *framebuffers);
|
||||
typedef void (*_glGenRenderbuffers)(GLsizei n, GLuint *renderbuffers);
|
||||
typedef void (*_glGenTextures)(GLsizei n, GLuint *textures);
|
||||
@@ -286,6 +287,10 @@ static void glGenBuffers(_glGenBuffers f, GLsizei n, GLuint *buffers) {
|
||||
f(n, buffers);
|
||||
}
|
||||
|
||||
static void glGenerateMipmap(_glGenerateMipmap f, GLenum target) {
|
||||
f(target);
|
||||
}
|
||||
|
||||
static void glGenFramebuffers(_glGenFramebuffers f, GLsizei n, GLuint *framebuffers) {
|
||||
f(n, framebuffers);
|
||||
}
|
||||
@@ -561,6 +566,7 @@ type Functions struct {
|
||||
glFramebufferRenderbuffer C._glFramebufferRenderbuffer
|
||||
glFramebufferTexture2D C._glFramebufferTexture2D
|
||||
glGenBuffers C._glGenBuffers
|
||||
glGenerateMipmap C._glGenerateMipmap
|
||||
glGenFramebuffers C._glGenFramebuffers
|
||||
glGenRenderbuffers C._glGenRenderbuffers
|
||||
glGenTextures C._glGenTextures
|
||||
@@ -723,6 +729,7 @@ func (f *Functions) load(forceES bool) error {
|
||||
f.glFramebufferRenderbuffer = must("glFramebufferRenderbuffer")
|
||||
f.glFramebufferTexture2D = must("glFramebufferTexture2D")
|
||||
f.glGenBuffers = must("glGenBuffers")
|
||||
f.glGenerateMipmap = must("glGenerateMipmap")
|
||||
f.glGenFramebuffers = must("glGenFramebuffers")
|
||||
f.glGenRenderbuffers = must("glGenRenderbuffers")
|
||||
f.glGenTextures = must("glGenTextures")
|
||||
@@ -1048,6 +1055,10 @@ func (f *Functions) FramebufferTexture2D(target, attachment, texTarget Enum, t T
|
||||
C.glFramebufferTexture2D(f.glFramebufferTexture2D, C.GLenum(target), C.GLenum(attachment), C.GLenum(texTarget), C.GLuint(t.V), C.GLint(level))
|
||||
}
|
||||
|
||||
func (f *Functions) GenerateMipmap(target Enum) {
|
||||
C.glGenerateMipmap(f.glGenerateMipmap, C.GLenum(target))
|
||||
}
|
||||
|
||||
func (c *Functions) GetBinding(pname Enum) Object {
|
||||
return Object{uint(c.GetInteger(pname))}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user