mirror of
https://git.sr.ht/~eliasnaur/gio
synced 2026-07-01 15:45:38 +00:00
gpu/backend: remove clear color and depth state
Specifying the clear color and depth at the time of clearing is less error prone and a better for modern GPU APIs. As a bonus, we can get rid of the BufferAttachment type. Signed-off-by: Elias Naur <mail@eliasnaur.com>
This commit is contained in:
@@ -27,9 +27,8 @@ type Device interface {
|
||||
NewInputLayout(vertexShader ShaderSources, layout []InputDesc) (InputLayout, error)
|
||||
|
||||
DepthFunc(f DepthFunc)
|
||||
ClearColor(r, g, b, a float32)
|
||||
ClearDepth(d float32)
|
||||
Clear(buffers BufferAttachments)
|
||||
Clear(r, g, b, a float32)
|
||||
Viewport(x, y, width, height int)
|
||||
DrawArrays(mode DrawMode, off, count int)
|
||||
DrawElements(mode DrawMode, off, count int)
|
||||
@@ -110,8 +109,6 @@ type BlendFactor uint8
|
||||
|
||||
type DrawMode uint8
|
||||
|
||||
type BufferAttachments uint
|
||||
|
||||
type TextureFilter uint8
|
||||
type TextureFormat uint8
|
||||
|
||||
@@ -157,11 +154,6 @@ type Texture interface {
|
||||
Release()
|
||||
}
|
||||
|
||||
const (
|
||||
BufferAttachmentColor BufferAttachments = 1 << iota
|
||||
BufferAttachmentDepth
|
||||
)
|
||||
|
||||
const (
|
||||
DepthFuncGreater DepthFunc = iota
|
||||
)
|
||||
|
||||
+4
-13
@@ -385,23 +385,14 @@ func (b *Backend) Viewport(x, y, width, height int) {
|
||||
b.funcs.Viewport(x, y, width, height)
|
||||
}
|
||||
|
||||
func (b *Backend) Clear(attachments backend.BufferAttachments) {
|
||||
var mask Enum
|
||||
if attachments&backend.BufferAttachmentColor != 0 {
|
||||
mask |= COLOR_BUFFER_BIT
|
||||
}
|
||||
if attachments&backend.BufferAttachmentDepth != 0 {
|
||||
mask |= DEPTH_BUFFER_BIT
|
||||
}
|
||||
b.funcs.Clear(mask)
|
||||
func (b *Backend) Clear(colR, colG, colB, colA float32) {
|
||||
b.funcs.ClearColor(colR, colG, colB, colA)
|
||||
b.funcs.Clear(COLOR_BUFFER_BIT)
|
||||
}
|
||||
|
||||
func (b *Backend) ClearDepth(d float32) {
|
||||
b.funcs.ClearDepthf(d)
|
||||
}
|
||||
|
||||
func (b *Backend) ClearColor(colR, colG, colB, colA float32) {
|
||||
b.funcs.ClearColor(colR, colG, colB, colA)
|
||||
b.funcs.Clear(DEPTH_BUFFER_BIT)
|
||||
}
|
||||
|
||||
func (b *Backend) DepthFunc(f backend.DepthFunc) {
|
||||
|
||||
+3
-4
@@ -335,9 +335,8 @@ func (g *GPU) BeginFrame() {
|
||||
}
|
||||
g.ctx.BindFramebuffer(g.defFBO)
|
||||
g.ctx.DepthFunc(backend.DepthFuncGreater)
|
||||
g.ctx.ClearColor(g.drawOps.clearColor.Float32())
|
||||
g.ctx.ClearDepth(0.0)
|
||||
g.ctx.Clear(backend.BufferAttachmentColor | backend.BufferAttachmentDepth)
|
||||
g.ctx.Clear(g.drawOps.clearColor.Float32())
|
||||
g.ctx.Viewport(0, 0, viewport.X, viewport.Y)
|
||||
g.renderer.drawZOps(g.drawOps.zimageOps)
|
||||
g.zopsTimer.end()
|
||||
@@ -502,7 +501,7 @@ func (r *renderer) stencilClips(pathCache *opCache, ops []*pathOp) {
|
||||
fbo = p.place.Idx
|
||||
f := r.pather.stenciler.cover(fbo)
|
||||
r.ctx.BindFramebuffer(f.fbo)
|
||||
r.ctx.Clear(backend.BufferAttachmentColor)
|
||||
r.ctx.Clear(0.0, 0.0, 0.0, 0.0)
|
||||
}
|
||||
data, _ := pathCache.get(p.pathKey)
|
||||
r.pather.stencilPath(p.clip, p.off, p.place.Pos, data.(*pathData))
|
||||
@@ -525,7 +524,7 @@ func (r *renderer) intersect(ops []imageOp) {
|
||||
fbo = img.place.Idx
|
||||
f := r.pather.stenciler.intersections.fbos[fbo]
|
||||
r.ctx.BindFramebuffer(f.fbo)
|
||||
r.ctx.Clear(backend.BufferAttachmentColor)
|
||||
r.ctx.Clear(1.0, 0.0, 0.0, 0.0)
|
||||
}
|
||||
r.ctx.Viewport(img.place.Pos.X, img.place.Pos.Y, img.clip.Dx(), img.clip.Dy())
|
||||
r.intersectPath(img.path, img.clip)
|
||||
|
||||
@@ -292,7 +292,6 @@ func (s *stenciler) beginIntersect(sizes []image.Point) {
|
||||
// floating point formats. Replace with GL_RGB+GL_UNSIGNED_BYTE if
|
||||
// no floating point support is available.
|
||||
s.intersections.resize(s.ctx, sizes)
|
||||
s.ctx.ClearColor(1.0, 0.0, 0.0, 0.0)
|
||||
s.ctx.BindProgram(s.iprog.prog.prog)
|
||||
}
|
||||
|
||||
@@ -308,7 +307,6 @@ func (s *stenciler) cover(idx int) stencilFBO {
|
||||
func (s *stenciler) begin(sizes []image.Point) {
|
||||
s.ctx.BlendFunc(backend.BlendFactorOne, backend.BlendFactorOne)
|
||||
s.fbos.resize(s.ctx, sizes)
|
||||
s.ctx.ClearColor(0.0, 0.0, 0.0, 0.0)
|
||||
s.ctx.BindProgram(s.prog.prog.prog)
|
||||
s.ctx.BindInputLayout(s.prog.layout)
|
||||
s.ctx.BindIndexBuffer(s.indexBuf)
|
||||
|
||||
Reference in New Issue
Block a user