728x90
Go 언어로 모바일앱, 그릭=니까 안드로이드앱, iOS앱을 만들 수 있는
프레임워크를 제공하는 실험적인 시도가 있어 소개합니다.
Go 패키지는 하기 링크에서 확인할 수 있습니다.
:=> https://pkg.go.dev/golang.org/x/mobile
위 패키지의 github 의 위키는 하기에서 확인할 수 있습니다.
:=> https://github.com/golang/go/wiki/Mobile#building-and-deploying-to-android
실제로 안드로이드앱을 Go로 작성한 예제 파일은 하기 링크에서 확인할 수 있습니다.
https://github.com/golang/mobile/blob/bdb1ca9a1e083af5929a8214e8a056d638ebbf2d/example/basic/main.go
실제 코드중 GUI 관련 코드만 옮겨와보면,
아래와 같습니다.
func main() {
app.Main(func(a app.App) {
var glctx gl.Context
var sz size.Event
for e := range a.Events() {
switch e := a.Filter(e).(type) {
case lifecycle.Event:
switch e.Crosses(lifecycle.StageVisible) {
case lifecycle.CrossOn:
glctx, _ = e.DrawContext.(gl.Context)
onStart(glctx)
a.Send(paint.Event{})
case lifecycle.CrossOff:
onStop(glctx)
glctx = nil
}
case size.Event:
sz = e
touchX = float32(sz.WidthPx / 2)
touchY = float32(sz.HeightPx / 2)
case paint.Event:
if glctx == nil || e.External {
// As we are actively painting as fast as
// we can (usually 60 FPS), skip any paint
// events sent by the system.
continue
}
onPaint(glctx, sz)
a.Publish()
// Drive the animation by preparing to paint the next frame
// after this one is shown.
a.Send(paint.Event{})
case touch.Event:
touchX = e.X
touchY = e.Y
}
}
})
}
func onStart(glctx gl.Context) {
var err error
program, err = glutil.CreateProgram(glctx, vertexShader, fragmentShader)
if err != nil {
log.Printf("error creating GL program: %v", err)
return
}
buf = glctx.CreateBuffer()
glctx.BindBuffer(gl.ARRAY_BUFFER, buf)
glctx.BufferData(gl.ARRAY_BUFFER, triangleData, gl.STATIC_DRAW)
position = glctx.GetAttribLocation(program, "position")
color = glctx.GetUniformLocation(program, "color")
offset = glctx.GetUniformLocation(program, "offset")
images = glutil.NewImages(glctx)
fps = debug.NewFPS(images)
}
func onStop(glctx gl.Context) {
glctx.DeleteProgram(program)
glctx.DeleteBuffer(buf)
fps.Release()
images.Release()
}
func onPaint(glctx gl.Context, sz size.Event) {
glctx.ClearColor(1, 0, 0, 1)
glctx.Clear(gl.COLOR_BUFFER_BIT)
glctx.UseProgram(program)
green += 0.01
if green > 1 {
green = 0
}
glctx.Uniform4f(color, 0, green, 0, 1)
glctx.Uniform2f(offset, touchX/float32(sz.WidthPx), touchY/float32(sz.HeightPx))
glctx.BindBuffer(gl.ARRAY_BUFFER, buf)
glctx.EnableVertexAttribArray(position)
glctx.VertexAttribPointer(position, coordsPerVertex, gl.FLOAT, false, 0, 0)
glctx.DrawArrays(gl.TRIANGLES, 0, vertexCount)
glctx.DisableVertexAttribArray(position)
fps.Draw(sz)
}
그럼,
정보 공유합니다.
728x90
'개발 이야기 > Go 언어 이야기' 카테고리의 다른 글
Go 언어의 모든 웹프레임워크 모아보기 (0) | 2021.04.24 |
---|---|
Go 언어의 프레임워크, 라이브러리, 그리고 소프트웨어 (0) | 2021.04.24 |
Go 언어로 어떤 분야의 개발이 가능할까요? (1) | 2021.04.23 |
Go언어를 공부하기 위한 좋은 사이트 (0) | 2021.04.22 |
"고, 무엇에 좋은가" 고 언어의 기능과 제약, 그리고 발전 방향 (0) | 2021.04.22 |