func createShader(name string, shaderType int) (gl.Shader, os.Error) { data, err := fileRead(name) if err != nil { return 0, err } if len(data) == 0 { return 0, os.NewError("No shader code.") } var shader gl.Shader switch shaderType { case VertexShaderType: shader = gl.CreateShader(gl.VERTEX_SHADER) case FragmentShaderType: shader = gl.CreateShader(gl.FRAGMENT_SHADER) default: return 0, os.NewError("Unknown ShaderType.") } shader.Source(data) shader.Compile() // Similar to print_log in the C code example infoLog := shader.GetInfoLog() if len(infoLog) != 0 { shader.Delete() return 0, err } errNum := gl.GetError() if errNum != 0 { return 0, os.NewError(fmt.Sprintf("Error code: %d", errNum)) } return shader, nil }
func (gd *openGLGraphicsDevice) NewShader(vertexShaderStr, fragmentShaderStr string) Shader { vertexShader := gl.CreateShader(gl.VERTEX_SHADER) vertexShader.Source(vertexShaderStr) vertexShader.Compile() fmt.Println(vertexShader.GetInfoLog()) fragmentShader := gl.CreateShader(gl.FRAGMENT_SHADER) fragmentShader.Source(fragmentShaderStr) fragmentShader.Compile() fmt.Println(fragmentShader.GetInfoLog()) program := gl.CreateProgram() program.AttachShader(vertexShader) program.AttachShader(fragmentShader) program.Link() program.Validate() fmt.Println(program.GetInfoLog()) return &openGLShader{vertexShader, fragmentShader, program} }
func main() { //ABSPTest() //return glfw.Init(800, 600) InitPhysics() world := new(World) world.Init() world.GameObjects = new(list.List) player := MakeMan(Vec3{10, 20, 10}) world.Add(player) world.Add(ropetest(Vec3{0, 40, 0}, 4, 4)) world.Add(treeThing(Vec3{20, 20, 20}, 3)) world.Add(MakePlayer(Vec3{-20, 20, 0}).Body) world.Add(MakePlayer(Vec3{-20, 50, 0}).Body) world.Add(MakePlayer(Vec3{-20, 70, 0}).Body) world.Add(MakePlayer(Vec3{-20, 90, 0}).Body) world.Add(MakePlayer(Vec3{-20, 110, 0}).Body) /*for i := 0; i < 100; i++ { world.Add(SetPlayerAnimation(MakePlayer(Vec3{float32(int(i%10))*50,0,float32(i*2) - 200})).Body) }*/ world.Add(NewGameObj(Vec3{0, -20, 0}, Vec3{10000, 10, 10000}, Vec3{0, 0.5, 0.1}, float32(math.Inf(1)), 10, nil)) //world.Add(SetPlayerAnimation(MakePlayer(Vec3{-20,120,0})).Body) qtn := new(ABSPNode) qtn.Root = qtn //qtn.Position = Vec3{-10000,-10000,-10000} //qtn.Size = Vec3{20000,20000,20000} for i := world.GameObjects.Front(); i != nil; i = i.Next() { gobj := i.Value.(*GameObj) all := gobj.GetSubs() for i := 0; i < len(all); i++ { qtn.Insert(all[i]) } } world.GameObjectTree = qtn fmt.Println("Total:", len(qtn.Data)) qtn.Divide() cols := 0 qtn.cd(func(obj1, obj2 SPData) { cols += 1 }) fmt.Println(cols) //qtn.Traverse(0) //return gl.Init() vs := gl.CreateShader(gl.VERTEX_SHADER) vs.Source( LoadFileToString("s1.vert")) vs.Compile() fs := gl.CreateShader(gl.FRAGMENT_SHADER) fs.Source(LoadFileToString("s1.frag")) fs.Compile() pg := gl.CreateProgram() pg.AttachShader(vs) pg.AttachShader(fs) pg.Link() pg.Validate() pg.Use() fmt.Println("**Shader log**") fmt.Println(fs.GetInfoLog()) fmt.Println(vs.GetInfoLog()) fmt.Println(pg.GetInfoLog()) fmt.Println("******END*****") gl.ClearColor(0.5, 0.5, 1, 0) gl.Enable(gl.DEPTH_TEST) gl.Enable(gl.BLEND) gl.Enable(gl.POLYGON_SMOOTH) gl.Hint(gl.POLYGON_SMOOTH_HINT, gl.NICEST) var t float64 t = float64(time.Nanoseconds()) / 1000000000 cam1 := Camera{player, 100, Vec3{0, 0, 0}} glfw.AddListener(func(m glfw.MouseMoveEvent) { cam1.Angle.X = float32(m.X-400) / 400 * 3.14 * 2 cam1.Angle.Y = float32(m.Y-300) / 300 * 3.14 * 2 //player.Rotation = Vec3{cam1.Angle.X,cam1.Angle.Y,0} }) glfw.AddListener(func(mw glfw.MouseWheelEvent) { cam1.Distance = 100 + float32(mw.Pos*mw.Pos*mw.Pos) }) world.CompilePhysicsObjects() for it := 0; it < 10000; it += 1 { cam1.Setup() dt := float32(0.005) t = float64(float64(time.Nanoseconds()) / 1000000000) UpdatePositions(world.PhysicsObjects, dt) UpdateModelStates(world.PhysicsObjects) UpdateCollisions(world.GameObjectTree, dt) UpdateModelStates(world.PhysicsObjects) gl.Clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT) DrawWorld(world.GameObjects, dt, pg) glfw.SwapBuffers() pt := float64(float64(time.Nanoseconds()) / 1000000000) sleeptime := (float64(dt) - (pt - t)) * 10e8 fmt.Println("Sleep for:", sleeptime) time.Sleep(int64(sleeptime)) } }