tofu

Making something with OpenGL in Go
Log | Files | Refs

commit 7b2d19954b7f75dfe6c90e7618d60010f261277d
parent a725c6588d5bdc8bd850bd3d90d48590da3f8f83
Author: Matsuda Kenji <info@mtkn.jp>
Date:   Tue,  3 Dec 2024 08:29:28 +0900

move texture unit to program struct

Diffstat:
Mshader.go | 11+++++++----
Mtexture.go | 9++-------
2 files changed, 9 insertions(+), 11 deletions(-)

diff --git a/shader.go b/shader.go @@ -63,8 +63,9 @@ func linkShaders(vsID, fsID uint32) (shaderID uint32, err error) { } type Program struct { - id uint32 - Uniforms any + id uint32 + Uniforms any + nextTextureUnit uint32 // 0-indexed } // NewProgram creates a shader program from a vertex shader source file @@ -94,6 +95,7 @@ func (p *Program) Use() { } func (p *Program) SetUniforms() error { + p.nextTextureUnit = 0 return p.setUniforms(p.Uniforms, "") } @@ -198,12 +200,13 @@ func (p *Program) SetMat4(name string, val Mat4) error { func (p *Program) SetTexture(name string, t *Texture) error { p.Use() - gl.ActiveTexture(t.unit) + gl.ActiveTexture(p.nextTextureUnit + gl.TEXTURE0) gl.BindTexture(gl.TEXTURE_2D, t.id) l := gl.GetUniformLocation(p.id, gl.Str(name+"\x00")) if l == -1 { return fmt.Errorf("no such uniform: %s", name) } - gl.Uniform1i(l, int32(t.unit-gl.TEXTURE0)) + gl.Uniform1i(l, int32(p.nextTextureUnit)) + p.nextTextureUnit++ return nil } diff --git a/texture.go b/texture.go @@ -25,12 +25,9 @@ func loadImage(name string) (image.Image, error) { } type Texture struct { - id uint32 - unit uint32 + id uint32 } -var nextUnit uint32 = gl.TEXTURE0 - func NewTexture(name string) (*Texture, error) { return NewTextureFlip(name, false, false) } @@ -62,9 +59,7 @@ func NewTextureFlip(name string, v bool, h bool) (*Texture, error) { int32(rgba.Rect.Dx()), int32(rgba.Rect.Dy()), 0, gl.RGBA, gl.UNSIGNED_BYTE, gl.Ptr(rgba.Pix)) gl.GenerateMipmap(gl.TEXTURE_2D) - unit := nextUnit - nextUnit++ - return &Texture{id: id, unit: unit}, nil + return &Texture{id: id}, nil } func flipV(img image.Image) image.Image {