Add Rects

This commit is contained in:
Hajime Hoshi 2013-06-23 02:01:26 +09:00
parent 99f17c418b
commit 2b04f74614
6 changed files with 84 additions and 16 deletions

View File

@ -0,0 +1,60 @@
package rects
import (
"github.com/hajimehoshi/go.ebiten/graphics"
"github.com/hajimehoshi/go.ebiten/graphics/matrix"
"image/color"
"math/rand"
"time"
)
type Rects struct {
rectsTexture graphics.Texture
}
func New() *Rects {
return &Rects{}
}
func (game *Rects) ScreenWidth() int {
return 256
}
func (game *Rects) ScreenHeight() int {
return 240
}
func (game *Rects) Init(tf graphics.TextureFactory) {
game.rectsTexture = tf.NewTexture(game.ScreenWidth(), game.ScreenHeight())
}
func (game *Rects) Update() {
}
func (game *Rects) Draw(g graphics.GraphicsContext, offscreen graphics.Texture) {
g.SetOffscreen(game.rectsTexture.ID)
x := rand.Intn(game.ScreenWidth())
y := rand.Intn(game.ScreenHeight())
width := rand.Intn(game.ScreenWidth() - x)
height := rand.Intn(game.ScreenHeight() - y)
red := uint8(rand.Intn(256))
green := uint8(rand.Intn(256))
blue := uint8(rand.Intn(256))
alpha := uint8(rand.Intn(256))
g.DrawRect(
graphics.Rect{x, y, width, height},
&color.RGBA{red, green, blue, alpha},
)
g.SetOffscreen(offscreen.ID)
g.DrawTexture(game.rectsTexture,
matrix.IdentityGeometry(),
matrix.IdentityColor())
}
func init() {
rand.Seed(time.Now().UnixNano())
}

View File

@ -6,27 +6,28 @@ import (
"image"
"image/color"
_ "image/png"
"math"
"os"
)
type RotatingImage struct {
type Rotating struct {
ebitenTexture graphics.Texture
x int
}
func New() *RotatingImage {
return &RotatingImage{}
func New() *Rotating {
return &Rotating{}
}
func (game *RotatingImage) ScreenWidth() int {
func (game *Rotating) ScreenWidth() int {
return 256
}
func (game *RotatingImage) ScreenHeight() int {
func (game *Rotating) ScreenHeight() int {
return 240
}
func (game *RotatingImage) Init(tf graphics.TextureFactory) {
func (game *Rotating) Init(tf graphics.TextureFactory) {
file, err := os.Open("ebiten.png")
if err != nil {
panic(err)
@ -40,17 +41,17 @@ func (game *RotatingImage) Init(tf graphics.TextureFactory) {
game.ebitenTexture = tf.NewTextureFromImage(img)
}
func (game *RotatingImage) Update() {
func (game *Rotating) Update() {
game.x++
}
func (game *RotatingImage) Draw(g graphics.GraphicsContext, offscreen graphics.Texture) {
func (game *Rotating) Draw(g graphics.GraphicsContext, offscreen graphics.Texture) {
g.Fill(&color.RGBA{R: 128, G: 128, B: 255, A: 255})
geometryMatrix := matrix.IdentityGeometry()
tx, ty := float64(game.ebitenTexture.Width), float64(game.ebitenTexture.Height)
geometryMatrix.Translate(-tx/2, -ty/2)
geometryMatrix.Rotate(float64(game.x) / 60)
geometryMatrix.Rotate(float64(game.x) * 2 * math.Pi / (60 * 10))
geometryMatrix.Translate(tx/2, ty/2)
centerX := float64(game.ScreenWidth()) / 2
centerY := float64(game.ScreenHeight()) / 2

View File

@ -123,10 +123,6 @@ func (game *Sprites) Draw(g graphics.GraphicsContext, offscreen graphics.Texture
geometryMatrix := matrix.IdentityGeometry()
g.DrawTextureParts(texture.ID, locations,
geometryMatrix, matrix.IdentityColor())
g.DrawRect(
graphics.Rect{10, 10, 50, 50},
&color.RGBA{255, 128, 128, 128},
)
}
func init() {

View File

@ -16,6 +16,7 @@ package main
import "C"
import (
"github.com/hajimehoshi/go.ebiten"
"github.com/hajimehoshi/go.ebiten/example/game/rects"
"github.com/hajimehoshi/go.ebiten/example/game/rotating"
"github.com/hajimehoshi/go.ebiten/example/game/sprites"
"github.com/hajimehoshi/go.ebiten/graphics"
@ -81,10 +82,12 @@ func main() {
var gm ebiten.Game
switch gameName {
case "sprites":
gm = sprites.New()
case "rects":
gm = rects.New()
case "rotating":
gm = rotating.New()
case "sprites":
gm = sprites.New()
default:
gm = rotating.New()
}

View File

@ -51,6 +51,8 @@ func newGraphicsContext(screenWidth, screenHeight, screenScale int) *GraphicsCon
func (context *GraphicsContext) Clear() {
C.glClearColor(0, 0, 0, 1)
C.glClear(C.GL_COLOR_BUFFER_BIT)
// ??
C.glDisableClientState(C.GL_TEXTURE_COORD_ARRAY)
C.glDisableClientState(C.GL_VERTEX_ARRAY)
C.glDisableClientState(C.GL_COLOR_ARRAY)
@ -194,6 +196,11 @@ func (context *GraphicsContext) SetOffscreen(textureID graphics.TextureID) {
}
context.setOffscreenFramebuffer(framebuffer,
texture.textureWidth, texture.textureHeight)
if texture.isDirty {
context.Clear()
texture.isDirty = false
}
}
func (context *GraphicsContext) setOffscreenFramebuffer(framebuffer C.GLuint,

View File

@ -26,6 +26,7 @@ type Texture struct {
height int
textureWidth int
textureHeight int
isDirty bool
}
func createTexture(width, height int, pixels []uint8) *Texture {
@ -67,8 +68,8 @@ func createTexture(width, height int, pixels []uint8) *Texture {
C.glTexParameteri(C.GL_TEXTURE_2D, C.GL_TEXTURE_MIN_FILTER, C.GL_LINEAR)
C.glBindTexture(C.GL_TEXTURE_2D, 0)
// TODO: lock?
texture.id = textureID
texture.isDirty = pixels == nil
return texture
}