mirror of
https://github.com/hajimehoshi/ebiten.git
synced 2024-12-26 03:38:55 +01:00
Refactoring
This commit is contained in:
parent
c9e8036617
commit
f0ef3384cb
@ -29,7 +29,7 @@ func (game *Input) InitTextures(tf graphics.TextureFactory) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
if game.textTextureId, err = tf.NewTextureFromImage(img); err != nil {
|
if game.textTextureId, err = tf.CreateTextureFromImage(img); err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -40,7 +40,7 @@ func (game *Monochrome) InitTextures(tf graphics.TextureFactory) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
if game.ebitenTextureId, err = tf.NewTextureFromImage(img); err != nil {
|
if game.ebitenTextureId, err = tf.CreateTextureFromImage(img); err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -37,11 +37,11 @@ func New() *Rects {
|
|||||||
|
|
||||||
func (game *Rects) InitTextures(tf graphics.TextureFactory) {
|
func (game *Rects) InitTextures(tf graphics.TextureFactory) {
|
||||||
var err error
|
var err error
|
||||||
game.rectTextureId, err = tf.NewRenderTarget(rectTextureWidth, rectTextureHeight)
|
game.rectTextureId, err = tf.CreateRenderTarget(rectTextureWidth, rectTextureHeight)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
game.offscreenId, err = tf.NewRenderTarget(offscreenWidth, offscreenHeight)
|
game.offscreenId, err = tf.CreateRenderTarget(offscreenWidth, offscreenHeight)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
@ -36,7 +36,7 @@ func (game *Rotating) InitTextures(tf graphics.TextureFactory) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
if game.ebitenTextureId, err = tf.NewTextureFromImage(img); err != nil {
|
if game.ebitenTextureId, err = tf.CreateTextureFromImage(img); err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -86,7 +86,7 @@ func (game *Sprites) InitTextures(tf graphics.TextureFactory) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
if game.ebitenTextureId, err = tf.NewTextureFromImage(img); err != nil {
|
if game.ebitenTextureId, err = tf.CreateTextureFromImage(img); err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -32,7 +32,7 @@ func (game *TestPattern) InitTextures(tf graphics.TextureFactory) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
if game.textureId, err = tf.NewTextureFromImage(img); err != nil {
|
if game.textureId, err = tf.CreateTextureFromImage(img); err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
size := img.Bounds().Size()
|
size := img.Bounds().Size()
|
||||||
|
@ -35,8 +35,8 @@ type Context interface {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type TextureFactory interface {
|
type TextureFactory interface {
|
||||||
NewRenderTarget(width, height int) (RenderTargetId, error)
|
CreateRenderTarget(width, height int) (RenderTargetId, error)
|
||||||
NewTextureFromImage(img image.Image) (TextureId, error)
|
CreateTextureFromImage(img image.Image) (TextureId, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
type TextureId int
|
type TextureId int
|
||||||
|
@ -101,12 +101,12 @@ func (context *Context) createRenderTarget(width, height int, filter texture.Fil
|
|||||||
return renderTargetId, nil
|
return renderTargetId, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (context *Context) NewRenderTarget(width, height int) (
|
func (context *Context) CreateRenderTarget(width, height int) (
|
||||||
graphics.RenderTargetId, error) {
|
graphics.RenderTargetId, error) {
|
||||||
return context.createRenderTarget(width, height, texture.FilterLinear)
|
return context.createRenderTarget(width, height, texture.FilterLinear)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (context *Context) NewTextureFromImage(img image.Image) (
|
func (context *Context) CreateTextureFromImage(img image.Image) (
|
||||||
graphics.TextureId, error) {
|
graphics.TextureId, error) {
|
||||||
return context.ids.CreateTextureFromImage(img)
|
return context.ids.CreateTextureFromImage(img)
|
||||||
}
|
}
|
||||||
|
@ -44,7 +44,7 @@ func (i *ids) ToTexture(id graphics.RenderTargetId) graphics.TextureId {
|
|||||||
|
|
||||||
func (i *ids) CreateTextureFromImage(img image.Image) (
|
func (i *ids) CreateTextureFromImage(img image.Image) (
|
||||||
graphics.TextureId, error) {
|
graphics.TextureId, error) {
|
||||||
texture, err := texture.NewFromImage(img)
|
texture, err := texture.CreateFromImage(img)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return 0, err
|
return 0, err
|
||||||
}
|
}
|
||||||
@ -55,7 +55,7 @@ func (i *ids) CreateTextureFromImage(img image.Image) (
|
|||||||
|
|
||||||
func (i *ids) CreateRenderTarget(width, height int, filter texture.Filter) (
|
func (i *ids) CreateRenderTarget(width, height int, filter texture.Filter) (
|
||||||
graphics.RenderTargetId, error) {
|
graphics.RenderTargetId, error) {
|
||||||
renderTarget, texture, err := rendertarget.New(width, height, filter)
|
renderTarget, texture, err := rendertarget.Create(width, height, filter)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return 0, err
|
return 0, err
|
||||||
}
|
}
|
||||||
|
@ -34,7 +34,7 @@ func New(screenWidth, screenHeight, screenScale int) *Offscreen {
|
|||||||
C.glGetIntegerv(C.GL_FRAMEBUFFER_BINDING, &mainFramebuffer)
|
C.glGetIntegerv(C.GL_FRAMEBUFFER_BINDING, &mainFramebuffer)
|
||||||
|
|
||||||
var err error
|
var err error
|
||||||
offscreen.mainFramebufferTexture, err = rendertarget.NewWithFramebuffer(
|
offscreen.mainFramebufferTexture, err = rendertarget.CreateWithFramebuffer(
|
||||||
screenWidth*screenScale,
|
screenWidth*screenScale,
|
||||||
screenHeight*screenScale,
|
screenHeight*screenScale,
|
||||||
rendertarget.Framebuffer(mainFramebuffer))
|
rendertarget.Framebuffer(mainFramebuffer))
|
||||||
|
@ -36,27 +36,23 @@ func createFramebuffer(nativeTexture C.GLuint) Framebuffer {
|
|||||||
return Framebuffer(framebuffer)
|
return Framebuffer(framebuffer)
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Rename them
|
type framebufferCreator struct {
|
||||||
func New(width, height int, filter texture.Filter) (
|
}
|
||||||
|
|
||||||
|
func (f *framebufferCreator) Create(native interface{}) interface{} {
|
||||||
|
return createFramebuffer(C.GLuint(native.(texture.Native)))
|
||||||
|
}
|
||||||
|
|
||||||
|
func Create(width, height int, filter texture.Filter) (
|
||||||
*gtexture.RenderTarget, *gtexture.Texture, error) {
|
*gtexture.RenderTarget, *gtexture.Texture, error) {
|
||||||
tex, err := texture.New(width, height, filter)
|
tex, err := texture.Create(width, height, filter)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, err
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
f := func(native interface{}) interface{} {
|
return tex.NewRenderTarget(&framebufferCreator{}), tex, nil
|
||||||
return createFramebuffer(C.GLuint(native.(texture.Native)))
|
|
||||||
}
|
|
||||||
return gtexture.NewRenderTarget(tex, f), tex, nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewWithFramebuffer(width, height int, framebuffer Framebuffer) (
|
func CreateWithFramebuffer(width, height int, framebuffer Framebuffer) (
|
||||||
*gtexture.RenderTarget, error) {
|
*gtexture.RenderTarget, error) {
|
||||||
tex, err := texture.NewEmpty(width, height)
|
return gtexture.NewRenderTarget(framebuffer, width, height), nil
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
f := func(native interface{}) interface{} {
|
|
||||||
return framebuffer
|
|
||||||
}
|
|
||||||
return gtexture.NewRenderTarget(tex, f), nil
|
|
||||||
}
|
}
|
||||||
|
@ -15,7 +15,7 @@ type Native C.GLuint
|
|||||||
type Filter int
|
type Filter int
|
||||||
|
|
||||||
const (
|
const (
|
||||||
FilterLinear = iota
|
FilterLinear Filter = iota
|
||||||
FilterNearest
|
FilterNearest
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -64,20 +64,16 @@ 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 Create(width, height int, filter Filter) (*gtexture.Texture, error) {
|
||||||
func New(width, height int, filter Filter) (*gtexture.Texture, error) {
|
native, err := create(gtexture.AdjustSize(width),
|
||||||
native, err := create(gtexture.AdjustSize(width), gtexture.AdjustSize(height), filter)
|
gtexture.AdjustSize(height), filter)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
return gtexture.New(native, width, height), nil
|
return gtexture.New(native, width, height), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewEmpty(width, height int) (*gtexture.Texture, error) {
|
func CreateFromImage(img image.Image) (*gtexture.Texture, error) {
|
||||||
return gtexture.New(nil, width, height), nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewFromImage(img image.Image) (*gtexture.Texture, error) {
|
|
||||||
native, err := createFromImage(gtexture.AdjustImage(img))
|
native, err := createFromImage(gtexture.AdjustImage(img))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -1,14 +1,16 @@
|
|||||||
package texture
|
package texture
|
||||||
|
|
||||||
type RenderTarget struct {
|
type RenderTarget struct {
|
||||||
texture *Texture
|
|
||||||
framebuffer interface{}
|
framebuffer interface{}
|
||||||
|
offscreenWidth int
|
||||||
|
offscreenHeight int
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewRenderTarget(texture *Texture, create func(native interface{}) interface{}) *RenderTarget {
|
func NewRenderTarget(framebuffer interface{}, width, height int) *RenderTarget {
|
||||||
return &RenderTarget{
|
return &RenderTarget{
|
||||||
texture: texture,
|
framebuffer: framebuffer,
|
||||||
framebuffer: create(texture.native),
|
offscreenWidth: AdjustSize(width),
|
||||||
|
offscreenHeight: AdjustSize(height),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -16,8 +18,6 @@ type OffscreenSetter interface {
|
|||||||
Set(framebuffer interface{}, x, y, width, height int)
|
Set(framebuffer interface{}, x, y, width, height int)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (renderTarget *RenderTarget) SetAsOffscreen(setter OffscreenSetter) {
|
func (r *RenderTarget) SetAsOffscreen(setter OffscreenSetter) {
|
||||||
renderTarget.texture.SetAsViewport(func(x, y, width, height int) {
|
setter.Set(r.framebuffer, 0, 0, r.offscreenWidth, r.offscreenHeight)
|
||||||
setter.Set(renderTarget.framebuffer, x, y, width, height)
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
@ -62,10 +62,6 @@ func (texture *Texture) v(y int) float32 {
|
|||||||
return float32(y) / float32(AdjustSize(texture.height))
|
return float32(y) / float32(AdjustSize(texture.height))
|
||||||
}
|
}
|
||||||
|
|
||||||
func (texture *Texture) SetAsViewport(setter func(x, y, width, height int)) {
|
|
||||||
setter(0, 0, AdjustSize(texture.width), AdjustSize(texture.height))
|
|
||||||
}
|
|
||||||
|
|
||||||
type Quad struct {
|
type Quad struct {
|
||||||
VertexX1 float32
|
VertexX1 float32
|
||||||
VertexX2 float32
|
VertexX2 float32
|
||||||
@ -110,3 +106,12 @@ func (texture *Texture) DrawParts(parts []graphics.TexturePart, drawable Drawabl
|
|||||||
}
|
}
|
||||||
drawable.Draw(texture.native, quads)
|
drawable.Draw(texture.native, quads)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type FramebufferCreator interface {
|
||||||
|
Create(native interface{}) interface{}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (texture *Texture) NewRenderTarget(creator FramebufferCreator) *RenderTarget {
|
||||||
|
return NewRenderTarget(creator.Create(texture.native), texture.width, texture.height)
|
||||||
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user