mirror of
https://git.sr.ht/~eliasnaur/gio
synced 2026-07-06 09:55:40 +00:00
gpu/internal/opengl: remove "gpu" prefix from type names
Refactor only. Signed-off-by: Elias Naur <mail@eliasnaur.com>
This commit is contained in:
@@ -80,8 +80,8 @@ type glState struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type state struct {
|
type state struct {
|
||||||
prog *gpuProgram
|
prog *program
|
||||||
layout *gpuInputLayout
|
layout *inputLayout
|
||||||
buffer bufferBinding
|
buffer bufferBinding
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -91,12 +91,12 @@ type bufferBinding struct {
|
|||||||
stride int
|
stride int
|
||||||
}
|
}
|
||||||
|
|
||||||
type gpuTimer struct {
|
type timer struct {
|
||||||
funcs *gl.Functions
|
funcs *gl.Functions
|
||||||
obj gl.Query
|
obj gl.Query
|
||||||
}
|
}
|
||||||
|
|
||||||
type gpuTexture struct {
|
type texture struct {
|
||||||
backend *Backend
|
backend *Backend
|
||||||
obj gl.Texture
|
obj gl.Texture
|
||||||
triple textureTriple
|
triple textureTriple
|
||||||
@@ -104,13 +104,13 @@ type gpuTexture struct {
|
|||||||
height int
|
height int
|
||||||
}
|
}
|
||||||
|
|
||||||
type gpuFramebuffer struct {
|
type framebuffer struct {
|
||||||
backend *Backend
|
backend *Backend
|
||||||
obj gl.Framebuffer
|
obj gl.Framebuffer
|
||||||
foreign bool
|
foreign bool
|
||||||
}
|
}
|
||||||
|
|
||||||
type gpuBuffer struct {
|
type buffer struct {
|
||||||
backend *Backend
|
backend *Backend
|
||||||
hasBuffer bool
|
hasBuffer bool
|
||||||
obj gl.Buffer
|
obj gl.Buffer
|
||||||
@@ -122,18 +122,18 @@ type gpuBuffer struct {
|
|||||||
data []byte
|
data []byte
|
||||||
}
|
}
|
||||||
|
|
||||||
type gpuProgram struct {
|
type program struct {
|
||||||
backend *Backend
|
backend *Backend
|
||||||
obj gl.Program
|
obj gl.Program
|
||||||
vertUniforms uniformsTracker
|
vertUniforms uniformsTracker
|
||||||
fragUniforms uniformsTracker
|
fragUniforms uniformsTracker
|
||||||
storage [storageBindings]*gpuBuffer
|
storage [storageBindings]*buffer
|
||||||
}
|
}
|
||||||
|
|
||||||
type uniformsTracker struct {
|
type uniformsTracker struct {
|
||||||
locs []uniformLocation
|
locs []uniformLocation
|
||||||
size int
|
size int
|
||||||
buf *gpuBuffer
|
buf *buffer
|
||||||
version int
|
version int
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -144,7 +144,7 @@ type uniformLocation struct {
|
|||||||
size int
|
size int
|
||||||
}
|
}
|
||||||
|
|
||||||
type gpuInputLayout struct {
|
type inputLayout struct {
|
||||||
inputs []shader.InputLocation
|
inputs []shader.InputLocation
|
||||||
layout []shader.InputDesc
|
layout []shader.InputDesc
|
||||||
}
|
}
|
||||||
@@ -217,7 +217,7 @@ func (b *Backend) BeginFrame(target driver.RenderTarget, clear bool, viewport im
|
|||||||
switch t := target.(type) {
|
switch t := target.(type) {
|
||||||
case driver.OpenGLRenderTarget:
|
case driver.OpenGLRenderTarget:
|
||||||
renderFBO = gl.Framebuffer(t)
|
renderFBO = gl.Framebuffer(t)
|
||||||
case *gpuFramebuffer:
|
case *framebuffer:
|
||||||
renderFBO = t.obj
|
renderFBO = t.obj
|
||||||
default:
|
default:
|
||||||
panic(fmt.Errorf("opengl: invalid render target type: %T", target))
|
panic(fmt.Errorf("opengl: invalid render target type: %T", target))
|
||||||
@@ -256,7 +256,7 @@ func (b *Backend) BeginFrame(target driver.RenderTarget, clear bool, viewport im
|
|||||||
if b.sRGBFBO != nil && !clear {
|
if b.sRGBFBO != nil && !clear {
|
||||||
b.Clear(0, 0, 0, 0)
|
b.Clear(0, 0, 0, 0)
|
||||||
}
|
}
|
||||||
return &gpuFramebuffer{backend: b, obj: renderFBO, foreign: true}
|
return &framebuffer{backend: b, obj: renderFBO, foreign: true}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b *Backend) EndFrame() {
|
func (b *Backend) EndFrame() {
|
||||||
@@ -623,7 +623,7 @@ func (b *Backend) Caps() driver.Caps {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (b *Backend) NewTimer() driver.Timer {
|
func (b *Backend) NewTimer() driver.Timer {
|
||||||
return &gpuTimer{
|
return &timer{
|
||||||
funcs: b.funcs,
|
funcs: b.funcs,
|
||||||
obj: b.funcs.CreateQuery(),
|
obj: b.funcs.CreateQuery(),
|
||||||
}
|
}
|
||||||
@@ -635,9 +635,9 @@ func (b *Backend) IsTimeContinuous() bool {
|
|||||||
|
|
||||||
func (b *Backend) NewFramebuffer(tex driver.Texture) (driver.Framebuffer, error) {
|
func (b *Backend) NewFramebuffer(tex driver.Texture) (driver.Framebuffer, error) {
|
||||||
glErr(b.funcs)
|
glErr(b.funcs)
|
||||||
gltex := tex.(*gpuTexture)
|
gltex := tex.(*texture)
|
||||||
fb := b.funcs.CreateFramebuffer()
|
fb := b.funcs.CreateFramebuffer()
|
||||||
fbo := &gpuFramebuffer{backend: b, obj: fb}
|
fbo := &framebuffer{backend: b, obj: fb}
|
||||||
b.BindFramebuffer(fbo)
|
b.BindFramebuffer(fbo)
|
||||||
if err := glErr(b.funcs); err != nil {
|
if err := glErr(b.funcs); err != nil {
|
||||||
fbo.Release()
|
fbo.Release()
|
||||||
@@ -653,7 +653,7 @@ func (b *Backend) NewFramebuffer(tex driver.Texture) (driver.Framebuffer, error)
|
|||||||
|
|
||||||
func (b *Backend) NewTexture(format driver.TextureFormat, width, height int, minFilter, magFilter driver.TextureFilter, binding driver.BufferBinding) (driver.Texture, error) {
|
func (b *Backend) NewTexture(format driver.TextureFormat, width, height int, minFilter, magFilter driver.TextureFilter, binding driver.BufferBinding) (driver.Texture, error) {
|
||||||
glErr(b.funcs)
|
glErr(b.funcs)
|
||||||
tex := &gpuTexture{backend: b, obj: b.funcs.CreateTexture(), width: width, height: height}
|
tex := &texture{backend: b, obj: b.funcs.CreateTexture(), width: width, height: height}
|
||||||
switch format {
|
switch format {
|
||||||
case driver.TextureFormatFloat:
|
case driver.TextureFormatFloat:
|
||||||
tex.triple = b.floatTriple
|
tex.triple = b.floatTriple
|
||||||
@@ -684,7 +684,7 @@ func (b *Backend) NewTexture(format driver.TextureFormat, width, height int, min
|
|||||||
|
|
||||||
func (b *Backend) NewBuffer(typ driver.BufferBinding, size int) (driver.Buffer, error) {
|
func (b *Backend) NewBuffer(typ driver.BufferBinding, size int) (driver.Buffer, error) {
|
||||||
glErr(b.funcs)
|
glErr(b.funcs)
|
||||||
buf := &gpuBuffer{backend: b, typ: typ, size: size}
|
buf := &buffer{backend: b, typ: typ, size: size}
|
||||||
if typ&driver.BufferBindingUniforms != 0 {
|
if typ&driver.BufferBindingUniforms != 0 {
|
||||||
if typ != driver.BufferBindingUniforms {
|
if typ != driver.BufferBindingUniforms {
|
||||||
return nil, errors.New("uniforms buffers cannot be bound as anything else")
|
return nil, errors.New("uniforms buffers cannot be bound as anything else")
|
||||||
@@ -711,7 +711,7 @@ func (b *Backend) NewBuffer(typ driver.BufferBinding, size int) (driver.Buffer,
|
|||||||
func (b *Backend) NewImmutableBuffer(typ driver.BufferBinding, data []byte) (driver.Buffer, error) {
|
func (b *Backend) NewImmutableBuffer(typ driver.BufferBinding, data []byte) (driver.Buffer, error) {
|
||||||
glErr(b.funcs)
|
glErr(b.funcs)
|
||||||
obj := b.funcs.CreateBuffer()
|
obj := b.funcs.CreateBuffer()
|
||||||
buf := &gpuBuffer{backend: b, obj: obj, typ: typ, size: len(data), hasBuffer: true}
|
buf := &buffer{backend: b, obj: obj, typ: typ, size: len(data), hasBuffer: true}
|
||||||
firstBinding := firstBufferType(typ)
|
firstBinding := firstBufferType(typ)
|
||||||
b.glstate.bindBuffer(b.funcs, firstBinding, buf.obj)
|
b.glstate.bindBuffer(b.funcs, firstBinding, buf.obj)
|
||||||
b.funcs.BufferData(firstBinding, len(data), gl.STATIC_DRAW)
|
b.funcs.BufferData(firstBinding, len(data), gl.STATIC_DRAW)
|
||||||
@@ -757,7 +757,7 @@ func (b *Backend) DispatchCompute(x, y, z int) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (b *Backend) BindImageTexture(unit int, tex driver.Texture, access driver.AccessBits, f driver.TextureFormat) {
|
func (b *Backend) BindImageTexture(unit int, tex driver.Texture, access driver.AccessBits, f driver.TextureFormat) {
|
||||||
t := tex.(*gpuTexture)
|
t := tex.(*texture)
|
||||||
var acc gl.Enum
|
var acc gl.Enum
|
||||||
switch access {
|
switch access {
|
||||||
case driver.AccessWrite:
|
case driver.AccessWrite:
|
||||||
@@ -777,7 +777,7 @@ func (b *Backend) BindImageTexture(unit int, tex driver.Texture, access driver.A
|
|||||||
b.funcs.BindImageTexture(unit, t.obj, 0, false, 0, acc, format)
|
b.funcs.BindImageTexture(unit, t.obj, 0, false, 0, acc, format)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b *Backend) useProgram(p *gpuProgram) {
|
func (b *Backend) useProgram(p *program) {
|
||||||
b.glstate.useProgram(b.funcs, p.obj)
|
b.glstate.useProgram(b.funcs, p.obj)
|
||||||
b.state.prog = p
|
b.state.prog = p
|
||||||
}
|
}
|
||||||
@@ -856,7 +856,7 @@ func (b *Backend) NewInputLayout(vs shader.Sources, layout []shader.InputDesc) (
|
|||||||
return nil, fmt.Errorf("NewInputLayout: data size mismatch for %q: got %d expected %d", inp.Name, got, exp)
|
return nil, fmt.Errorf("NewInputLayout: data size mismatch for %q: got %d expected %d", inp.Name, got, exp)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return &gpuInputLayout{
|
return &inputLayout{
|
||||||
inputs: vs.Inputs,
|
inputs: vs.Inputs,
|
||||||
layout: layout,
|
layout: layout,
|
||||||
}, nil
|
}, nil
|
||||||
@@ -867,11 +867,10 @@ func (b *Backend) NewComputeProgram(src shader.Sources) (driver.Program, error)
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("%s: %v", src.Name, err)
|
return nil, fmt.Errorf("%s: %v", src.Name, err)
|
||||||
}
|
}
|
||||||
gpuProg := &gpuProgram{
|
return &program{
|
||||||
backend: b,
|
backend: b,
|
||||||
obj: p,
|
obj: p,
|
||||||
}
|
}, nil
|
||||||
return gpuProg, nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b *Backend) NewProgram(vertShader, fragShader shader.Sources) (driver.Program, error) {
|
func (b *Backend) NewProgram(vertShader, fragShader shader.Sources) (driver.Program, error) {
|
||||||
@@ -896,11 +895,11 @@ func (b *Backend) NewProgram(vertShader, fragShader shader.Sources) (driver.Prog
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
gpuProg := &gpuProgram{
|
prog := &program{
|
||||||
backend: b,
|
backend: b,
|
||||||
obj: p,
|
obj: p,
|
||||||
}
|
}
|
||||||
b.BindProgram(gpuProg)
|
b.BindProgram(prog)
|
||||||
// Bind texture uniforms.
|
// Bind texture uniforms.
|
||||||
for _, tex := range vertShader.Textures {
|
for _, tex := range vertShader.Textures {
|
||||||
u := b.funcs.GetUniformLocation(p, tex.Name)
|
u := b.funcs.GetUniformLocation(p, tex.Name)
|
||||||
@@ -932,10 +931,10 @@ func (b *Backend) NewProgram(vertShader, fragShader shader.Sources) (driver.Prog
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
gpuProg.vertUniforms.setup(b.funcs, p, vertShader.Uniforms.Size, vertShader.Uniforms.Locations)
|
prog.vertUniforms.setup(b.funcs, p, vertShader.Uniforms.Size, vertShader.Uniforms.Locations)
|
||||||
gpuProg.fragUniforms.setup(b.funcs, p, fragShader.Uniforms.Size, fragShader.Uniforms.Locations)
|
prog.fragUniforms.setup(b.funcs, p, fragShader.Uniforms.Size, fragShader.Uniforms.Locations)
|
||||||
}
|
}
|
||||||
return gpuProg, nil
|
return prog, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func lookupUniform(funcs *gl.Functions, p gl.Program, loc shader.UniformLocation) uniformLocation {
|
func lookupUniform(funcs *gl.Functions, p gl.Program, loc shader.UniformLocation) uniformLocation {
|
||||||
@@ -946,23 +945,23 @@ func lookupUniform(funcs *gl.Functions, p gl.Program, loc shader.UniformLocation
|
|||||||
return uniformLocation{uniform: u, offset: loc.Offset, typ: loc.Type, size: loc.Size}
|
return uniformLocation{uniform: u, offset: loc.Offset, typ: loc.Type, size: loc.Size}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *gpuProgram) SetStorageBuffer(binding int, buffer driver.Buffer) {
|
func (p *program) SetStorageBuffer(binding int, buf driver.Buffer) {
|
||||||
buf := buffer.(*gpuBuffer)
|
b := buf.(*buffer)
|
||||||
if buf.typ&driver.BufferBindingShaderStorage == 0 {
|
if b.typ&driver.BufferBindingShaderStorage == 0 {
|
||||||
panic("not a shader storage buffer")
|
panic("not a shader storage buffer")
|
||||||
}
|
}
|
||||||
p.storage[binding] = buf
|
p.storage[binding] = b
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *gpuProgram) SetVertexUniforms(buffer driver.Buffer) {
|
func (p *program) SetVertexUniforms(buf driver.Buffer) {
|
||||||
p.vertUniforms.setBuffer(buffer)
|
p.vertUniforms.setBuffer(buf)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *gpuProgram) SetFragmentUniforms(buffer driver.Buffer) {
|
func (p *program) SetFragmentUniforms(buf driver.Buffer) {
|
||||||
p.fragUniforms.setBuffer(buffer)
|
p.fragUniforms.setBuffer(buf)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *gpuProgram) updateUniforms() {
|
func (p *program) updateUniforms() {
|
||||||
f := p.backend.funcs
|
f := p.backend.funcs
|
||||||
if p.backend.ubo {
|
if p.backend.ubo {
|
||||||
if b := p.vertUniforms.buf; b != nil {
|
if b := p.vertUniforms.buf; b != nil {
|
||||||
@@ -978,11 +977,11 @@ func (p *gpuProgram) updateUniforms() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (b *Backend) BindProgram(prog driver.Program) {
|
func (b *Backend) BindProgram(prog driver.Program) {
|
||||||
p := prog.(*gpuProgram)
|
p := prog.(*program)
|
||||||
b.useProgram(p)
|
b.useProgram(p)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *gpuProgram) Release() {
|
func (p *program) Release() {
|
||||||
p.backend.glstate.deleteProgram(p.backend.funcs, p.obj)
|
p.backend.glstate.deleteProgram(p.backend.funcs, p.obj)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -994,17 +993,17 @@ func (u *uniformsTracker) setup(funcs *gl.Functions, p gl.Program, uniformSize i
|
|||||||
u.size = uniformSize
|
u.size = uniformSize
|
||||||
}
|
}
|
||||||
|
|
||||||
func (u *uniformsTracker) setBuffer(buffer driver.Buffer) {
|
func (u *uniformsTracker) setBuffer(buf driver.Buffer) {
|
||||||
buf := buffer.(*gpuBuffer)
|
b := buf.(*buffer)
|
||||||
if buf.typ&driver.BufferBindingUniforms == 0 {
|
if b.typ&driver.BufferBindingUniforms == 0 {
|
||||||
panic("not a uniform buffer")
|
panic("not a uniform buffer")
|
||||||
}
|
}
|
||||||
if buf.size < u.size {
|
if b.size < u.size {
|
||||||
panic(fmt.Errorf("uniform buffer too small, got %d need %d", buf.size, u.size))
|
panic(fmt.Errorf("uniform buffer too small, got %d need %d", b.size, u.size))
|
||||||
}
|
}
|
||||||
u.buf = buf
|
u.buf = b
|
||||||
// Force update.
|
// Force update.
|
||||||
u.version = buf.version - 1
|
u.version = b.version - 1
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *uniformsTracker) update(funcs *gl.Functions) {
|
func (p *uniformsTracker) update(funcs *gl.Functions) {
|
||||||
@@ -1039,7 +1038,7 @@ func (p *uniformsTracker) update(funcs *gl.Functions) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b *gpuBuffer) Upload(data []byte) {
|
func (b *buffer) Upload(data []byte) {
|
||||||
if b.immutable {
|
if b.immutable {
|
||||||
panic("immutable buffer")
|
panic("immutable buffer")
|
||||||
}
|
}
|
||||||
@@ -1061,7 +1060,7 @@ func (b *gpuBuffer) Upload(data []byte) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b *gpuBuffer) Download(data []byte) error {
|
func (b *buffer) Download(data []byte) error {
|
||||||
if len(data) > b.size {
|
if len(data) > b.size {
|
||||||
panic("buffer size overflow")
|
panic("buffer size overflow")
|
||||||
}
|
}
|
||||||
@@ -1082,7 +1081,7 @@ func (b *gpuBuffer) Download(data []byte) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b *gpuBuffer) Release() {
|
func (b *buffer) Release() {
|
||||||
if b.hasBuffer {
|
if b.hasBuffer {
|
||||||
b.backend.glstate.deleteBuffer(b.backend.funcs, b.obj)
|
b.backend.glstate.deleteBuffer(b.backend.funcs, b.obj)
|
||||||
b.hasBuffer = false
|
b.hasBuffer = false
|
||||||
@@ -1090,7 +1089,7 @@ func (b *gpuBuffer) Release() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (b *Backend) BindVertexBuffer(buf driver.Buffer, stride, offset int) {
|
func (b *Backend) BindVertexBuffer(buf driver.Buffer, stride, offset int) {
|
||||||
gbuf := buf.(*gpuBuffer)
|
gbuf := buf.(*buffer)
|
||||||
if gbuf.typ&driver.BufferBindingVertices == 0 {
|
if gbuf.typ&driver.BufferBindingVertices == 0 {
|
||||||
panic("not a vertex buffer")
|
panic("not a vertex buffer")
|
||||||
}
|
}
|
||||||
@@ -1125,7 +1124,7 @@ func (b *Backend) setupVertexArrays() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (b *Backend) BindIndexBuffer(buf driver.Buffer) {
|
func (b *Backend) BindIndexBuffer(buf driver.Buffer) {
|
||||||
gbuf := buf.(*gpuBuffer)
|
gbuf := buf.(*buffer)
|
||||||
if gbuf.typ&driver.BufferBindingIndices == 0 {
|
if gbuf.typ&driver.BufferBindingIndices == 0 {
|
||||||
panic("not an index buffer")
|
panic("not an index buffer")
|
||||||
}
|
}
|
||||||
@@ -1133,8 +1132,8 @@ func (b *Backend) BindIndexBuffer(buf driver.Buffer) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (b *Backend) BlitFramebuffer(dst, src driver.Framebuffer, srect, drect image.Rectangle) {
|
func (b *Backend) BlitFramebuffer(dst, src driver.Framebuffer, srect, drect image.Rectangle) {
|
||||||
b.glstate.bindFramebuffer(b.funcs, gl.DRAW_FRAMEBUFFER, dst.(*gpuFramebuffer).obj)
|
b.glstate.bindFramebuffer(b.funcs, gl.DRAW_FRAMEBUFFER, dst.(*framebuffer).obj)
|
||||||
b.glstate.bindFramebuffer(b.funcs, gl.READ_FRAMEBUFFER, src.(*gpuFramebuffer).obj)
|
b.glstate.bindFramebuffer(b.funcs, gl.READ_FRAMEBUFFER, src.(*framebuffer).obj)
|
||||||
b.funcs.BlitFramebuffer(
|
b.funcs.BlitFramebuffer(
|
||||||
srect.Min.X, srect.Min.Y, srect.Max.X, srect.Max.Y,
|
srect.Min.X, srect.Min.Y, srect.Max.X, srect.Max.Y,
|
||||||
drect.Min.X, drect.Min.Y, drect.Max.X, drect.Max.Y,
|
drect.Min.X, drect.Min.Y, drect.Max.X, drect.Max.Y,
|
||||||
@@ -1142,7 +1141,7 @@ func (b *Backend) BlitFramebuffer(dst, src driver.Framebuffer, srect, drect imag
|
|||||||
gl.NEAREST)
|
gl.NEAREST)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *gpuFramebuffer) ReadPixels(src image.Rectangle, pixels []byte) error {
|
func (f *framebuffer) ReadPixels(src image.Rectangle, pixels []byte) error {
|
||||||
glErr(f.backend.funcs)
|
glErr(f.backend.funcs)
|
||||||
f.backend.BindFramebuffer(f)
|
f.backend.BindFramebuffer(f)
|
||||||
if len(pixels) < src.Dx()*src.Dy()*4 {
|
if len(pixels) < src.Dx()*src.Dy()*4 {
|
||||||
@@ -1153,22 +1152,22 @@ func (f *gpuFramebuffer) ReadPixels(src image.Rectangle, pixels []byte) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (b *Backend) BindFramebuffer(fbo driver.Framebuffer) {
|
func (b *Backend) BindFramebuffer(fbo driver.Framebuffer) {
|
||||||
b.glstate.bindFramebuffer(b.funcs, gl.FRAMEBUFFER, fbo.(*gpuFramebuffer).obj)
|
b.glstate.bindFramebuffer(b.funcs, gl.FRAMEBUFFER, fbo.(*framebuffer).obj)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *gpuFramebuffer) Invalidate() {
|
func (f *framebuffer) Invalidate() {
|
||||||
f.backend.BindFramebuffer(f)
|
f.backend.BindFramebuffer(f)
|
||||||
f.backend.funcs.InvalidateFramebuffer(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0)
|
f.backend.funcs.InvalidateFramebuffer(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *gpuFramebuffer) Release() {
|
func (f *framebuffer) Release() {
|
||||||
if f.foreign {
|
if f.foreign {
|
||||||
panic("framebuffer not created by NewFramebuffer")
|
panic("framebuffer not created by NewFramebuffer")
|
||||||
}
|
}
|
||||||
f.backend.glstate.deleteFramebuffer(f.backend.funcs, f.obj)
|
f.backend.glstate.deleteFramebuffer(f.backend.funcs, f.obj)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *gpuFramebuffer) ImplementsRenderTarget() {}
|
func (f *framebuffer) ImplementsRenderTarget() {}
|
||||||
|
|
||||||
func toTexFilter(f driver.TextureFilter) int {
|
func toTexFilter(f driver.TextureFilter) int {
|
||||||
switch f {
|
switch f {
|
||||||
@@ -1182,14 +1181,14 @@ func toTexFilter(f driver.TextureFilter) int {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (b *Backend) BindTexture(unit int, t driver.Texture) {
|
func (b *Backend) BindTexture(unit int, t driver.Texture) {
|
||||||
b.glstate.bindTexture(b.funcs, unit, t.(*gpuTexture).obj)
|
b.glstate.bindTexture(b.funcs, unit, t.(*texture).obj)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *gpuTexture) Release() {
|
func (t *texture) Release() {
|
||||||
t.backend.glstate.deleteTexture(t.backend.funcs, t.obj)
|
t.backend.glstate.deleteTexture(t.backend.funcs, t.obj)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *gpuTexture) Upload(offset, size image.Point, pixels []byte, stride int) {
|
func (t *texture) Upload(offset, size image.Point, pixels []byte, stride int) {
|
||||||
if min := size.X * size.Y * 4; min > len(pixels) {
|
if min := size.X * size.Y * 4; min > len(pixels) {
|
||||||
panic(fmt.Errorf("size %d larger than data %d", min, len(pixels)))
|
panic(fmt.Errorf("size %d larger than data %d", min, len(pixels)))
|
||||||
}
|
}
|
||||||
@@ -1198,23 +1197,23 @@ func (t *gpuTexture) Upload(offset, size image.Point, pixels []byte, stride int)
|
|||||||
t.backend.funcs.TexSubImage2D(gl.TEXTURE_2D, 0, offset.X, offset.Y, size.X, size.Y, t.triple.format, t.triple.typ, pixels)
|
t.backend.funcs.TexSubImage2D(gl.TEXTURE_2D, 0, offset.X, offset.Y, size.X, size.Y, t.triple.format, t.triple.typ, pixels)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *gpuTimer) Begin() {
|
func (t *timer) Begin() {
|
||||||
t.funcs.BeginQuery(gl.TIME_ELAPSED_EXT, t.obj)
|
t.funcs.BeginQuery(gl.TIME_ELAPSED_EXT, t.obj)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *gpuTimer) End() {
|
func (t *timer) End() {
|
||||||
t.funcs.EndQuery(gl.TIME_ELAPSED_EXT)
|
t.funcs.EndQuery(gl.TIME_ELAPSED_EXT)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *gpuTimer) ready() bool {
|
func (t *timer) ready() bool {
|
||||||
return t.funcs.GetQueryObjectuiv(t.obj, gl.QUERY_RESULT_AVAILABLE) == gl.TRUE
|
return t.funcs.GetQueryObjectuiv(t.obj, gl.QUERY_RESULT_AVAILABLE) == gl.TRUE
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *gpuTimer) Release() {
|
func (t *timer) Release() {
|
||||||
t.funcs.DeleteQuery(t.obj)
|
t.funcs.DeleteQuery(t.obj)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *gpuTimer) Duration() (time.Duration, bool) {
|
func (t *timer) Duration() (time.Duration, bool) {
|
||||||
if !t.ready() {
|
if !t.ready() {
|
||||||
return 0, false
|
return 0, false
|
||||||
}
|
}
|
||||||
@@ -1223,10 +1222,10 @@ func (t *gpuTimer) Duration() (time.Duration, bool) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (b *Backend) BindInputLayout(l driver.InputLayout) {
|
func (b *Backend) BindInputLayout(l driver.InputLayout) {
|
||||||
b.state.layout = l.(*gpuInputLayout)
|
b.state.layout = l.(*inputLayout)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (l *gpuInputLayout) Release() {}
|
func (l *inputLayout) Release() {}
|
||||||
|
|
||||||
// floatTripleFor determines the best texture triple for floating point FBOs.
|
// floatTripleFor determines the best texture triple for floating point FBOs.
|
||||||
func floatTripleFor(f *gl.Functions, ver [2]int, exts []string) (textureTriple, error) {
|
func floatTripleFor(f *gl.Functions, ver [2]int, exts []string) (textureTriple, error) {
|
||||||
|
|||||||
Reference in New Issue
Block a user