app/internal/gl: lazy load blitting program and quad in SRGBFBO

Signed-off-by: Elias Naur <mail@eliasnaur.com>
This commit is contained in:
Elias Naur
2019-11-28 15:28:28 +01:00
parent f9f6f2d3ea
commit 14dad238f3
+25 -19
View File
@@ -17,6 +17,7 @@ type SRGBFBO struct {
frameBuffer Framebuffer frameBuffer Framebuffer
depthBuffer Renderbuffer depthBuffer Renderbuffer
colorTex Texture colorTex Texture
blitted bool
quad Buffer quad Buffer
prog Program prog Program
es3 bool es3 bool
@@ -37,30 +38,13 @@ func NewSRGBFBO(f *Functions) (*SRGBFBO, error) {
return nil, fmt.Errorf("no support for OpenGL ES 3 nor EXT_sRGB") return nil, fmt.Errorf("no support for OpenGL ES 3 nor EXT_sRGB")
} }
} }
prog, err := CreateProgram(f, blitVSrc, blitFSrc, []string{"pos", "uv"})
if err != nil {
return nil, err
}
f.UseProgram(prog)
f.Uniform1i(GetUniformLocation(f, prog, "tex"), 0)
s := &SRGBFBO{ s := &SRGBFBO{
c: f, c: f,
es3: es3, es3: es3,
prog: prog,
frameBuffer: f.CreateFramebuffer(), frameBuffer: f.CreateFramebuffer(),
colorTex: f.CreateTexture(), colorTex: f.CreateTexture(),
depthBuffer: f.CreateRenderbuffer(), depthBuffer: f.CreateRenderbuffer(),
} }
s.quad = f.CreateBuffer()
f.BindBuffer(ARRAY_BUFFER, s.quad)
f.BufferData(ARRAY_BUFFER,
BytesView([]float32{
-1, +1, 0, 1,
+1, +1, 1, 1,
-1, -1, 0, 0,
+1, -1, 1, 0,
}),
STATIC_DRAW)
f.BindTexture(TEXTURE_2D, s.colorTex) f.BindTexture(TEXTURE_2D, s.colorTex)
f.TexParameteri(TEXTURE_2D, TEXTURE_WRAP_S, CLAMP_TO_EDGE) f.TexParameteri(TEXTURE_2D, TEXTURE_WRAP_S, CLAMP_TO_EDGE)
f.TexParameteri(TEXTURE_2D, TEXTURE_WRAP_T, CLAMP_TO_EDGE) f.TexParameteri(TEXTURE_2D, TEXTURE_WRAP_T, CLAMP_TO_EDGE)
@@ -70,6 +54,26 @@ func NewSRGBFBO(f *Functions) (*SRGBFBO, error) {
} }
func (s *SRGBFBO) Blit() { func (s *SRGBFBO) Blit() {
if !s.blitted {
prog, err := CreateProgram(s.c, blitVSrc, blitFSrc, []string{"pos", "uv"})
if err != nil {
panic(err)
}
s.prog = prog
s.c.UseProgram(prog)
s.c.Uniform1i(GetUniformLocation(s.c, prog, "tex"), 0)
s.quad = s.c.CreateBuffer()
s.c.BindBuffer(ARRAY_BUFFER, s.quad)
s.c.BufferData(ARRAY_BUFFER,
BytesView([]float32{
-1, +1, 0, 1,
+1, +1, 1, 1,
-1, -1, 0, 0,
+1, -1, 1, 0,
}),
STATIC_DRAW)
s.blitted = true
}
s.c.BindFramebuffer(FRAMEBUFFER, Framebuffer{}) s.c.BindFramebuffer(FRAMEBUFFER, Framebuffer{})
s.c.ClearColor(1, 0, 1, 1) s.c.ClearColor(1, 0, 1, 1)
s.c.Clear(COLOR_BUFFER_BIT) s.c.Clear(COLOR_BUFFER_BIT)
@@ -141,8 +145,10 @@ func (s *SRGBFBO) Release() {
s.c.DeleteFramebuffer(s.frameBuffer) s.c.DeleteFramebuffer(s.frameBuffer)
s.c.DeleteTexture(s.colorTex) s.c.DeleteTexture(s.colorTex)
s.c.DeleteRenderbuffer(s.depthBuffer) s.c.DeleteRenderbuffer(s.depthBuffer)
s.c.DeleteBuffer(s.quad) if s.blitted {
s.c.DeleteProgram(s.prog) s.c.DeleteBuffer(s.quad)
s.c.DeleteProgram(s.prog)
}
s.c = nil s.c = nil
} }