diff --git a/graphics/opengl/ids.go b/graphics/opengl/ids.go index 8c9a0c1d7..6f718d738 100644 --- a/graphics/opengl/ids.go +++ b/graphics/opengl/ids.go @@ -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] } diff --git a/graphics/opengl/offscreen/offscreen.go b/graphics/opengl/offscreen/offscreen.go index cf8db39d5..c51acefe8 100644 --- a/graphics/opengl/offscreen/offscreen.go +++ b/graphics/opengl/offscreen/offscreen.go @@ -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 { diff --git a/graphics/opengl/rendertarget/render_target.go b/graphics/opengl/rendertarget/render_target.go index 0d6fea027..7018bc843 100644 --- a/graphics/opengl/rendertarget/render_target.go +++ b/graphics/opengl/rendertarget/render_target.go @@ -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 } diff --git a/graphics/opengl/texture/texture.go b/graphics/opengl/texture/texture.go index 1fd8e7902..d02965515 100644 --- a/graphics/opengl/texture/texture.go +++ b/graphics/opengl/texture/texture.go @@ -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 { diff --git a/graphics/rendertarget/render_target.go b/graphics/texture/render_target.go similarity index 67% rename from graphics/rendertarget/render_target.go rename to graphics/texture/render_target.go index 105106464..8cb5bbb73 100644 --- a/graphics/rendertarget/render_target.go +++ b/graphics/texture/render_target.go @@ -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) diff --git a/graphics/texture/texture.go b/graphics/texture/texture.go index baf3eb77c..38ede9fd1 100644 --- a/graphics/texture/texture.go +++ b/graphics/texture/texture.go @@ -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(