Skip to content

Instantly share code, notes, and snippets.

@EdKaval
Created May 19, 2019 17:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save EdKaval/fcd64b0ba317b10a1f7a46dd5af71e5c to your computer and use it in GitHub Desktop.
Save EdKaval/fcd64b0ba317b10a1f7a46dd5af71e5c to your computer and use it in GitHub Desktop.
//This program draws fractal using SDL2 library binding for GOLANG
package main
import (
"fmt"
"github.com/veandco/go-sdl2/sdl"
)
var winTitle string = "SDL2 GFX"
var winWidth, winHeight int32 = 1280, 800
func NormClear(renderer *sdl.Renderer) error {
r, g, b, a, _ := renderer.GetDrawColor()
renderer.SetDrawColor(0, 0, 0, 255)
err := renderer.Clear()
renderer.SetDrawColor(r, g, b, a)
renderer.Present()
return err
}
func DrawTriangle(renderer *sdl.Renderer, x1, y1, x2, y2 int32) {
x3 := x1+(x2-x1)/2
y3 := y1+(x2-x1)
renderer.DrawLine(x1, y1, x2, y2)
renderer.DrawLine(x1, y1, x3, y3)
renderer.DrawLine(x2, y2, x3, y3)
}
func Fractal(renderer *sdl.Renderer, len, x, y int32) {
if (len > 5) {
Fractal(renderer, len/2, x, y)
Fractal(renderer, len/2, x + len/2, y)
Fractal(renderer, len/2, x + len/4 + 1, y + len/2)
} else {
DrawTriangle(renderer, x, y, x+len, y)
}
}
func main() {
//--------------------INITIALIZATION----------------------------------------
err := sdl.Init(sdl.INIT_EVERYTHING)
if err != nil {
fmt.Printf("Failed to initialize SDL: %s\n", err)
return
}
defer sdl.Quit()
var window *sdl.Window
window, err = sdl.CreateWindow(winTitle, sdl.WINDOWPOS_UNDEFINED, sdl.WINDOWPOS_UNDEFINED, winWidth, winHeight, sdl.WINDOW_SHOWN)
if err != nil {
fmt.Printf("Failed to create window: %s\n", err)
return
}
defer window.Destroy()
var renderer *sdl.Renderer
renderer, err = sdl.CreateRenderer(window, -1, sdl.RENDERER_ACCELERATED);
if err != nil {
fmt.Printf("Failed to create renderer: %s\n", err)
return
}
defer renderer.Destroy()
//-----------------------CODE-----------------------------------------------
renderer.SetDrawColor(255, 255, 255, 255)
sdl.Delay(20)
NormClear(renderer)
Fractal(renderer, 800, 0, 0)
renderer.Present()
sdl.Delay(30000)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment