| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242 |
- //go:build js || wasm || test_web_driver
- // +build js wasm test_web_driver
- package gl
- import (
- "encoding/binary"
- "github.com/fyne-io/gl-js"
- "golang.org/x/mobile/exp/f32"
- )
- const (
- arrayBuffer = gl.ARRAY_BUFFER
- bitColorBuffer = gl.COLOR_BUFFER_BIT
- bitDepthBuffer = gl.DEPTH_BUFFER_BIT
- clampToEdge = gl.CLAMP_TO_EDGE
- colorFormatRGBA = gl.RGBA
- colorFormatR = gl.LUMINANCE
- compileStatus = gl.COMPILE_STATUS
- constantAlpha = gl.CONSTANT_ALPHA
- float = gl.FLOAT
- fragmentShader = gl.FRAGMENT_SHADER
- front = gl.FRONT
- glFalse = gl.FALSE
- linkStatus = gl.LINK_STATUS
- one = gl.ONE
- oneMinusConstantAlpha = gl.ONE_MINUS_CONSTANT_ALPHA
- oneMinusSrcAlpha = gl.ONE_MINUS_SRC_ALPHA
- scissorTest = gl.SCISSOR_TEST
- srcAlpha = gl.SRC_ALPHA
- staticDraw = gl.STATIC_DRAW
- texture0 = gl.TEXTURE0
- texture2D = gl.TEXTURE_2D
- textureMinFilter = gl.TEXTURE_MIN_FILTER
- textureMagFilter = gl.TEXTURE_MAG_FILTER
- textureWrapS = gl.TEXTURE_WRAP_S
- textureWrapT = gl.TEXTURE_WRAP_T
- triangles = gl.TRIANGLES
- triangleStrip = gl.TRIANGLE_STRIP
- unpackAlignment = gl.UNPACK_ALIGNMENT
- unsignedByte = gl.UNSIGNED_BYTE
- vertexShader = gl.VERTEX_SHADER
- )
- type (
- // Attribute represents a GL attribute
- Attribute gl.Attrib
- // Buffer represents a GL buffer
- Buffer gl.Buffer
- // Program represents a compiled GL program
- Program gl.Program
- // Shader represents a GL shader
- Shader gl.Shader
- // Uniform represents a GL uniform
- Uniform gl.Uniform
- )
- var noBuffer = Buffer(gl.NoBuffer)
- var noShader = Shader(gl.NoShader)
- var textureFilterToGL = []int32{gl.LINEAR, gl.NEAREST}
- func (p *painter) Init() {
- p.ctx = &xjsContext{}
- gl.Disable(gl.DEPTH_TEST)
- gl.Enable(gl.BLEND)
- p.logError()
- p.program = p.createProgram("simple_es")
- p.singleChannelProgram = p.createProgram("single_channel_es")
- p.lineProgram = p.createProgram("line_es")
- }
- type xjsContext struct{}
- var _ context = (*xjsContext)(nil)
- func (c *xjsContext) ActiveTexture(textureUnit uint32) {
- gl.ActiveTexture(gl.Enum(textureUnit))
- }
- func (c *xjsContext) AttachShader(program Program, shader Shader) {
- gl.AttachShader(gl.Program(program), gl.Shader(shader))
- }
- func (c *xjsContext) BindBuffer(target uint32, buf Buffer) {
- gl.BindBuffer(gl.Enum(target), gl.Buffer(buf))
- }
- func (c *xjsContext) BindTexture(target uint32, texture Texture) {
- gl.BindTexture(gl.Enum(target), gl.Texture(texture))
- }
- func (c *xjsContext) BlendColor(r, g, b, a float32) {
- gl.BlendColor(r, g, b, a)
- }
- func (c *xjsContext) BlendFunc(srcFactor, destFactor uint32) {
- gl.BlendFunc(gl.Enum(srcFactor), gl.Enum(destFactor))
- }
- func (c *xjsContext) BufferData(target uint32, points []float32, usage uint32) {
- gl.BufferData(gl.Enum(target), f32.Bytes(binary.LittleEndian, points...), gl.Enum(usage))
- }
- func (c *xjsContext) Clear(mask uint32) {
- gl.Clear(gl.Enum(mask))
- }
- func (c *xjsContext) ClearColor(r, g, b, a float32) {
- gl.ClearColor(r, g, b, a)
- }
- func (c *xjsContext) CompileShader(shader Shader) {
- gl.CompileShader(gl.Shader(shader))
- }
- func (c *xjsContext) CreateBuffer() Buffer {
- return Buffer(gl.CreateBuffer())
- }
- func (c *xjsContext) CreateProgram() Program {
- return Program(gl.CreateProgram())
- }
- func (c *xjsContext) CreateShader(typ uint32) Shader {
- return Shader(gl.CreateShader(gl.Enum(typ)))
- }
- func (c *xjsContext) CreateTexture() (texture Texture) {
- return Texture(gl.CreateTexture())
- }
- func (c *xjsContext) DeleteBuffer(buffer Buffer) {
- gl.DeleteBuffer(gl.Buffer(buffer))
- }
- func (c *xjsContext) DeleteTexture(texture Texture) {
- gl.DeleteTexture(gl.Texture(texture))
- }
- func (c *xjsContext) Disable(capability uint32) {
- gl.Disable(gl.Enum(capability))
- }
- func (c *xjsContext) DrawArrays(mode uint32, first, count int) {
- gl.DrawArrays(gl.Enum(mode), first, count)
- }
- func (c *xjsContext) Enable(capability uint32) {
- gl.Enable(gl.Enum(capability))
- }
- func (c *xjsContext) EnableVertexAttribArray(attribute Attribute) {
- gl.EnableVertexAttribArray(gl.Attrib(attribute))
- }
- func (c *xjsContext) GetAttribLocation(program Program, name string) Attribute {
- return Attribute(gl.GetAttribLocation(gl.Program(program), name))
- }
- func (c *xjsContext) GetError() uint32 {
- return uint32(gl.GetError())
- }
- func (c *xjsContext) GetProgrami(program Program, param uint32) int {
- return gl.GetProgrami(gl.Program(program), gl.Enum(param))
- }
- func (c *xjsContext) GetProgramInfoLog(program Program) string {
- return gl.GetProgramInfoLog(gl.Program(program))
- }
- func (c *xjsContext) GetShaderi(shader Shader, param uint32) int {
- return gl.GetShaderi(gl.Shader(shader), gl.Enum(param))
- }
- func (c *xjsContext) GetShaderInfoLog(shader Shader) string {
- return gl.GetShaderInfoLog(gl.Shader(shader))
- }
- func (c *xjsContext) GetUniformLocation(program Program, name string) Uniform {
- return Uniform(gl.GetUniformLocation(gl.Program(program), name))
- }
- func (c *xjsContext) LinkProgram(program Program) {
- gl.LinkProgram(gl.Program(program))
- }
- func (c *xjsContext) PixelStorei(pname uint32, param int32) {
- gl.PixelStorei(gl.Enum(pname), param)
- }
- func (c *xjsContext) ReadBuffer(_ uint32) {
- }
- func (c *xjsContext) ReadPixels(x, y, width, height int, colorFormat, typ uint32, pixels []uint8) {
- gl.ReadPixels(pixels, x, y, width, height, gl.Enum(colorFormat), gl.Enum(typ))
- }
- func (c *xjsContext) ShaderSource(shader Shader, source string) {
- gl.ShaderSource(gl.Shader(shader), source)
- }
- func (c *xjsContext) Scissor(x, y, w, h int32) {
- gl.Scissor(x, y, w, h)
- }
- func (c *xjsContext) TexImage2D(target uint32, level, width, height int, colorFormat, typ uint32, data []uint8) {
- gl.TexImage2D(
- gl.Enum(target),
- level,
- width,
- height,
- gl.Enum(colorFormat),
- gl.Enum(typ),
- data,
- )
- }
- func (c *xjsContext) TexParameteri(target, param uint32, value int32) {
- gl.TexParameteri(gl.Enum(target), gl.Enum(param), int(value))
- }
- func (c *xjsContext) Uniform1f(uniform Uniform, v float32) {
- gl.Uniform1f(gl.Uniform(uniform), v)
- }
- func (c *xjsContext) Uniform4f(uniform Uniform, v0, v1, v2, v3 float32) {
- gl.Uniform4f(gl.Uniform(uniform), v0, v1, v2, v3)
- }
- func (c *xjsContext) UseProgram(program Program) {
- gl.UseProgram(gl.Program(program))
- }
- func (c *xjsContext) VertexAttribPointerWithOffset(attribute Attribute, size int, typ uint32, normalized bool, stride, offset int) {
- gl.VertexAttribPointer(gl.Attrib(attribute), size, gl.Enum(typ), normalized, stride, offset)
- }
- func (c *xjsContext) Viewport(x, y, width, height int) {
- gl.Viewport(x, y, width, height)
- }
|