func reshape(w, h int) { gl.Viewport(0, 0, gl.GLsizei(w), gl.GLsizei(h)) gl.MatrixMode(gl.PROJECTION) gl.LoadIdentity() gl.Ortho(0, gl.GLdouble(w), 0, gl.GLdouble(h), -1, 1) gl.Scalef(1, -1, 1) gl.Translatef(0, gl.GLfloat(-h), 0) gl.MatrixMode(gl.MODELVIEW) }
func main() { sdl.Init(sdl.INIT_VIDEO) var screen = sdl.SetVideoMode(640, 480, 32, sdl.OPENGL) if screen == nil { panic("sdl error") } if gl.Init() != 0 { panic("glew error") } pen := Pen{} gl.MatrixMode(gl.PROJECTION) gl.Viewport(0, 0, gl.GLsizei(screen.W), gl.GLsizei(screen.H)) gl.LoadIdentity() gl.Ortho(0, gl.GLdouble(screen.W), gl.GLdouble(screen.H), 0, -1.0, 1.0) gl.ClearColor(1, 1, 1, 0) gl.Clear(gl.COLOR_BUFFER_BIT) var running = true for running { e := &sdl.Event{} for e.Poll() { switch e.Type { case sdl.QUIT: running = false break case sdl.KEYDOWN: running = false break case sdl.MOUSEMOTION: me := e.MouseMotion() if me.State != 0 { pen.lineTo(Point{int(me.X), int(me.Y)}) } else { pen.moveTo(Point{int(me.X), int(me.Y)}) } break } } sdl.GL_SwapBuffers() sdl.Delay(25) } sdl.Quit() }
func (f *Font) setupTextRendering(color [3]byte, txt string) (gl.GLuint, *sdl.Surface, *sdl.Surface, *sdl.Surface, int, int) { // var texture gl.GLuint /* Use SDL_TTF to render our text */ var col sdl.Color col.R = color[0] col.G = color[1] col.B = color[2] // get surface with text initial := ttf.RenderText_Blended(f.font, txt, col) /* Convert the rendered text to a known format */ w := next_p2(int(initial.W)) h := next_p2(int(initial.H)) intermediarya := sdl.CreateRGBSurface(0, w, h, 32, 0x00ff0000, 0x0000ff00, 0x000000ff, 0xff000000) var rr *sdl.Rect = nil intermediarya.Blit(rr, initial, rr) intermediary := intermediarya.DisplayFormatAlpha() /* Tell GL about our new texture */ gl.GenTextures(1, &texture) gl.BindTexture(gl.TEXTURE_2D, texture) gl.TexImage2D(gl.TEXTURE_2D, 0, 4, gl.GLsizei(w), gl.GLsizei(h), 0, gl.BGRA, gl.UNSIGNED_BYTE, unsafe.Pointer(intermediary.Pixels)) gl.TexEnvi(gl.TEXTURE_ENV, gl.TEXTURE_ENV_MODE, gl.MODULATE) /* GL_NEAREST looks horrible, if scaled... */ gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR) gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR) /* prepare to render our texture */ gl.Enable(gl.TEXTURE_2D) gl.BindTexture(gl.TEXTURE_2D, texture) gl.Color4f(1.0, 1.0, 1.0, 1.0) gl.Enable(gl.BLEND) // gl.BlendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA) gl.BlendFunc(gl.ONE, gl.ONE_MINUS_SRC_COLOR) // TODO : MAke real alpha work! return texture, initial, intermediarya, intermediary, w, h }
func reshape(w, h int) { /* Because Gil specified "screen coordinates" (presumably with an upper-left origin), this short bit of code sets up the coordinate system to correspond to actual window coodrinates. This code wouldn't be required if you chose a (more typical in 3D) abstract coordinate system. */ gl.Viewport(0, 0, gl.GLsizei(w), gl.GLsizei(h)) /* Establish viewing area to cover entire window. */ gl.MatrixMode(gl.PROJECTION) /* Start modifying the projection matrix. */ gl.LoadIdentity() /* Reset project matrix. */ gl.Ortho(0, gl.GLdouble(w), 0, gl.GLdouble(h), -1, 1) /* Map abstract coords directly to window coords. */ gl.Scalef(1, -1, 1) /* Invert Y axis so increasing Y goes down. */ gl.Translatef(0, gl.GLfloat(-h), 0) /* Shift origin up to upper-left corner. */ }
func uploadTexture_RGBA32(w, h int, data []byte) gl.GLuint { var id gl.GLuint gl.GenTextures(1, &id) gl.BindTexture(gl.TEXTURE_2D, id) gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR) gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR) gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE) gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE) gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_R, gl.CLAMP_TO_EDGE) gl.TexImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.GLsizei(w), gl.GLsizei(h), 0, gl.RGBA, gl.UNSIGNED_BYTE, unsafe.Pointer(&data[0])) if gl.GetError() != gl.NO_ERROR { gl.DeleteTextures(1, &id) panic("Failed to load a texture") return 0 } return id }
func ResizeWindow(w int32, h int32) { // resizeWindow gl.MatrixMode(gl.PROJECTION) gl.Viewport(0, 0, gl.GLsizei(w), gl.GLsizei(h)) gl.LoadIdentity() // glu.Perspective( 45.0, ratio, 0.1, 100.0) aspect := gl.GLdouble(w) / gl.GLdouble(h) zNear := gl.GLdouble(0.1) zFar := gl.GLdouble(100.0) gl.Frustum(-NearHeight*aspect, NearHeight*aspect, -NearHeight, NearHeight, zNear, zFar) gl.MatrixMode(gl.MODELVIEW) gl.LoadIdentity() WinW = int(w) WinH = int(h) }