raylib-go/examples/others/bunnymark/main.go
Konstantin8105 fe6d2c0ed3 step
2022-11-22 18:50:35 +03:00

81 lines
1.9 KiB
Go

package main
import (
"fmt"
"github.com/gen2brain/raylib-go/raylib"
)
// Bunny type
type Bunny struct {
Position rl.Vector2
Speed rl.Vector2
Color rl.Color
}
func main() {
screenWidth := int32(1280)
screenHeight := int32(960)
rl.InitWindow(screenWidth, screenHeight, "raylib [core] example - Bunnymark")
texture := rl.LoadTexture("wabbit_alpha.png")
bunnies := make([]*Bunny, 0)
bunniesCount := 0
rl.SetTargetFPS(60)
for !rl.WindowShouldClose() {
if rl.IsMouseButtonDown(rl.MouseLeftButton) {
// Create more bunnies
for i := 0; i < 100; i++ {
b := &Bunny{}
b.Position = rl.GetMousePosition()
b.Speed.X = float32(rl.GetRandomValue(250, 500)) / 60.0
b.Speed.Y = float32(rl.GetRandomValue(250, 500)-500) / 60.0
bunnies = append(bunnies, b)
bunniesCount++
}
}
// Update bunnies
for _, b := range bunnies {
b.Position.X += b.Speed.X
b.Position.Y += b.Speed.Y
if (b.Position.X > float32(screenWidth)) || (b.Position.X < 0) {
b.Speed.X *= -1
}
if (b.Position.Y > float32(screenHeight)) || (b.Position.Y < 0) {
b.Speed.Y *= -1
}
}
rl.BeginDrawing()
rl.ClearBackground(rl.RayWhite)
for _, b := range bunnies {
// NOTE: When internal QUADS batch limit is reached, a draw call is launched and
// batching buffer starts being filled again; before launching the draw call,
// updated vertex data from internal buffer is send to GPU... it seems it generates
// a stall and consequently a frame drop, limiting number of bunnies drawn at 60 fps
rl.DrawTexture(texture, int32(b.Position.X), int32(b.Position.Y), rl.RayWhite)
}
rl.DrawRectangle(0, 0, screenWidth, 40, rl.LightGray)
rl.DrawText("raylib bunnymark", 10, 10, 20, rl.DarkGray)
rl.DrawText(fmt.Sprintf("bunnies: %d", bunniesCount), 400, 10, 20, rl.Red)
rl.DrawFPS(260, 10)
rl.EndDrawing()
}
rl.UnloadTexture(texture)
rl.CloseWindow()
}