mirror of
https://github.com/hajimehoshi/ebiten.git
synced 2025-02-03 22:44:28 +01:00
Move rendertarget.RenderTarget to texture.RenderTarget
This commit is contained in:
parent
dc9f682863
commit
861449cbd7
@ -4,14 +4,13 @@ import (
|
||||
"github.com/hajimehoshi/go-ebiten/graphics"
|
||||
"github.com/hajimehoshi/go-ebiten/graphics/opengl/rendertarget"
|
||||
"github.com/hajimehoshi/go-ebiten/graphics/opengl/texture"
|
||||
grendertarget "github.com/hajimehoshi/go-ebiten/graphics/rendertarget"
|
||||
gtexture "github.com/hajimehoshi/go-ebiten/graphics/texture"
|
||||
"image"
|
||||
)
|
||||
|
||||
type ids struct {
|
||||
textures map[graphics.TextureId]*gtexture.Texture
|
||||
renderTargets map[graphics.RenderTargetId]*grendertarget.RenderTarget
|
||||
renderTargets map[graphics.RenderTargetId]*gtexture.RenderTarget
|
||||
renderTargetToTexture map[graphics.RenderTargetId]graphics.TextureId
|
||||
counts chan int
|
||||
}
|
||||
@ -19,7 +18,7 @@ type ids struct {
|
||||
func newIds() *ids {
|
||||
ids := &ids{
|
||||
textures: map[graphics.TextureId]*gtexture.Texture{},
|
||||
renderTargets: map[graphics.RenderTargetId]*grendertarget.RenderTarget{},
|
||||
renderTargets: map[graphics.RenderTargetId]*gtexture.RenderTarget{},
|
||||
renderTargetToTexture: map[graphics.RenderTargetId]graphics.TextureId{},
|
||||
counts: make(chan int),
|
||||
}
|
||||
@ -35,7 +34,7 @@ func (i *ids) TextureAt(id graphics.TextureId) *gtexture.Texture {
|
||||
return i.textures[id]
|
||||
}
|
||||
|
||||
func (i *ids) RenderTargetAt(id graphics.RenderTargetId) *grendertarget.RenderTarget {
|
||||
func (i *ids) RenderTargetAt(id graphics.RenderTargetId) *gtexture.RenderTarget {
|
||||
return i.renderTargets[id]
|
||||
}
|
||||
|
||||
|
@ -12,14 +12,13 @@ import (
|
||||
"github.com/hajimehoshi/go-ebiten/graphics/opengl/rendertarget"
|
||||
"github.com/hajimehoshi/go-ebiten/graphics/opengl/shader"
|
||||
"github.com/hajimehoshi/go-ebiten/graphics/opengl/texture"
|
||||
grendertarget "github.com/hajimehoshi/go-ebiten/graphics/rendertarget"
|
||||
gtexture "github.com/hajimehoshi/go-ebiten/graphics/texture"
|
||||
)
|
||||
|
||||
type Offscreen struct {
|
||||
screenHeight int
|
||||
screenScale int
|
||||
mainFramebufferTexture *grendertarget.RenderTarget
|
||||
mainFramebufferTexture *gtexture.RenderTarget
|
||||
projectionMatrix [16]float32
|
||||
}
|
||||
|
||||
@ -46,7 +45,7 @@ func New(screenWidth, screenHeight, screenScale int) *Offscreen {
|
||||
return offscreen
|
||||
}
|
||||
|
||||
func (o *Offscreen) Set(rt *grendertarget.RenderTarget) {
|
||||
func (o *Offscreen) Set(rt *gtexture.RenderTarget) {
|
||||
C.glFlush()
|
||||
rt.SetAsOffscreen(&setter{o, rt == o.mainFramebufferTexture})
|
||||
}
|
||||
@ -57,15 +56,13 @@ func (o *Offscreen) SetMainFramebuffer() {
|
||||
|
||||
func (o *Offscreen) DrawTexture(texture *gtexture.Texture,
|
||||
geometryMatrix matrix.Geometry, colorMatrix matrix.Color) {
|
||||
d := &drawable{o, geometryMatrix, colorMatrix}
|
||||
texture.Draw(d.Draw)
|
||||
texture.Draw(&drawable{o, geometryMatrix, colorMatrix})
|
||||
}
|
||||
|
||||
func (o *Offscreen) DrawTextureParts(texture *gtexture.Texture,
|
||||
parts []graphics.TexturePart,
|
||||
geometryMatrix matrix.Geometry, colorMatrix matrix.Color) {
|
||||
d := &drawable{o, geometryMatrix, colorMatrix}
|
||||
texture.DrawParts(parts, d.Draw)
|
||||
texture.DrawParts(parts, &drawable{o, geometryMatrix, colorMatrix})
|
||||
}
|
||||
|
||||
type setter struct {
|
||||
|
@ -6,7 +6,6 @@ package rendertarget
|
||||
import "C"
|
||||
import (
|
||||
"github.com/hajimehoshi/go-ebiten/graphics/opengl/texture"
|
||||
grendertarget "github.com/hajimehoshi/go-ebiten/graphics/rendertarget"
|
||||
gtexture "github.com/hajimehoshi/go-ebiten/graphics/texture"
|
||||
)
|
||||
|
||||
@ -37,8 +36,9 @@ func createFramebuffer(nativeTexture C.GLuint) C.GLuint {
|
||||
return framebuffer
|
||||
}
|
||||
|
||||
// TODO: Rename them
|
||||
func New(width, height int, filter texture.Filter) (
|
||||
*grendertarget.RenderTarget, *gtexture.Texture, error) {
|
||||
*gtexture.RenderTarget, *gtexture.Texture, error) {
|
||||
tex, err := texture.New(width, height, filter)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
@ -47,15 +47,15 @@ func New(width, height int, filter texture.Filter) (
|
||||
return createFramebuffer(C.GLuint(native.(texture.Native)))
|
||||
}
|
||||
framebuffer := tex.CreateFramebuffer(f)
|
||||
return grendertarget.NewWithFramebuffer(tex,
|
||||
return gtexture.NewRenderTarget(tex,
|
||||
Framebuffer(framebuffer.(C.GLuint))), tex, nil
|
||||
}
|
||||
|
||||
func NewWithFramebuffer(width, height int, framebuffer Framebuffer) (
|
||||
*grendertarget.RenderTarget, error) {
|
||||
*gtexture.RenderTarget, error) {
|
||||
tex, err := texture.NewEmpty(width, height)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return grendertarget.NewWithFramebuffer(tex, framebuffer), nil
|
||||
return gtexture.NewRenderTarget(tex, framebuffer), nil
|
||||
}
|
||||
|
@ -64,6 +64,7 @@ func createFromImage(img *image.NRGBA) (interface{}, error) {
|
||||
return createNativeTexture(size.X, size.Y, img.Pix, FilterLinear), nil
|
||||
}
|
||||
|
||||
// TODO: Rename them
|
||||
func New(width, height int, filter Filter) (*gtexture.Texture, error) {
|
||||
native, err := create(gtexture.AdjustSize(width), gtexture.AdjustSize(height), filter)
|
||||
if err != nil {
|
||||
|
@ -1,25 +1,21 @@
|
||||
package rendertarget
|
||||
|
||||
import (
|
||||
"github.com/hajimehoshi/go-ebiten/graphics/texture"
|
||||
)
|
||||
|
||||
type OffscreenSetter interface {
|
||||
Set(framebuffer interface{}, x, y, width, height int)
|
||||
}
|
||||
package texture
|
||||
|
||||
type RenderTarget struct {
|
||||
texture *texture.Texture
|
||||
texture *Texture
|
||||
framebuffer interface{}
|
||||
}
|
||||
|
||||
func NewWithFramebuffer(texture *texture.Texture, framebuffer interface{}) *RenderTarget {
|
||||
func NewRenderTarget(texture *Texture, framebuffer interface{}) *RenderTarget {
|
||||
return &RenderTarget{
|
||||
texture: texture,
|
||||
framebuffer: framebuffer,
|
||||
}
|
||||
}
|
||||
|
||||
type OffscreenSetter interface {
|
||||
Set(framebuffer interface{}, x, y, width, height int)
|
||||
}
|
||||
|
||||
func (renderTarget *RenderTarget) SetAsOffscreen(setter OffscreenSetter) {
|
||||
renderTarget.texture.SetAsViewport(func(x, y, width, height int) {
|
||||
setter.Set(renderTarget.framebuffer, x, y, width, height)
|
@ -77,7 +77,11 @@ type Quad struct {
|
||||
TextureCoordV2 float32
|
||||
}
|
||||
|
||||
func (texture *Texture) Draw(draw func(native interface{}, quads []Quad)) {
|
||||
type Drawable interface {
|
||||
Draw(native interface{}, quads []Quad)
|
||||
}
|
||||
|
||||
func (texture *Texture) Draw(drawable Drawable) {
|
||||
x1 := float32(0)
|
||||
x2 := float32(texture.width)
|
||||
y1 := float32(0)
|
||||
@ -87,11 +91,10 @@ func (texture *Texture) Draw(draw func(native interface{}, quads []Quad)) {
|
||||
v1 := texture.v(0)
|
||||
v2 := texture.v(texture.height)
|
||||
quad := Quad{x1, x2, y1, y2, u1, u2, v1, v2}
|
||||
draw(texture.native, []Quad{quad})
|
||||
drawable.Draw(texture.native, []Quad{quad})
|
||||
}
|
||||
|
||||
func (texture *Texture) DrawParts(parts []graphics.TexturePart,
|
||||
draw func(native interface{}, quads []Quad)) {
|
||||
func (texture *Texture) DrawParts(parts []graphics.TexturePart, drawable Drawable) {
|
||||
quads := []Quad{}
|
||||
for _, part := range parts {
|
||||
x1 := float32(part.LocationX)
|
||||
@ -105,7 +108,7 @@ func (texture *Texture) DrawParts(parts []graphics.TexturePart,
|
||||
quad := Quad{x1, x2, y1, y2, u1, u2, v1, v2}
|
||||
quads = append(quads, quad)
|
||||
}
|
||||
draw(texture.native, quads)
|
||||
drawable.Draw(texture.native, quads)
|
||||
}
|
||||
|
||||
func (texture *Texture) CreateFramebuffer(
|
||||
|
Loading…
Reference in New Issue
Block a user