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