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 (texture *Texture) SetMipmapSharpness(sharpness float32) { var maxMipmapSharpness float32 gl.GetFloatv(gl.MAX_TEXTURE_LOD_BIAS, &maxMipmapSharpness) mipmapSharpness := math.Min(math.Max(float64(sharpness), -float64(maxMipmapSharpness+0.01)), float64(maxMipmapSharpness-0.01)) bindTexture(texture.getHandle()) //negative bias is sharper gl.TexParameterf(gl.TEXTURE_2D, gl.TEXTURE_LOD_BIAS, -float32(mipmapSharpness)) }
func (t *Transform) update() { gl.LoadMatrixf(&(t.parent.matrix[0])) gl.Translatef(t.position.X, t.position.Y, 0) gl.Rotatef(t.rotation, 0, 0, -1) gl.GetFloatv(gl.MODELVIEW_MATRIX, &(t.parent.matrix[0])) for _, c := range t.children { c.update() } }
func (t *Transform) Update() { var m *float32 if t.parentTransform != nil { m = &(t.parentTransform.Matrix[0]) } else { m = &(t.Matrix[0]) } gl.LoadMatrixf(m) gl.Translatef(t.position.X, t.position.Y, 0) gl.Rotatef(t.rotation, 0, 0, -1) gl.GetFloatv(gl.MODELVIEW_MATRIX, &(t.Matrix[0])) t.NeedsUpdate = false for _, c := range t.childTransforms { c.Update() } }
// GetFloatv returns the float values of parameter pname. // // http://www.khronos.org/opengles/sdk/docs/man3/html/glGet.xhtml func GetFloatv(dst []float32, pname Enum) { gl.GetFloatv(uint32(pname), &dst[0]) }
// 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() }