本文整理汇总了Golang中github.com/runningwild/glop/render.Queue函数的典型用法代码示例。如果您正苦于以下问题:Golang Queue函数的具体用法?Golang Queue怎么用?Golang Queue使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了Queue函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Golang代码示例。
示例1: main
func main() {
sys := system.Make(gos.GetSystemInterface())
sys.Startup()
render.Init()
render.Queue(func() {
initWindow(sys, 800, 600)
})
font := loadDictionary("skia.dict")
fmt.Fprintf(log, "Font: %v", font)
for true {
sys.Think()
render.Queue(func() {
// gl.Color4ub(0, 255, 255, 255)
// gl.Begin(gl.QUADS)
// gl.Vertex2d(100, 100)
// gl.Vertex2d(500, 100)
// gl.Vertex2d(500, 150)
// gl.Vertex2d(100, 150)
// gl.End()
font.SetFontColor(1, 1, 1)
font.RenderString("TEST", 100, 100, 100)
sys.SwapBuffers()
})
render.Purge()
if gin.In().GetKey(gin.AnyEscape).FramePressCount() > 0 {
break
}
}
}
开发者ID:runningwild,项目名称:glomple,代码行数:31,代码来源:main.go
示例2: main
func main() {
sys.Startup()
err := gl.Init()
if err != nil {
base.Error().Fatalf("%v", err)
}
render.Init()
render.Queue(func() {
sys.CreateWindow(10, 10, wdx, wdy)
sys.EnableVSync(true)
})
base.InitShaders()
runtime.GOMAXPROCS(10)
sys.Think()
console := base.MakeConsole(wdx, wdy)
controllers := getPlayers(console)
base.Log().Printf("%v\n", controllers)
go server.Main()
base.LoadAllDictionaries()
client, err := game.MakeClient("127.0.0.1", 1231)
if err != nil {
base.Error().Printf("Unable to connect to server: %v\n", err)
return
}
mainLoop(client, controllers, console)
}
开发者ID:runningwild,项目名称:jbot,代码行数:30,代码来源:main.go
示例3: Scavenger
// Launch this in its own go-routine if you want to occassionally
// delete textures that haven't been used in a while.
func (m *Manager) Scavenger() {
var unused []string
for {
time.Sleep(time.Minute)
unused = unused[0:0]
m.mutex.RLock()
for s, d := range m.registry {
if generation-d.accessed >= 2 {
unused = append(unused, s)
}
}
m.mutex.RUnlock()
m.mutex.Lock()
generation++
if len(unused) == 0 {
m.mutex.Unlock()
continue
}
var unused_data []*Data
for _, s := range unused {
unused_data = append(unused_data, m.registry[s])
m.deleted[s] = m.registry[s]
delete(m.registry, s)
}
render.Queue(func() {
for _, d := range unused_data {
gl.DeleteTextures(1, (*gl.Uint)(&d.texture))
d.texture = 0
}
})
m.mutex.Unlock()
}
}
开发者ID:runningwild,项目名称:jbot,代码行数:37,代码来源:manager.go
示例4: main
func main() {
runtime.GOMAXPROCS(2)
sys := system.Make(gos.GetSystemInterface())
sys.Startup()
game := Game{}
var lb LevelBlueprint
loadJson(filepath.Join(base.DataDir(), "1p_basic_level.json"), &lb)
if len(lb.Players) == 0 || len(lb.Walls) == 0 {
panic(fmt.Sprintf("Invalid level config: %d players and %d walls.",
len(lb.Players), len(lb.Walls)))
}
engine, _ := cgf.NewLocalEngine(&game, int(Config.FrameTime*1000), nil)
engine.ApplyEvent(&NewLevelEvent{&lb})
render.Init()
render.Queue(func() {
initWindow(sys, Config.WindowWidth, Config.WindowHeight)
})
render.Purge()
ticker := time.Tick(time.Millisecond * time.Duration(Config.FrameTime*1000))
for true {
<-ticker
LocalThink(sys, engine, &game)
if gin.In().GetKey(gin.AnyEscape).FramePressCount() > 0 {
break
}
}
}
开发者ID:runningwild,项目名称:arkanoid,代码行数:30,代码来源:main.go
示例5: main
func main() {
defer base.StackCatcher()
sys.Startup()
err := gl.Init()
if err != nil {
base.Error().Fatalf("%v", err)
}
render.Init()
render.Queue(func() {
sys.CreateWindow(10, 10, wdx, wdy)
sys.EnableVSync(true)
})
base.InitShaders()
runtime.GOMAXPROCS(10)
sys.Think()
base.LoadAllDictionaries()
if Version() != "standard" {
engine := debugHookup(Version())
mainLoop(engine, "standard")
} else {
// TODO: Reimplement standard hookup
}
}
开发者ID:runningwild,项目名称:jota,代码行数:26,代码来源:main.go
示例6: getPlayers
func getPlayers(console *base.Console) []gin.DeviceId {
var ct controllerTracker
gin.In().RegisterEventListener(&ct)
defer gin.In().UnregisterEventListener(&ct)
ticker := time.Tick(time.Millisecond * 17)
start := time.Time{}
readyDuration := time.Second * 2
for start.IsZero() || time.Now().Sub(start) < readyDuration {
<-ticker
sys.Think()
if ct.Ready() && start.IsZero() {
start = time.Now()
}
if !ct.Ready() {
start = time.Time{}
}
render.Queue(func() {
defer console.Draw(0, 0, wdx, wdy)
gl.Clear(gl.COLOR_BUFFER_BIT)
gl.Disable(gl.DEPTH_TEST)
gui.SetFontColor(1, 1, 1, 1)
gl.Disable(gl.TEXTURE_2D)
gl.MatrixMode(gl.PROJECTION)
gl.LoadIdentity()
gl.Ortho(gl.Double(0), gl.Double(wdx), gl.Double(wdy), gl.Double(0), 1000, -1000)
gl.ClearColor(0, 0, 0, 1)
gl.Clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT)
gl.MatrixMode(gl.MODELVIEW)
gl.LoadIdentity()
base.GetDictionary("crackin").RenderString(fmt.Sprintf("Num players: %d", len(ct.ids)), float64(wdx)/2, 300, 0, 100, gui.Center)
base.GetDictionary("crackin").RenderString(fmt.Sprintf("Num ready: %d", ct.NumReady()), float64(wdx)/2, 400, 0, 100, gui.Center)
if !start.IsZero() {
base.GetDictionary("crackin").RenderString(fmt.Sprintf("Starting in %2.2f", (readyDuration-time.Now().Sub(start)).Seconds()), float64(wdx)/2, 500, 0, 100, gui.Center)
}
})
render.Queue(func() {
sys.SwapBuffers()
})
render.Purge()
}
var devices []gin.DeviceId
for id := range ct.ids {
devices = append(devices, id)
}
return devices
}
开发者ID:runningwild,项目名称:jbot,代码行数:46,代码来源:main.go
示例7: mainLoop
func mainLoop(client sgf.ClientEngine, controllers []gin.DeviceId, console *base.Console) {
client.MakeRequest(game.Join{Rebels: make([]*game.RebelPlayer, 2)})
ticker := time.Tick(time.Millisecond * 17)
render.Queue(func() {
gl.Enable(gl.BLEND)
gl.BlendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA)
})
for {
<-ticker
if gin.In().GetKey(gin.AnyEscape).FramePressCount() != 0 {
return
}
sys.Think()
render.Queue(func() {
gl.Clear(gl.COLOR_BUFFER_BIT)
gl.Disable(gl.DEPTH_TEST)
gui.SetFontColor(1, 1, 1, 1)
gl.Disable(gl.TEXTURE_2D)
gl.MatrixMode(gl.PROJECTION)
gl.LoadIdentity()
gl.Ortho(gl.Double(0), gl.Double(wdx), gl.Double(wdy), gl.Double(0), 1000, -1000)
gl.ClearColor(0, 0, 0, 1)
gl.Clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT)
gl.MatrixMode(gl.MODELVIEW)
gl.LoadIdentity()
base.GetDictionary("crackin").RenderString("Waiting on some nubs", float64(wdx)/2, 300, 0, 100, gui.Center)
})
client.RLock()
g := client.Game().(*game.Game)
mode := g.Mode
client.RUnlock()
if mode == game.ModeWaiting {
} else if mode == game.ModeProgram {
programLoop(client, controllers, console)
} else if mode == game.ModeRun {
}
render.Queue(func() {
sys.SwapBuffers()
})
render.Purge()
}
}
开发者ID:runningwild,项目名称:jbot,代码行数:45,代码来源:main.go
示例8: setupGlStuff
// Sets up anything that wouldn't have been loaded from disk, including
// all opengl data, and sets up finalizers for that data.
func (d *Dictionary) setupGlStuff() {
d.dlists = make(map[string]uint32)
d.strs = make(map[string]strBuffer)
d.pars = make(map[string]strBuffer)
// TODO: This finalizer is untested
runtime.SetFinalizer(d, func(d *Dictionary) {
render.Queue(func() {
for _, v := range d.dlists {
gl.DeleteLists(gl.Uint(v), 1)
}
})
})
render.Queue(func() {
gl.Enable(gl.TEXTURE_2D)
gl.GenTextures(1, (*gl.Uint)(&d.texture))
gl.BindTexture(gl.TEXTURE_2D, gl.Uint(d.texture))
gl.PixelStorei(gl.UNPACK_ALIGNMENT, 1)
gl.TexEnvf(gl.TEXTURE_ENV, gl.TEXTURE_ENV_MODE, gl.MODULATE)
gl.TexParameterf(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR)
gl.TexParameterf(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR)
gl.TexParameterf(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT)
gl.TexParameterf(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT)
gl.TexImage2D(
gl.TEXTURE_2D,
0,
gl.ALPHA,
gl.Sizei(d.data.Dx),
gl.Sizei(d.data.Dy),
0,
gl.ALPHA,
gl.UNSIGNED_BYTE,
gl.Pointer(&d.data.Pix[0]))
gl.Disable(gl.TEXTURE_2D)
})
}
开发者ID:jctaylor1,项目名称:haunts,代码行数:41,代码来源:text.go
示例9: loadRoutine
func (s *sheet) loadRoutine() {
ready := make(chan bool, 1)
pixer := make(chan []byte)
for load := range s.load_chan {
if load {
go s.compose(pixer)
go func() {
render.Queue(func() {
s.makeTexture(pixer)
ready <- true
})
}()
} else {
go func() {
<-ready
render.Queue(func() {
gl.DeleteTextures(1, &s.texture)
s.texture = 0
})
}()
}
}
}
开发者ID:runningwild,项目名称:glop,代码行数:23,代码来源:sheet.go
示例10: LocalThink
func LocalThink(sys system.System, engine *cgf.Engine, game *Game) {
sys.Think()
engine.Pause()
// We might have no level if the event has not gone through yet.
if game.Level != nil {
render.Queue(func() {
game.Render()
sys.SwapBuffers()
})
game.Level.LocalThink(sys, engine)
}
render.Purge()
engine.Unpause()
}
开发者ID:runningwild,项目名称:arkanoid,代码行数:16,代码来源:game.go
示例11: LoadDictionary
func LoadDictionary(r io.Reader) (*Dictionary, error) {
init_once.Do(func() {
render.Queue(func() {
err := render.RegisterShader("glop.font", []byte(font_vertex_shader), []byte(font_fragment_shader))
if err != nil {
panic(err)
}
})
render.Purge()
})
var d Dictionary
err := gob.NewDecoder(r).Decode(&d.data)
if err != nil {
return nil, err
}
d.setupGlStuff()
return &d, nil
}
开发者ID:jctaylor1,项目名称:haunts,代码行数:19,代码来源:text.go
示例12: LoadSprite
func (m *Manager) LoadSprite(path string) (*Sprite, error) {
// We can't run this during an init() function because it will get queued to
// run before the opengl context is created, so we just check here and run
// it if we haven't run it before.
gen_tex_once.Do(func() {
render.Queue(func() {
gl.Enable(gl.TEXTURE_2D)
gl.GenTextures(1, &error_texture)
gl.BindTexture(gl.TEXTURE_2D, error_texture)
gl.TexEnvf(gl.TEXTURE_ENV, gl.TEXTURE_ENV_MODE, gl.MODULATE)
gl.TexParameterf(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR_MIPMAP_LINEAR)
gl.TexParameterf(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR)
gl.TexParameterf(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT)
gl.TexParameterf(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT)
pink := []byte{255, 0, 255, 255}
gl.TexImage2D(
gl.TEXTURE_2D,
0,
gl.RGBA,
1,
1,
0,
gl.RGBA,
gl.UNSIGNED_INT,
gl.Pointer(&pink[0]))
})
})
path = filepath.Clean(path)
err := m.loadSharedSprite(path)
if err != nil {
return nil, err
}
var s Sprite
m.mutex.Lock()
s.shared = m.shared[path]
m.mutex.Unlock()
s.anim_node = s.shared.anim_start
s.state_node = s.shared.state_start
return &s, nil
}
开发者ID:runningwild,项目名称:glop,代码行数:41,代码来源:sprite.go
示例13: setupTextureList
func setupTextureList() {
textureListSync.Do(func() {
render.Queue(func() {
textureList = gl.GenLists(1)
gl.NewList(textureList, gl.COMPILE)
gl.Begin(gl.QUADS)
gl.TexCoord2d(0, -1)
gl.Vertex2i(0, 0)
gl.TexCoord2d(0, 0)
gl.Vertex2i(0, 1)
gl.TexCoord2d(1, 0)
gl.Vertex2i(1, 1)
gl.TexCoord2d(1, -1)
gl.Vertex2i(1, 0)
gl.End()
gl.EndList()
})
})
}
开发者ID:runningwild,项目名称:jbot,代码行数:22,代码来源:manager.go
示例14: main
func main() {
defer base.StackCatcher()
fmt.Printf("sys.Startup()...")
sys.Startup()
fmt.Printf("successful.\n")
fmt.Printf("gl.Init()...")
err := gl.Init()
fmt.Printf("successful.\n")
if err != nil {
base.Error().Fatalf("%v", err)
}
fmt.Printf("render.Init()...")
render.Init()
fmt.Printf("successful.\n")
render.Queue(func() {
fmt.Printf("sys.CreateWindow()...")
sys.CreateWindow(10, 10, wdx, wdy)
fmt.Printf("successful.\n")
sys.EnableVSync(true)
})
base.InitShaders()
runtime.GOMAXPROCS(10)
fmt.Printf("sys.Think()...")
sys.Think()
fmt.Printf("successful.\n")
base.LoadAllDictionaries()
if Version() != "standard" {
engine, local := debugHookup(Version())
mainLoop(engine, local, "standard")
} else {
standardHookup()
}
}
开发者ID:runningwild,项目名称:magnus,代码行数:36,代码来源:main.go
示例15: main
func main() {
fmt.Printf("%v\n", key_map)
sys.Startup()
err := gl.Init()
if err != nil {
panic(err)
}
render.Init()
render.Queue(func() {
sys.CreateWindow(10, 10, wdx, wdy)
sys.EnableVSync(true)
err := gl.Init()
if err != nil {
panic(err)
}
})
base.InitShaders()
runtime.GOMAXPROCS(2)
ui, err = gui.Make(gin.In(), gui.Dims{wdx, wdy}, filepath.Join(datadir, "fonts", "skia.ttf"))
if err != nil {
panic(err)
}
sys.Think()
for false && len(sys.GetActiveDevices()[gin.DeviceTypeController]) < 2 {
time.Sleep(time.Millisecond * 100)
sys.Think()
}
var ids []int
var engine *cgf.Engine
var room game.Room
err = base.LoadJson(filepath.Join(base.GetDataDir(), "rooms/basic.json"), &room)
if err != nil {
panic(err)
}
if IsHost() {
sys.Think()
var g game.Game
g.Rng = cmwc.MakeGoodCmwc()
g.Rng.SeedWithDevRand()
g.Dx = 900
g.Dy = 600
g.Friction = 0.97
g.Friction_lava = 0.85
g.Room = room
var p game.Player
p.Color.R = 255
err := json.NewDecoder(bytes.NewBuffer([]byte(`
{
"Base": {
"Max_turn": 0.07,
"Max_acc": 0.2,
"Mass": 750,
"Max_rate": 10,
"Influence": 75,
"Health": 1000
},
"Dynamic": {
"Health": 1000
}
}
`))).Decode(&p.Stats)
if err != nil {
panic(err)
}
Nx := 2
Ny := 1
p.X = float64(g.Dx-Nx)/2 - 200
p.Y = float64(g.Dy-Ny)/2 - 200
for x := 0; x < Nx; x++ {
for y := 0; y < Ny; y++ {
p.X += float64(x * 25)
p.Y += float64(y * 25)
p.Gid++
// p.Mass += float64(x+y) * 150
p.Processes = make(map[int]game.Process)
temp := p
ids = append(ids, g.AddEnt(&temp))
// p.Mass -= float64(x+y) * 150
p.X -= float64(x * 25)
p.Y -= float64(y * 25)
}
}
g.Ents[0].(*game.Player).X = 500
g.Ents[0].(*game.Player).Y = 300
g.Ents[1].(*game.Player).X = 550
g.Ents[1].(*game.Player).Y = 300
g.SetLocalData()
d := sys.GetActiveDevices()
base.Log().Printf("%v\n", d)
n := 0
base.Log().Printf("%v\n", d[gin.DeviceTypeController])
for _, index := range d[gin.DeviceTypeController] {
// panic("ASD")
g.SetLocalPlayer(g.Ents[n].(*game.Player), index)
n++
if n > 2 {
break
//.........这里部分代码省略.........
开发者ID:dgthunder,项目名称:magnus,代码行数:101,代码来源:main.go
示例16: main
func main() {
sys = system.Make(gos.GetSystemInterface())
sys.Startup()
wdx := 1000
wdy := 500
render.Init()
var ui *gui.Gui
render.Queue(func() {
sys.CreateWindow(50, 150, wdx, wdy)
sys.EnableVSync(true)
err := gl.Init()
if err != nil {
f, err2 := os.Create(filepath.Join(datadir, "gl_log.txt"))
if err2 != nil {
fmt.Printf("Unable to write log to a file:%v\n%v\v", err, err2)
} else {
fmt.Fprintf(f, "%v\n", err)
f.Close()
}
}
ui, _ = gui.Make(gin.In(), gui.Dims{wdx, wdy}, filepath.Join(datadir, "fonts", "luxisr.ttf"))
font, err := loadFont()
if err != nil {
panic(err.Error())
}
dict = gui.MakeDictionary(font, 15)
})
render.Purge()
anchor := gui.MakeAnchorBox(gui.Dims{wdx, wdy})
ui.AddChild(anchor)
var event_handler handler
gin.In().RegisterEventListener(&event_handler)
actions_list := gui.MakeVerticalTable()
keyname_list := gui.MakeVerticalTable()
both_lists := gui.MakeHorizontalTable()
both_lists.AddChild(actions_list)
both_lists.AddChild(keyname_list)
anchor.AddChild(both_lists, gui.Anchor{1, 0.5, 1, 0.5})
var actions []string
for action := range action_map {
actions = append(actions, action)
}
sort.Strings(actions)
for _, action := range actions {
actions_list.AddChild(gui.MakeTextLine("standard", action, 150, 1, 1, 1, 1))
keyname_list.AddChild(gui.MakeTextLine("standard", commands[action].Cmd, 100, 1, 1, 1, 1))
}
current_anim := gui.MakeTextLine("standard", "", 300, 1, 1, 1, 1)
current_state := gui.MakeTextLine("standard", "", 300, 1, 1, 1, 1)
frame_data := gui.MakeVerticalTable()
frame_data.AddChild(current_anim)
frame_data.AddChild(current_state)
anchor.AddChild(frame_data, gui.Anchor{0, 1, 0, 1})
speed := 100
speed_text := gui.MakeTextLine("standard", "Speed: 100%", 150, 1, 1, 1, 1)
anchor.AddChild(speed_text, gui.Anchor{0, 0, 0, 0})
var box1, box2 boxdata
box1.name = "box1"
box1.sb = makeSpriteBox(nil)
anchor.AddChild(box1.sb, gui.Anchor{0.5, 0.5, 0.25, 0.5})
box1.load(GetStoreVal("box1"))
box := box1
box2.name = "box2"
box2.sb = makeSpriteBox(nil)
anchor.AddChild(box2.sb, gui.Anchor{0.5, 0.5, 0.45, 0.5})
box2.load(GetStoreVal("box2"))
box2.sb.top = true
box_other := box2
box2.sb.r, box2.sb.g, box2.sb.b = 0.2, 0.1, 0.4
box1.sb.r, box1.sb.g, box1.sb.b = 0.4, 0.2, 0.8
error_msg = gui.MakeTextLine("standard", "", wdx, 1, 0.5, 0.5, 1)
anchor.AddChild(error_msg, gui.Anchor{0, 0, 0, 0.1})
var chooser gui.Widget
// curdir := GetStoreVal("curdir")
// if curdir == "" {
// curdir = "."
// } else {
// _,err := os.Stat(filepath.Join(datadir, curdir))
// if err == nil {
// go func() {
// anim, err := sprite.LoadSprite(filepath.Join(datadir, curdir))
// loaded <- loadResult{ anim, err }
// } ()
// } else {
// curdir = "."
// }
// }
// var profile_output *os.File
then := time.Now()
sys.Think()
for key_map["quit"].FramePressCount() == 0 {
//.........这里部分代码省略.........
开发者ID:runningwild,项目名称:tester,代码行数:101,代码来源:main.go
示例17: InitShaders
func InitShaders() {
render.Queue(func() {
vertex_shaders = make(map[string]uint32)
fragment_shaders = make(map[string]uint32)
shader_progs = make(map[string]uint32)
warned_names = make(map[string]bool)
RemoveRegistry("shaders")
RegisterRegistry("shaders", make(map[string]*shaderDef))
RegisterAllObjectsInDir("shaders", filepath.Join(GetDataDir(), "shaders"), ".json", "json")
names := GetAllNamesInRegistry("shaders")
for _, name := range names {
// Load the shader files
shader := Shader{Defname: name}
GetObject("shaders", &shader)
vdata, err := ioutil.ReadFile(filepath.Join(GetDataDir(), shader.Vertex_path))
if err != nil {
Error().Printf("Unable to load vertex shader '%s': %v", shader.Vertex_path, err)
continue
}
fdata, err := ioutil.ReadFile(filepath.Join(GetDataDir(), shader.Fragment_path))
if err != nil {
Error().Printf("Unable to load fragment shader '%s': %v", shader.Fragment_path, err)
continue
}
// Create the vertex shader
vertex_id, ok := vertex_shaders[shader.Vertex_path]
if !ok {
vertex_id = gl.CreateShader(gl.VERTEX_SHADER)
pointer := &vdata[0]
length := int32(len(vdata))
gl.ShaderSource(vertex_id, 1, (**gl.Char)(unsafe.Pointer(&pointer)), &length)
gl.CompileShader(vertex_id)
var param int32
gl.GetShaderiv(vertex_id, gl.COMPILE_STATUS, ¶m)
if param == 0 {
Error().Printf("Failed to compile vertex shader '%s': %v", shader.Vertex_path, param)
continue
}
}
// Create the fragment shader
fragment_id, ok := fragment_shaders[shader.Fragment_path]
if !ok {
fragment_id = gl.CreateShader(gl.FRAGMENT_SHADER)
pointer := &fdata[0]
length := int32(len(fdata))
gl.ShaderSource(fragment_id, 1, (**gl.Char)(unsafe.Pointer(&pointer)), &length)
gl.CompileShader(fragment_id)
var param int32
gl.GetShaderiv(fragment_id, gl.COMPILE_STATUS, ¶m)
if param == 0 {
Error().Printf("Failed to compile fragment shader '%s': %v", shader.Fragment_path, param)
continue
}
}
// shader successfully compiled - now link
program_id := gl.CreateProgram()
gl.AttachShader(program_id, vertex_id)
gl.AttachShader(program_id, fragment_id)
gl.LinkProgram(program_id)
var param int32
gl.GetProgramiv(program_id, gl.LINK_STATUS, ¶m)
if param == 0 {
Error().Printf("Failed to link shader '%s': %v", shader.Name, param)
continue
}
vertex_shaders[shader.Vertex_path] = vertex_id
fragment_shaders[shader.Fragment_path] = fragment_id
shader_progs[shader.Name] = program_id
}
})
}
开发者ID:RickDakan,项目名称:haunts,代码行数:75,代码来源:shaders.go
示例18: handleLoadRequest
func handleLoadRequest(req loadRequest) {
f, _ := os.Open(req.path)
im, _, err := image.Decode(f)
f.Close()
if err != nil {
return
}
gray := true
dx := im.Bounds().Dx()
dy := im.Bounds().Dy()
for i := 0; i < dx; i++ {
for j := 0; j < dy; j++ {
r, g, b, _ := im.At(i, j).RGBA()
if r != g || g != b {
gray = false
break
}
}
if !gray {
break
}
}
var canvas draw.Image
var pix []byte
if gray {
ga := NewGrayAlpha(im.Bounds())
pix = ga.Pix
canvas = ga
} else {
pix = memory.GetBlock(4 * req.data.dx * req.data.dy)
canvas = &image.RGBA{pix, 4 * req.data.dx, im.Bounds()}
}
draw.Draw(canvas, im.Bounds(), im, image.Point{}, draw.Src)
load_mutex.Lock()
load_count += len(pix)
manual_unlock := false
// This prevents us from trying to send too much to opengl in a single
// frame. If we go over the threshold then we hold the lock until we're
// done sending data to opengl, then other requests will be free to
// queue up and they will run on the next frame.
if load_count < load_threshold {
load_mutex.Unlock()
} else {
manual_unlock = true
}
render.Queue(func() {
{
gl.Enable(gl.TEXTURE_2D)
gl.GenTextures(1, (*gl.Uint)(&req.data.texture))
gl.BindTexture(gl.TEXTURE_2D, req.data.texture)
gl.PixelStorei(gl.UNPACK_ALIGNMENT, 1)
gl.TexParameterf(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR)
gl.TexParameterf(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR)
gl.TexParameterf(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT)
gl.TexParameterf(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT)
}
if gray {
gl.TexImage2D(
gl.TEXTURE_2D,
0,
gl.LUMINANCE_ALPHA,
gl.Sizei(req.data.dx),
gl.Sizei(req.data.dy),
0,
gl.LUMINANCE_ALPHA,
gl.BYTE,
gl.Pointer(&pix[0]))
} else {
gl.TexImage2D(
gl.TEXTURE_2D,
0,
gl.RGBA,
gl.Sizei(req.data.dx),
gl.Sizei(req.data.dy),
0,
gl.RGBA,
gl.UNSIGNED_BYTE,
gl.Pointer(&pix[0]))
// gl.TexImage2D(target, level, internalformat, width, height, border, format, type_, pixels)
// glu.Build2DMipmaps(gl.TEXTURE_2D, gl.RGBA, req.data.dx, req.data.dy, gl.RGBA, pix)
}
memory.FreeBlock(pix)
if manual_unlock {
load_count = 0
load_mutex.Unlock()
}
})
}
开发者ID:runningwild,项目名称:jbot,代码行数:88,代码来源:manager.go
示例19: main
func main() {
{
f, err := os.Create("/Users/jwills/code/src/github.com/runningwild/shadertest/log.err")
if err != nil {
panic("shoot")
}
os.Stderr = f
f, err = os.Create("/Users/jwills/code/src/github.com/runningwild/shadertest/log.out")
if err != nil {
panic("shoot")
}
os.Stdout = f
}
sys.Startup()
err := gl.Init()
if err != nil {
panic(err)
}
fmt.Printf("RAWR!!!\n")
render.Init()
render.Queue(func() {
sys.CreateWindow(10, 10, wdx, wdy)
sys.EnableVSync(true)
err := gl.Init()
if err != nil {
panic(err)
}
})
base.InitShaders()
runtime.GOMAXPROCS(2)
ui, err = gui.Make(gin.In(), gui.Dims{wdx, wdy}, filepath.Join(datadir, "fonts", "skia.ttf"))
if err != nil {
panic(err)
}
anchor := gui.MakeAnchorBox(gui.Dims{wdx, wdy})
ui.AddChild(anchor)
var v float64
// var profile_output *os.File
// var num_mem_profiles int
// ui.AddChild(base.MakeConsole())
size := 19.0
base.InitShaders()
x := gl.Double(0.0)
// y := 0.0
// tex := texture.LoadFromPath(filepath.Join(base.GetDataDir(), "test/out.dff.small.png"))
fmt.Printf("RAWR!\n")
listener := Listener{}
gin.In().RegisterEventListener(&listener)
button := gin.In().GetKeyFlat(gin.ControllerButton0+6, gin.DeviceTypeController, gin.DeviceIndexAny)
fmt.Printf("RAWR!\n")
for button.FramePressCount() == 0 {
sys.Think()
// dsize := gin.In().GetKey(gin.MouseWheelVertical).FramePressAmt()
// size += dsize
// x -= float64(tex.Dx()) * dsize / 2
// y -= float64(tex.Dy()) * dsize / 2
// if gin.In().GetKey(gin.Down).FramePressAmt() > 0 {
// y += 10
// }
// if gin.In().GetKey(gin.Up).FramePressAmt() > 0 {
// y -= 10
// }
// if gin.In().GetKey(gin.Left).FramePressAmt() > 0 {
// x += 10
// }
// if gin.In().GetKey(gin.Right).FramePressAmt() > 0 {
// x -= 10
// }
render.Queue(func() {
ui.Draw()
gl.Enable(gl.BLEND)
gl.BlendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA)
gl.Disable(gl.TEXTURE_2D)
gl.Color4ub(255, 0, 0, 255)
gl.Begin(gl.QUADS)
gl.Vertex2d(100+x, 20)
gl.Vertex2d(100+x, gl.Double(size+20))
gl.Vertex2d(200+x, gl.Double(size+20))
gl.Vertex2d(200+x, 20)
x += 1
gl.End()
gl.Enable(gl.TEXTURE_2D)
gl.Color4ub(255, 255, 255, 255)
// // str := "[email protected]#$%^&*"
// diff := 5.0 / (math.Log(size) + math.Pow(size, 0.7))
// // Works for 1200
// diff = 50 * math.Pow(base.GetDictionary("skia").Scale(), 2) / math.Pow(size, 1.0)
// // Works for 3000
// diff = 50 * math.Pow(base.GetDictionary("skia").Scale(), 1.5) / math.Pow(size, 0.8)
// //0.340637
// //0.159241
// diff = 75 * math.Pow(base.GetDictionary("skia").Scale(), 1.0) / math.Pow(size, 1.0)
// diff = 10 / math.Pow(size, 1.0)
// diff = 20/math.Pow(size, 1.0) + 5*math.Pow(base.GetDictionary("skia").Scale(), 1.0)/math.Pow(size, 1.0)
// if diff > 0.45 {
// diff = 0.45
// }
//.........这里部分代码省略.........
开发者ID:runningwild,项目名称:shadertest,代码行数:101,代码来源:main.go
示例20: handleLoadRequest
func handleLoadRequest(req loadRequest) {
f, _ := os.Open(req.path)
im, _, err := image.Decode(f)
f.Close()
if err != nil {
return
}
gray := true
dx := im.Bounds().Dx()
dy := im.Bounds().Dy()
for i := 0; i < dx; i++ {
for j := 0; j < dy; j++ {
r, g, b, _ := im.At(i, j).RGBA()
if r != g || g != b {
gray = false
break
}
}
if !gray {
break
}
}
var canvas draw.Image
var pix []byte
if gray {
ga := NewGrayAlpha(im.Bounds())
pix = ga.Pix
canvas = ga
} else {
pix = memory.GetBlock(4 * req.data.dx * req.data.dy)
canvas = &image.RGBA{pix, 4 * req.data.dx, im.Bounds()}
}
draw.Draw(canvas, im.Bounds(), im, image.Point{}, draw.Src)
load_mutex.Lock()
load_count += len(pix)
manual_unlock := false
// This prevents us from trying to send too much to opengl in a single
// frame. If we go over the threshold then we hold the lock until we're
// done sending data to opengl, then other requests will be free to
// queue up and they will run on the next frame.
if load_count < load_threshold {
load_mutex.Unlock()
} else {
manual_unlock = true
}
render.Queue(func() {
{
gl.Enable(gl.TEXTURE_2D)
req.data.texture = gl.GenTexture()
req.data.texture.Bind(gl.TEXTURE_2D)
gl.TexEnvf(gl.TEXTURE_ENV, gl.TEXTURE_ENV_MODE, gl.MODULATE)
gl.TexParameterf(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR_MIPMAP_LINEAR)
gl.TexParameterf(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR)
gl.TexParameterf(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT)
gl.TexParameterf(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT)
}
if gray {
glu.Build2DMipmaps(gl.TEXTURE_2D, gl.LUMINANCE_ALPHA, req.data.dx, req.data.dy, gl.LUMINANCE_ALPHA, pix)
} else {
glu.Build2DMipmaps(gl.TEXTURE_2D, gl.RGBA, req.data.dx, req.data.dy, gl.RGBA, pix)
}
memory.FreeBlock(pix)
if manual_unlock {
load_count = 0
load_mutex.Unlock()
}
})
}
开发者ID:RickDakan,项目名称:haunts,代码行数:68,代码来源:manager.go
注:本文中的github.com/runningwild/glop/render.Queue函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论