func initMaxValues() { gl_state.framebufferSRGBEnabled = gl.IsEnabled(gl.FRAMEBUFFER_SRGB) gl.GetFloatv(gl.POINT_SIZE, &states.back().pointSize) gl.GetFloatv(gl.MAX_TEXTURE_MAX_ANISOTROPY_EXT, &maxAnisotropy) gl.GetIntegerv(gl.MAX_TEXTURE_SIZE, &maxTextureSize) gl.GetIntegerv(gl.MAX_SAMPLES, &maxRenderbufferSamples) gl.GetIntegerv(gl.MAX_COMBINED_TEXTURE_IMAGE_UNITS, &maxTextureUnits) gl_state.textureCounters = make([]int, maxTextureUnits) gl.GetIntegerv(gl.MAX_DRAW_BUFFERS, &maxRenderTargets) var maxattachments int32 gl.GetIntegerv(gl.MAX_COLOR_ATTACHMENTS, &maxattachments) if maxattachments < maxRenderTargets { maxRenderTargets = maxattachments } }
func (c *Context) Reset() error { if err := c.runOnContextThread(func() error { if c.init { return nil } // Note that this initialization must be done after Loop is called. if err := gl.Init(); err != nil { return fmt.Errorf("opengl: initializing error %v", err) } c.init = true return nil }); err != nil { return nil } c.locationCache = newLocationCache() c.lastTexture = invalidTexture c.lastFramebuffer = invalidFramebuffer c.lastViewportWidth = 0 c.lastViewportHeight = 0 c.lastCompositeMode = CompositeModeUnknown if err := c.runOnContextThread(func() error { gl.Enable(gl.BLEND) return nil }); err != nil { return err } c.BlendFunc(CompositeModeSourceOver) if err := c.runOnContextThread(func() error { f := int32(0) gl.GetIntegerv(gl.FRAMEBUFFER_BINDING, &f) c.screenFramebuffer = Framebuffer(f) return nil }); err != nil { return err } return nil }
// GetBoundFramebuffer returns the currently bound framebuffer. // Use this method instead of gl.GetInteger(gl.FRAMEBUFFER_BINDING) to // enable support on all platforms func GetBoundFramebuffer() Framebuffer { var b int32 gl.GetIntegerv(FRAMEBUFFER_BINDING, &b) return Framebuffer{Value: uint32(b)} }
// GetInteger returns the int value of parameter pname. // // http://www.khronos.org/opengles/sdk/docs/man3/html/glGet.xhtml func GetInteger(pname Enum) int { var data int32 gl.GetIntegerv(uint32(pname), &data) return int(data) }
// GetIntegerv returns the int values of parameter pname. // // Single values may be queried more easily using GetInteger. // // http://www.khronos.org/opengles/sdk/docs/man3/html/glGet.xhtml func GetIntegerv(pname Enum, data []int32) { gl.GetIntegerv(uint32(pname), &data[0]) }
func (c *Context) GetViewport() [4]int32 { var params [4]int32 gl.GetIntegerv(gl.VIEWPORT, ¶ms[0]) return params }
// Printf draws the given string at the specified coordinates. // It expects the string to be a single line. Line breaks are not // handled as line breaks and are rendered as glyphs. // // In order to render multi-line text, it is up to the caller to split // the text up into individual lines of adequate length and then call // this method for each line seperately. func (f *Font) Printf(x, y float32, fs string, argv ...interface{}) error { indices := []rune(fmt.Sprintf(fs, argv...)) if len(indices) == 0 { return nil } // Runes form display list indices. // For this purpose, they need to be offset by -FontConfig.Low low := f.config.Low for i := range indices { indices[i] -= low } var vp [4]int32 gl.GetIntegerv(gl.VIEWPORT, &vp[0]) gl.PushAttrib(gl.TRANSFORM_BIT) gl.MatrixMode(gl.PROJECTION) gl.PushMatrix() gl.LoadIdentity() gl.Ortho(float64(vp[0]), float64(vp[2]), float64(vp[1]), float64(vp[3]), 0, 1) gl.PopAttrib() gl.PushAttrib(gl.LIST_BIT | gl.CURRENT_BIT | gl.ENABLE_BIT | gl.TRANSFORM_BIT) { gl.MatrixMode(gl.MODELVIEW) gl.Disable(gl.LIGHTING) gl.Disable(gl.DEPTH_TEST) gl.Enable(gl.BLEND) gl.Enable(gl.TEXTURE_2D) gl.BlendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA) gl.TexEnvf(gl.TEXTURE_ENV, gl.TEXTURE_ENV_MODE, gl.MODULATE) gl.BindTexture(gl.TEXTURE_2D, f.texture) gl.ListBase(f.listbase) var mv [16]float32 gl.GetFloatv(gl.MODELVIEW_MATRIX, &mv[0]) gl.PushMatrix() { gl.LoadIdentity() mgw := float32(f.maxGlyphWidth) mgh := float32(f.maxGlyphHeight) switch f.config.Dir { case LeftToRight, TopToBottom: gl.Translatef(x, float32(vp[3])-y-mgh, 0) case RightToLeft: gl.Translatef(x-mgw, float32(vp[3])-y-mgh, 0) } gl.MultMatrixf(&mv[0]) gl.CallLists(int32(len(indices)), gl.UNSIGNED_INT, unsafe.Pointer(&indices[0])) } gl.PopMatrix() gl.BindTexture(gl.TEXTURE_2D, 0) } gl.PopAttrib() gl.PushAttrib(gl.TRANSFORM_BIT) gl.MatrixMode(gl.PROJECTION) gl.PopMatrix() gl.PopAttrib() return checkGLError() }