gl

package
v2.1.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 17, 2021 License: BSD-3-Clause Imports: 4 Imported by: 0

Documentation

Overview

Package gl implements Go bindings for OpenGL ES 2.0 and ES 3.0.

The GL functions are defined on a Context object that is responsible for tracking a GL context. Typically a windowing system package (such as golang.org/x/exp/shiny/screen) will call NewContext and provide a gl.Context for a user application.

If the gl package is compiled on a platform capable of supporting ES 3.0, the gl.Context object also implements gl.Context3.

The bindings are deliberately minimal, staying as close the C API as possible. The semantics of each function maps onto functions described in the Khronos documentation:

https://www.khronos.org/opengles/sdk/docs/man/

One notable departure from the C API is the introduction of types to represent common uses of GLint: Texture, Surface, Buffer, etc.

Debug Logging

A tracing version of the OpenGL bindings is behind the `gldebug` build tag. It acts as a simplified version of apitrace. Build your Go binary with

-tags gldebug

and each call to a GL function will log its input, output, and any error messages. For example,

I/Fyne   (27668): gl.GenBuffers(1) [Buffer(70001)]
I/Fyne   (27668): gl.BindBuffer(ARRAY_BUFFER, Buffer(70001))
I/Fyne   (27668): gl.BufferData(ARRAY_BUFFER, 36, len(36), STATIC_DRAW)
I/Fyne   (27668): gl.BindBuffer(ARRAY_BUFFER, Buffer(70001))
I/Fyne   (27668): gl.VertexAttribPointer(Attrib(0), 6, FLOAT, false, 0, 0)  error: [INVALID_VALUE]

The gldebug tracing has very high overhead, so make sure to remove the build tag before deploying any binaries.

Index

Constants

View Source
const (
	False            = 0
	True             = 1
	Triangles        = 0x0004
	TriangleStrip    = 0x0005
	SrcAlpha         = 0x0302
	OneMinusSrcAlpha = 0x0303
	DepthTest        = 0x0B71
	Blend            = 0x0BE2
	ScissorTest      = 0x0C11
	Texture2D        = 0x0DE1

	UnsignedByte = 0x1401
	Float        = 0x1406
	RGBA         = 0x1908

	Nearest          = 0x2600
	Linear           = 0x2601
	TextureMagFilter = 0x2800
	TextureMinFilter = 0x2801
	TextureWrapS     = 0x2802
	TextureWrapT     = 0x2803

	ConstantAlpha            = 0x8003
	OneMinusConstantAlpha    = 0x8004
	ClampToEdge              = 0x812F
	Texture0                 = 0x84C0
	DynamicDraw              = 0x88E8
	FragmentShader           = 0x8B30
	VertexShader             = 0x8B31
	AttachedShaders          = 0x8B85
	ActiveUniformMaxLength   = 0x8B87
	ActiveAttributeMaxLength = 0x8B8A
	ArrayBuffer              = 0x8892
	CompileStatus            = 0x8B81
	InfoLogLength            = 0x8B84
	ShaderSourceLength       = 0x8B88

	DepthBufferBit = 0x00000100
	ColorBufferBit = 0x00004000
)

Contains Khronos OpenGL API specification constants.

Variables

This section is empty.

Functions

func NewContext

func NewContext() (Context, Worker)

NewContext creates a cgo OpenGL context.

See the Worker interface for more details on how it is used.

func Version

func Version() string

Version returns a GL ES version string, either "GL_ES_2_0" or "GL_ES_3_0". Future versions of the gl package may return "GL_ES_3_1".

Types

type Attrib

type Attrib struct {
	Value uint
}

Attrib identifies the location of a specific attribute variable.

func (Attrib) String

func (v Attrib) String() string

type Buffer

type Buffer struct {
	Value uint32
}

Buffer identifies a GL buffer object.

func (Buffer) String

func (v Buffer) String() string

type Context

type Context interface {
	// ActiveTexture sets the active texture unit.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glActiveTexture.xhtml
	ActiveTexture(texture Enum)

	// AttachShader attaches a shader to a program.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glAttachShader.xhtml
	AttachShader(p Program, s Shader)

	// BindAttribLocation binds a vertex attribute index with a named
	// variable.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glBindAttribLocation.xhtml
	BindAttribLocation(p Program, a Attrib, name string)

	// BindBuffer binds a buffer.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glBindBuffer.xhtml
	BindBuffer(target Enum, b Buffer)

	// BindFramebuffer binds a framebuffer.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glBindFramebuffer.xhtml
	BindFramebuffer(target Enum, fb Framebuffer)

	// BindRenderbuffer binds a render buffer.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glBindRenderbuffer.xhtml
	BindRenderbuffer(target Enum, rb Renderbuffer)

	// BindTexture binds a texture.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glBindTexture.xhtml
	BindTexture(target Enum, t Texture)

	// BindVertexArray binds a vertex array.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glBindVertexArray.xhtml
	BindVertexArray(rb VertexArray)

	// BlendColor sets the blend color.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glBlendColor.xhtml
	BlendColor(red, green, blue, alpha float32)

	// BlendEquation sets both RGB and alpha blend equations.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glBlendEquation.xhtml
	BlendEquation(mode Enum)

	// BlendEquationSeparate sets RGB and alpha blend equations separately.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glBlendEquationSeparate.xhtml
	BlendEquationSeparate(modeRGB, modeAlpha Enum)

	// BlendFunc sets the pixel blending factors.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glBlendFunc.xhtml
	BlendFunc(sfactor, dfactor Enum)

	// BlendFunc sets the pixel RGB and alpha blending factors separately.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glBlendFuncSeparate.xhtml
	BlendFuncSeparate(sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha Enum)

	// BufferData creates a new data store for the bound buffer object.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glBufferData.xhtml
	BufferData(target Enum, src []byte, usage Enum)

	// BufferInit creates a new uninitialized data store for the bound buffer object.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glBufferData.xhtml
	BufferInit(target Enum, size int, usage Enum)

	// BufferSubData sets some of data in the bound buffer object.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glBufferSubData.xhtml
	BufferSubData(target Enum, offset int, data []byte)

	// CheckFramebufferStatus reports the completeness status of the
	// active framebuffer.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glCheckFramebufferStatus.xhtml
	CheckFramebufferStatus(target Enum) Enum

	// Clear clears the window.
	//
	// The behavior of Clear is influenced by the pixel ownership test,
	// the scissor test, dithering, and the buffer writemasks.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glClear.xhtml
	Clear(mask Enum)

	// ClearColor specifies the RGBA values used to clear color buffers.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glClearColor.xhtml
	ClearColor(red, green, blue, alpha float32)

	// ClearDepthf sets the depth value used to clear the depth buffer.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glClearDepthf.xhtml
	ClearDepthf(d float32)

	// ClearStencil sets the index used to clear the stencil buffer.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glClearStencil.xhtml
	ClearStencil(s int)

	// ColorMask specifies whether color components in the framebuffer
	// can be written.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glColorMask.xhtml
	ColorMask(red, green, blue, alpha bool)

	// CompileShader compiles the source code of s.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glCompileShader.xhtml
	CompileShader(s Shader)

	// CompressedTexImage2D writes a compressed 2D texture.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glCompressedTexImage2D.xhtml
	CompressedTexImage2D(target Enum, level int, internalformat Enum, width, height, border int, data []byte)

	// CompressedTexSubImage2D writes a subregion of a compressed 2D texture.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glCompressedTexSubImage2D.xhtml
	CompressedTexSubImage2D(target Enum, level, xoffset, yoffset, width, height int, format Enum, data []byte)

	// CopyTexImage2D writes a 2D texture from the current framebuffer.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glCopyTexImage2D.xhtml
	CopyTexImage2D(target Enum, level int, internalformat Enum, x, y, width, height, border int)

	// CopyTexSubImage2D writes a 2D texture subregion from the
	// current framebuffer.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glCopyTexSubImage2D.xhtml
	CopyTexSubImage2D(target Enum, level, xoffset, yoffset, x, y, width, height int)

	// CreateBuffer creates a buffer object.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glGenBuffers.xhtml
	CreateBuffer() Buffer

	// CreateFramebuffer creates a framebuffer object.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glGenFramebuffers.xhtml
	CreateFramebuffer() Framebuffer

	// CreateProgram creates a new empty program object.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glCreateProgram.xhtml
	CreateProgram() Program

	// CreateRenderbuffer create a renderbuffer object.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glGenRenderbuffers.xhtml
	CreateRenderbuffer() Renderbuffer

	// CreateShader creates a new empty shader object.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glCreateShader.xhtml
	CreateShader(ty Enum) Shader

	// CreateTexture creates a texture object.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glGenTextures.xhtml
	CreateTexture() Texture

	// CreateTVertexArray creates a vertex array.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glGenVertexArrays.xhtml
	CreateVertexArray() VertexArray

	// CullFace specifies which polygons are candidates for culling.
	//
	// Valid modes: FRONT, BACK, FRONT_AND_BACK.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glCullFace.xhtml
	CullFace(mode Enum)

	// DeleteBuffer deletes the given buffer object.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glDeleteBuffers.xhtml
	DeleteBuffer(v Buffer)

	// DeleteFramebuffer deletes the given framebuffer object.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glDeleteFramebuffers.xhtml
	DeleteFramebuffer(v Framebuffer)

	// DeleteProgram deletes the given program object.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glDeleteProgram.xhtml
	DeleteProgram(p Program)

	// DeleteRenderbuffer deletes the given render buffer object.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glDeleteRenderbuffers.xhtml
	DeleteRenderbuffer(v Renderbuffer)

	// DeleteShader deletes shader s.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glDeleteShader.xhtml
	DeleteShader(s Shader)

	// DeleteTexture deletes the given texture object.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glDeleteTextures.xhtml
	DeleteTexture(v Texture)

	// DeleteVertexArray deletes the given render buffer object.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glDeleteVertexArrays.xhtml
	DeleteVertexArray(v VertexArray)

	// DepthFunc sets the function used for depth buffer comparisons.
	//
	// Valid fn values:
	//	NEVER
	//	LESS
	//	EQUAL
	//	LEQUAL
	//	GREATER
	//	NOTEQUAL
	//	GEQUAL
	//	ALWAYS
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glDepthFunc.xhtml
	DepthFunc(fn Enum)

	// DepthMask sets the depth buffer enabled for writing.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glDepthMask.xhtml
	DepthMask(flag bool)

	// DepthRangef sets the mapping from normalized device coordinates to
	// window coordinates.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glDepthRangef.xhtml
	DepthRangef(n, f float32)

	// DetachShader detaches the shader s from the program p.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glDetachShader.xhtml
	DetachShader(p Program, s Shader)

	// Disable disables various GL capabilities.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glDisable.xhtml
	Disable(cap Enum)

	// DisableVertexAttribArray disables a vertex attribute array.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glDisableVertexAttribArray.xhtml
	DisableVertexAttribArray(a Attrib)

	// DrawArrays renders geometric primitives from the bound data.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glDrawArrays.xhtml
	DrawArrays(mode Enum, first, count int)

	// DrawElements renders primitives from a bound buffer.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glDrawElements.xhtml
	DrawElements(mode Enum, count int, ty Enum, offset int)

	// Enable enables various GL capabilities.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glEnable.xhtml
	Enable(cap Enum)

	// EnableVertexAttribArray enables a vertex attribute array.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glEnableVertexAttribArray.xhtml
	EnableVertexAttribArray(a Attrib)

	// Finish blocks until the effects of all previously called GL
	// commands are complete.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glFinish.xhtml
	Finish()

	// Flush empties all buffers. It does not block.
	//
	// An OpenGL implementation may buffer network communication,
	// the command stream, or data inside the graphics accelerator.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glFlush.xhtml
	Flush()

	// FramebufferRenderbuffer attaches rb to the current frame buffer.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glFramebufferRenderbuffer.xhtml
	FramebufferRenderbuffer(target, attachment, rbTarget Enum, rb Renderbuffer)

	// FramebufferTexture2D attaches the t to the current frame buffer.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glFramebufferTexture2D.xhtml
	FramebufferTexture2D(target, attachment, texTarget Enum, t Texture, level int)

	// FrontFace defines which polygons are front-facing.
	//
	// Valid modes: CW, CCW.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glFrontFace.xhtml
	FrontFace(mode Enum)

	// GenerateMipmap generates mipmaps for the current texture.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glGenerateMipmap.xhtml
	GenerateMipmap(target Enum)

	// GetActiveAttrib returns details about an active attribute variable.
	// A value of 0 for index selects the first active attribute variable.
	// Permissible values for index range from 0 to the number of active
	// attribute variables minus 1.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glGetActiveAttrib.xhtml
	GetActiveAttrib(p Program, index uint32) (name string, size int, ty Enum)

	// GetActiveUniform returns details about an active uniform variable.
	// A value of 0 for index selects the first active uniform variable.
	// Permissible values for index range from 0 to the number of active
	// uniform variables minus 1.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glGetActiveUniform.xhtml
	GetActiveUniform(p Program, index uint32) (name string, size int, ty Enum)

	// GetAttachedShaders returns the shader objects attached to program p.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glGetAttachedShaders.xhtml
	GetAttachedShaders(p Program) []Shader

	// GetAttribLocation returns the location of an attribute variable.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glGetAttribLocation.xhtml
	GetAttribLocation(p Program, name string) Attrib

	// GetBooleanv returns the boolean values of parameter pname.
	//
	// Many boolean parameters can be queried more easily using IsEnabled.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glGet.xhtml
	GetBooleanv(dst []bool, pname Enum)

	// GetFloatv returns the float values of parameter pname.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glGet.xhtml
	GetFloatv(dst []float32, pname Enum)

	// 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
	GetIntegerv(dst []int32, pname Enum)

	// GetInteger returns the int value of parameter pname.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glGet.xhtml
	GetInteger(pname Enum) int

	// GetBufferParameteri returns a parameter for the active buffer.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glGetBufferParameter.xhtml
	GetBufferParameteri(target, value Enum) int

	// GetError returns the next error.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glGetError.xhtml
	GetError() Enum

	// GetFramebufferAttachmentParameteri returns attachment parameters
	// for the active framebuffer object.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glGetFramebufferAttachmentParameteriv.xhtml
	GetFramebufferAttachmentParameteri(target, attachment, pname Enum) int

	// GetProgrami returns a parameter value for a program.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glGetProgramiv.xhtml
	GetProgrami(p Program, pname Enum) int

	// GetProgramInfoLog returns the information log for a program.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glGetProgramInfoLog.xhtml
	GetProgramInfoLog(p Program) string

	// GetRenderbufferParameteri returns a parameter value for a render buffer.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glGetRenderbufferParameteriv.xhtml
	GetRenderbufferParameteri(target, pname Enum) int

	// GetShaderi returns a parameter value for a shader.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glGetShaderiv.xhtml
	GetShaderi(s Shader, pname Enum) int

	// GetShaderInfoLog returns the information log for a shader.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glGetShaderInfoLog.xhtml
	GetShaderInfoLog(s Shader) string

	// GetShaderPrecisionFormat returns range and precision limits for
	// shader types.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glGetShaderPrecisionFormat.xhtml
	GetShaderPrecisionFormat(shadertype, precisiontype Enum) (rangeLow, rangeHigh, precision int)

	// GetShaderSource returns source code of shader s.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glGetShaderSource.xhtml
	GetShaderSource(s Shader) string

	// GetTexParameterfv returns the float values of a texture parameter.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glGetTexParameter.xhtml
	GetTexParameterfv(dst []float32, target, pname Enum)

	// GetTexParameteriv returns the int values of a texture parameter.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glGetTexParameter.xhtml
	GetTexParameteriv(dst []int32, target, pname Enum)

	// GetUniformfv returns the float values of a uniform variable.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glGetUniform.xhtml
	GetUniformfv(dst []float32, src Uniform, p Program)

	// GetUniformiv returns the float values of a uniform variable.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glGetUniform.xhtml
	GetUniformiv(dst []int32, src Uniform, p Program)

	// GetUniformLocation returns the location of a uniform variable.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glGetUniformLocation.xhtml
	GetUniformLocation(p Program, name string) Uniform

	// GetVertexAttribf reads the float value of a vertex attribute.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glGetVertexAttrib.xhtml
	GetVertexAttribf(src Attrib, pname Enum) float32

	// GetVertexAttribfv reads float values of a vertex attribute.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glGetVertexAttrib.xhtml
	GetVertexAttribfv(dst []float32, src Attrib, pname Enum)

	// GetVertexAttribi reads the int value of a vertex attribute.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glGetVertexAttrib.xhtml
	GetVertexAttribi(src Attrib, pname Enum) int32

	// GetVertexAttribiv reads int values of a vertex attribute.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glGetVertexAttrib.xhtml
	GetVertexAttribiv(dst []int32, src Attrib, pname Enum)

	// Hint sets implementation-specific modes.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glHint.xhtml
	Hint(target, mode Enum)

	// IsBuffer reports if b is a valid buffer.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glIsBuffer.xhtml
	IsBuffer(b Buffer) bool

	// IsEnabled reports if cap is an enabled capability.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glIsEnabled.xhtml
	IsEnabled(cap Enum) bool

	// IsFramebuffer reports if fb is a valid frame buffer.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glIsFramebuffer.xhtml
	IsFramebuffer(fb Framebuffer) bool

	// IsProgram reports if p is a valid program object.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glIsProgram.xhtml
	IsProgram(p Program) bool

	// IsRenderbuffer reports if rb is a valid render buffer.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glIsRenderbuffer.xhtml
	IsRenderbuffer(rb Renderbuffer) bool

	// IsShader reports if s is valid shader.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glIsShader.xhtml
	IsShader(s Shader) bool

	// IsTexture reports if t is a valid texture.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glIsTexture.xhtml
	IsTexture(t Texture) bool

	// LineWidth specifies the width of lines.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glLineWidth.xhtml
	LineWidth(width float32)

	// LinkProgram links the specified program.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glLinkProgram.xhtml
	LinkProgram(p Program)

	// PixelStorei sets pixel storage parameters.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glPixelStorei.xhtml
	PixelStorei(pname Enum, param int32)

	// PolygonOffset sets the scaling factors for depth offsets.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glPolygonOffset.xhtml
	PolygonOffset(factor, units float32)

	// ReadPixels returns pixel data from a buffer.
	//
	// In GLES 3, the source buffer is controlled with ReadBuffer.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glReadPixels.xhtml
	ReadPixels(dst []byte, x, y, width, height int, format, ty Enum)

	// ReleaseShaderCompiler frees resources allocated by the shader compiler.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glReleaseShaderCompiler.xhtml
	ReleaseShaderCompiler()

	// RenderbufferStorage establishes the data storage, format, and
	// dimensions of a renderbuffer object's image.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glRenderbufferStorage.xhtml
	RenderbufferStorage(target, internalFormat Enum, width, height int)

	// SampleCoverage sets multisample coverage parameters.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glSampleCoverage.xhtml
	SampleCoverage(value float32, invert bool)

	// Scissor defines the scissor box rectangle, in window coordinates.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glScissor.xhtml
	Scissor(x, y, width, height int32)

	// ShaderSource sets the source code of s to the given source code.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glShaderSource.xhtml
	ShaderSource(s Shader, src string)

	// StencilFunc sets the front and back stencil test reference value.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glStencilFunc.xhtml
	StencilFunc(fn Enum, ref int, mask uint32)

	// StencilFunc sets the front or back stencil test reference value.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glStencilFuncSeparate.xhtml
	StencilFuncSeparate(face, fn Enum, ref int, mask uint32)

	// StencilMask controls the writing of bits in the stencil planes.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glStencilMask.xhtml
	StencilMask(mask uint32)

	// StencilMaskSeparate controls the writing of bits in the stencil planes.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glStencilMaskSeparate.xhtml
	StencilMaskSeparate(face Enum, mask uint32)

	// StencilOp sets front and back stencil test actions.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glStencilOp.xhtml
	StencilOp(fail, zfail, zpass Enum)

	// StencilOpSeparate sets front or back stencil tests.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glStencilOpSeparate.xhtml
	StencilOpSeparate(face, sfail, dpfail, dppass Enum)

	// TexImage2D writes a 2D texture image.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glTexImage2D.xhtml
	TexImage2D(target Enum, level int, internalFormat int, width, height int, format Enum, ty Enum, data []byte)

	// TexSubImage2D writes a subregion of a 2D texture image.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glTexSubImage2D.xhtml
	TexSubImage2D(target Enum, level int, x, y, width, height int, format, ty Enum, data []byte)

	// TexParameterf sets a float texture parameter.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glTexParameter.xhtml
	TexParameterf(target, pname Enum, param float32)

	// TexParameterfv sets a float texture parameter array.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glTexParameter.xhtml
	TexParameterfv(target, pname Enum, params []float32)

	// TexParameteri sets an integer texture parameter.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glTexParameter.xhtml
	TexParameteri(target, pname Enum, param int)

	// TexParameteriv sets an integer texture parameter array.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glTexParameter.xhtml
	TexParameteriv(target, pname Enum, params []int32)

	// Uniform1f writes a float uniform variable.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glUniform.xhtml
	Uniform1f(dst Uniform, v float32)

	// Uniform1fv writes a [len(src)]float uniform array.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glUniform.xhtml
	Uniform1fv(dst Uniform, src []float32)

	// Uniform1i writes an int uniform variable.
	//
	// Uniform1i and Uniform1iv are the only two functions that may be used
	// to load uniform variables defined as sampler types. Loading samplers
	// with any other function will result in a INVALID_OPERATION error.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glUniform.xhtml
	Uniform1i(dst Uniform, v int)

	// Uniform1iv writes a int uniform array of len(src) elements.
	//
	// Uniform1i and Uniform1iv are the only two functions that may be used
	// to load uniform variables defined as sampler types. Loading samplers
	// with any other function will result in a INVALID_OPERATION error.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glUniform.xhtml
	Uniform1iv(dst Uniform, src []int32)

	// Uniform2f writes a vec2 uniform variable.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glUniform.xhtml
	Uniform2f(dst Uniform, v0, v1 float32)

	// Uniform2fv writes a vec2 uniform array of len(src)/2 elements.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glUniform.xhtml
	Uniform2fv(dst Uniform, src []float32)

	// Uniform2i writes an ivec2 uniform variable.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glUniform.xhtml
	Uniform2i(dst Uniform, v0, v1 int)

	// Uniform2iv writes an ivec2 uniform array of len(src)/2 elements.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glUniform.xhtml
	Uniform2iv(dst Uniform, src []int32)

	// Uniform3f writes a vec3 uniform variable.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glUniform.xhtml
	Uniform3f(dst Uniform, v0, v1, v2 float32)

	// Uniform3fv writes a vec3 uniform array of len(src)/3 elements.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glUniform.xhtml
	Uniform3fv(dst Uniform, src []float32)

	// Uniform3i writes an ivec3 uniform variable.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glUniform.xhtml
	Uniform3i(dst Uniform, v0, v1, v2 int32)

	// Uniform3iv writes an ivec3 uniform array of len(src)/3 elements.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glUniform.xhtml
	Uniform3iv(dst Uniform, src []int32)

	// Uniform4f writes a vec4 uniform variable.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glUniform.xhtml
	Uniform4f(dst Uniform, v0, v1, v2, v3 float32)

	// Uniform4fv writes a vec4 uniform array of len(src)/4 elements.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glUniform.xhtml
	Uniform4fv(dst Uniform, src []float32)

	// Uniform4i writes an ivec4 uniform variable.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glUniform.xhtml
	Uniform4i(dst Uniform, v0, v1, v2, v3 int32)

	// Uniform4i writes an ivec4 uniform array of len(src)/4 elements.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glUniform.xhtml
	Uniform4iv(dst Uniform, src []int32)

	// UniformMatrix2fv writes 2x2 matrices. Each matrix uses four
	// float32 values, so the number of matrices written is len(src)/4.
	//
	// Each matrix must be supplied in column major order.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glUniform.xhtml
	UniformMatrix2fv(dst Uniform, src []float32)

	// UniformMatrix3fv writes 3x3 matrices. Each matrix uses nine
	// float32 values, so the number of matrices written is len(src)/9.
	//
	// Each matrix must be supplied in column major order.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glUniform.xhtml
	UniformMatrix3fv(dst Uniform, src []float32)

	// UniformMatrix4fv writes 4x4 matrices. Each matrix uses 16
	// float32 values, so the number of matrices written is len(src)/16.
	//
	// Each matrix must be supplied in column major order.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glUniform.xhtml
	UniformMatrix4fv(dst Uniform, src []float32)

	// UseProgram sets the active program.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glUseProgram.xhtml
	UseProgram(p Program)

	// ValidateProgram checks to see whether the executables contained in
	// program can execute given the current OpenGL state.
	//
	// Typically only used for debugging.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glValidateProgram.xhtml
	ValidateProgram(p Program)

	// VertexAttrib1f writes a float vertex attribute.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glVertexAttrib.xhtml
	VertexAttrib1f(dst Attrib, x float32)

	// VertexAttrib1fv writes a float vertex attribute.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glVertexAttrib.xhtml
	VertexAttrib1fv(dst Attrib, src []float32)

	// VertexAttrib2f writes a vec2 vertex attribute.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glVertexAttrib.xhtml
	VertexAttrib2f(dst Attrib, x, y float32)

	// VertexAttrib2fv writes a vec2 vertex attribute.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glVertexAttrib.xhtml
	VertexAttrib2fv(dst Attrib, src []float32)

	// VertexAttrib3f writes a vec3 vertex attribute.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glVertexAttrib.xhtml
	VertexAttrib3f(dst Attrib, x, y, z float32)

	// VertexAttrib3fv writes a vec3 vertex attribute.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glVertexAttrib.xhtml
	VertexAttrib3fv(dst Attrib, src []float32)

	// VertexAttrib4f writes a vec4 vertex attribute.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glVertexAttrib.xhtml
	VertexAttrib4f(dst Attrib, x, y, z, w float32)

	// VertexAttrib4fv writes a vec4 vertex attribute.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glVertexAttrib.xhtml
	VertexAttrib4fv(dst Attrib, src []float32)

	// VertexAttribPointer uses a bound buffer to define vertex attribute data.
	//
	// Direct use of VertexAttribPointer to load data into OpenGL is not
	// supported via the Go bindings. Instead, use BindBuffer with an
	// ARRAY_BUFFER and then fill it using BufferData.
	//
	// The size argument specifies the number of components per attribute,
	// between 1-4. The stride argument specifies the byte offset between
	// consecutive vertex attributes.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glVertexAttribPointer.xhtml
	VertexAttribPointer(dst Attrib, size int, ty Enum, normalized bool, stride, offset int)

	// Viewport sets the viewport, an affine transformation that
	// normalizes device coordinates to window coordinates.
	//
	// http://www.khronos.org/opengles/sdk/docs/man3/html/glViewport.xhtml
	Viewport(x, y, width, height int)
}

Context is an OpenGL ES context.

A Context has a method for every GL function supported by ES 2 or later. In a program compiled with ES 3 support, a Context is also a Context3. For example, a program can:

func f(glctx gl.Context) {
	glctx.(gl.Context3).BlitFramebuffer(...)
}

Calls are not safe for concurrent use. However calls can be made from any goroutine, the gl package removes the notion of thread-local context.

Contexts are independent. Two contexts can be used concurrently.

type Context3

type Context3 interface {
	Context

	// BlitFramebuffer copies a block of pixels between framebuffers.
	//
	// https://www.khronos.org/opengles/sdk/docs/man3/html/glBlitFramebuffer.xhtml
	BlitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1 int, mask uint, filter Enum)
}

Context3 is an OpenGL ES 3 context.

When the gl package is compiled with GL ES 3 support, the produced Context object also implements the Context3 interface.

type Enum

type Enum uint32

Enum is equivalent to GLenum, and is normally used with one of the constants defined in this package.

type Framebuffer

type Framebuffer struct {
	Value uint32
}

Framebuffer identifies a GL framebuffer.

func (Framebuffer) String

func (v Framebuffer) String() string

type Program

type Program struct {
	// Init is set by CreateProgram, as some GL drivers (in particular,
	// ANGLE) return true for glIsProgram(0).
	Init  bool
	Value uint32
}

Program identifies a compiled shader program.

func (Program) String

func (v Program) String() string

type Renderbuffer

type Renderbuffer struct {
	Value uint32
}

A Renderbuffer is a GL object that holds an image in an internal format.

func (Renderbuffer) String

func (v Renderbuffer) String() string

type Shader

type Shader struct {
	Value uint32
}

Shader identifies a GLSL shader.

func (Shader) String

func (v Shader) String() string

type Texture

type Texture struct {
	Value uint32
}

A Texture identifies a GL texture unit.

func (Texture) String

func (v Texture) String() string

type Uniform

type Uniform struct {
	Value int32
}

Uniform identifies the location of a specific uniform variable.

func (Uniform) String

func (v Uniform) String() string

type VertexArray

type VertexArray struct {
	Value uint32
}

A VertexArray is a GL object that holds vertices in an internal format.

func (VertexArray) String

func (v VertexArray) String() string

type Worker

type Worker interface {
	// WorkAvailable returns a channel that communicates when DoWork should be
	// called.
	WorkAvailable() <-chan struct{}

	// DoWork performs any pending OpenGL calls.
	DoWork()
}

Worker is used by display driver code to execute OpenGL calls.

Typically display driver code creates a gl.Context for an application, and along with it establishes a locked OS thread to execute the cgo calls:

go func() {
	runtime.LockOSThread()
	// ... platform-specific cgo call to bind a C OpenGL context
	// into thread-local storage.

	glctx, worker := gl.NewContext()
	workAvailable := worker.WorkAvailable()
	go userAppCode(glctx)
	for {
		select {
		case <-workAvailable:
			worker.DoWork()
		case <-drawEvent:
			// ... platform-specific cgo call to draw screen
		}
	}
}()

This interface is an internal implementation detail and should only be used by the package responsible for managing the screen, such as golang.org/x/mobile/app.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL