Move rendertarget.RenderTarget to texture.RenderTarget

This commit is contained in:
Hajime Hoshi 2013-11-28 09:36:31 +09:00
parent dc9f682863
commit 861449cbd7
6 changed files with 28 additions and 32 deletions

View File

@ -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]
}

View File

@ -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 {

View File

@ -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
}

View File

@ -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 {

View File

@ -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)

View File

@ -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(