本文整理匯總了Golang中github.com/remogatto/mandala.Window.MakeContextCurrent方法的典型用法代碼示例。如果您正苦於以下問題:Golang Window.MakeContextCurrent方法的具體用法?Golang Window.MakeContextCurrent怎麽用?Golang Window.MakeContextCurrent使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在類github.com/remogatto/mandala.Window
的用法示例。
在下文中一共展示了Window.MakeContextCurrent方法的6個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Golang代碼示例。
示例1: renderLoopFunc
// Run runs renderLoop. The loop renders a frame and swaps the buffer
// at each tick received.
func renderLoopFunc(control *renderLoopControl) loop.LoopFunc {
return func(loop loop.Loop) error {
var window mandala.Window
// Lock/unlock the loop to the current OS thread. This is
// necessary because OpenGL functions should be called from
// the same thread.
runtime.LockOSThread()
defer runtime.UnlockOSThread()
// Create an instance of ticker and immediately stop
// it because we don't want to swap buffers before
// initializing a rendering state.
ticker := time.NewTicker(time.Duration(1e9 / int(FRAMES_PER_SECOND)))
ticker.Stop()
for {
select {
case window = <-control.window:
ticker.Stop()
window.MakeContextCurrent()
width, height := window.GetSize()
gl.Viewport(0, 0, width, height)
mandala.Logf("Restarting rendering loop...")
ticker = time.NewTicker(time.Duration(1e9 / int(FRAMES_PER_SECOND)))
// Compute window radius
windowRadius = math.Sqrt(math.Pow(float64(height), 2) + math.Pow(float64(width), 2))
//gl.Init()
gl.Disable(gl.DEPTH_TEST)
// antialiasing
gl.Enable(gl.BLEND)
gl.BlendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA)
//gl.Enable(gl.LINE_SMOOTH)
// At each tick render a frame and swap buffers.
case <-ticker.C:
draw()
window.SwapBuffers()
case event := <-control.pause:
ticker.Stop()
event.Paused <- true
case <-control.resume:
case <-loop.ShallStop():
ticker.Stop()
return nil
}
}
}
}
示例2: init
func (renderState *renderState) init(window mandala.Window) {
window.MakeContextCurrent()
renderState.window = window
width, height := window.GetSize()
// Set the viewport
gl.Viewport(0, 0, gl.Sizei(width), gl.Sizei(height))
gl.ClearColor(0.0, 0.0, 1.0, 1.0)
}
示例3: init
func (renderState *renderState) init(window mandala.Window) {
window.MakeContextCurrent()
renderState.window = window
width, height := window.GetSize()
// Set the viewport
gl.Viewport(0, 0, gl.Sizei(width), gl.Sizei(height))
check()
// Compile the shaders
program := shaders.NewProgram(fsh, vsh)
program.Use()
check()
// Get attributes
attrPos = program.GetAttribute("pos")
attrTexIn = program.GetAttribute("texIn")
unifTexture = program.GetUniform("texture")
gl.EnableVertexAttribArray(attrPos)
gl.EnableVertexAttribArray(attrTexIn)
check()
// Upload texture data
img, err := loadImage(GOPHER_PNG)
if err != nil {
panic(err)
}
// Prepare the image to be placed on a texture.
bounds := img.Bounds()
imgWidth, imgHeight := bounds.Size().X, bounds.Size().Y
buffer := make([]byte, imgWidth*imgHeight*4)
index := 0
for y := bounds.Min.Y; y < bounds.Max.Y; y++ {
for x := bounds.Min.X; x < bounds.Max.X; x++ {
r, g, b, a := img.At(x, y).RGBA()
buffer[index] = byte(r)
buffer[index+1] = byte(g)
buffer[index+2] = byte(b)
buffer[index+3] = byte(a)
index += 4
}
}
gl.GenTextures(1, &textureBuffer)
gl.BindTexture(gl.TEXTURE_2D, textureBuffer)
gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST)
gl.TexImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.Sizei(imgWidth), gl.Sizei(imgHeight), 0, gl.RGBA, gl.UNSIGNED_BYTE, gl.Void(&buffer[0]))
check()
gl.ClearColor(0.0, 0.0, 0.0, 1.0)
}
示例4: init
func (renderState *renderState) init(window mandala.Window) {
window.MakeContextCurrent()
renderState.window = window
width, height := window.GetSize()
// Set the viewport
gl.Viewport(0, 0, gl.Sizei(width), gl.Sizei(height))
gl.ClearColor(0.0, 0.0, 0.0, 1.0)
renderState.boxProgram = shaders.NewProgram(shapes.DefaultBoxFS, shapes.DefaultBoxVS)
renderState.segmentProgram = shaders.NewProgram(shapes.DefaultSegmentFS, shapes.DefaultSegmentVS)
}
示例5: renderLoopFunc
// Run runs renderLoop. The loop renders a frame and swaps the buffer
// at each tick received.
func renderLoopFunc(control *renderLoopControl) loop.LoopFunc {
return func(loop loop.Loop) error {
var window mandala.Window
// Lock/unlock the loop to the current OS thread. This is
// necessary because OpenGL functions should be called from
// the same thread.
runtime.LockOSThread()
defer runtime.UnlockOSThread()
// Create an instance of ticker and immediately stop
// it because we don't want to swap buffers before
// initializing a rendering state.
ticker := time.NewTicker(time.Duration(1e9 / int(FRAMES_PER_SECOND)))
ticker.Stop()
for {
select {
case window = <-control.window:
ticker.Stop()
window.MakeContextCurrent()
width, height := window.GetSize()
gl.Viewport(0, 0, gl.Sizei(width), gl.Sizei(height))
mandala.Logf("Restarting rendering loop...")
ticker = time.NewTicker(time.Duration(1e9 / int(FRAMES_PER_SECOND)))
// At each tick render a frame and swap buffers.
case <-ticker.C:
draw()
window.SwapBuffers()
case event := <-control.pause:
ticker.Stop()
event.Paused <- true
case <-control.resume:
case <-loop.ShallStop():
ticker.Stop()
return nil
}
}
}
}
示例6: init
func (renderState *renderState) init(window mandala.Window) {
window.MakeContextCurrent()
renderState.window = window
width, height := window.GetSize()
// Create the 3D world
renderState.world = cubelib.NewWorld(width, height)
renderState.world.SetCamera(0.0, 0.0, 5.0)
renderState.cube = cubelib.NewCube()
img, err := loadImage("drawable/marmo.png")
if err != nil {
panic(err)
}
renderState.cube.AttachTexture(img)
renderState.world.Attach(renderState.cube)
renderState.angle = 0.0
}