From 9df4770d20a7508c211aeb821a1d8ddb2e249238 Mon Sep 17 00:00:00 2001 From: Hajime Hoshi Date: Thu, 17 Nov 2022 00:55:16 +0900 Subject: [PATCH] internal/graphicsdriver/opengl/gl: make Context closer to gomobile's Context --- .../graphicsdriver/opengl/context_notjs.go | 28 +++--- .../opengl/gl/default_notpurego.go | 89 ++++++++--------- .../opengl/gl/default_purego.go | 87 ++++++++-------- internal/graphicsdriver/opengl/gl/gomobile.go | 98 ++++++------------- .../graphicsdriver/opengl/gl/interface.go | 24 ++--- 5 files changed, 135 insertions(+), 191 deletions(-) diff --git a/internal/graphicsdriver/opengl/context_notjs.go b/internal/graphicsdriver/opengl/context_notjs.go index 10e37ce70..e74367cce 100644 --- a/internal/graphicsdriver/opengl/context_notjs.go +++ b/internal/graphicsdriver/opengl/context_notjs.go @@ -132,7 +132,7 @@ func (c *context) scissor(x, y, width, height int) { } func (c *context) newTexture(width, height int) (textureNative, error) { - t := c.ctx.GenTextures(1)[0] + t := c.ctx.CreateTexture() if t <= 0 { return 0, errors.New("opengl: creating texture failed") } @@ -185,7 +185,7 @@ func (c *context) deleteTexture(t textureNative) { if c.lastTexture == t { c.lastTexture = invalidTexture } - c.ctx.DeleteTextures([]uint32{uint32(t)}) + c.ctx.DeleteTexture(uint32(t)) } func (c *context) isTexture(t textureNative) bool { @@ -193,7 +193,7 @@ func (c *context) isTexture(t textureNative) bool { } func (c *context) newRenderbuffer(width, height int) (renderbufferNative, error) { - r := c.ctx.GenRenderbuffers(1)[0] + r := c.ctx.CreateRenderbuffer() if r <= 0 { return 0, errors.New("opengl: creating renderbuffer failed") } @@ -219,11 +219,11 @@ func (c *context) deleteRenderbuffer(r renderbufferNative) { if c.lastRenderbuffer.equal(r) { c.lastRenderbuffer = 0 } - c.ctx.DeleteRenderbuffers([]uint32{uint32(r)}) + c.ctx.DeleteRenderbuffer(uint32(r)) } func (c *context) newFramebuffer(texture textureNative) (framebufferNative, error) { - f := c.ctx.GenFramebuffers(1)[0] + f := c.ctx.CreateFramebuffer() if f <= 0 { return 0, fmt.Errorf("opengl: creating framebuffer failed: the returned value is not positive but %d", f) } @@ -269,7 +269,7 @@ func (c *context) deleteFramebuffer(f framebufferNative) { c.lastViewportWidth = 0 c.lastViewportHeight = 0 } - c.ctx.DeleteFramebuffers([]uint32{uint32(f)}) + c.ctx.DeleteFramebuffer(uint32(f)) } func (c *context) newVertexShader(source string) (shader, error) { @@ -371,11 +371,11 @@ func (c *context) uniforms(p program, location string, v []uint32, typ shaderir. case shaderir.Vec4: c.ctx.Uniform4fv(int32(l), uint32sToFloat32s(v)) case shaderir.Mat2: - c.ctx.UniformMatrix2fv(int32(l), false, uint32sToFloat32s(v)) + c.ctx.UniformMatrix2fv(int32(l), uint32sToFloat32s(v)) case shaderir.Mat3: - c.ctx.UniformMatrix3fv(int32(l), false, uint32sToFloat32s(v)) + c.ctx.UniformMatrix3fv(int32(l), uint32sToFloat32s(v)) case shaderir.Mat4: - c.ctx.UniformMatrix4fv(int32(l), false, uint32sToFloat32s(v)) + c.ctx.UniformMatrix4fv(int32(l), uint32sToFloat32s(v)) default: panic(fmt.Sprintf("opengl: unexpected type: %s", typ.String())) } @@ -395,16 +395,16 @@ func (c *context) disableVertexAttribArray(index int) { } func (c *context) newArrayBuffer(size int) buffer { - b := c.ctx.GenBuffers(1)[0] + b := c.ctx.CreateBuffer() c.ctx.BindBuffer(gl.ARRAY_BUFFER, b) - c.ctx.BufferData(gl.ARRAY_BUFFER, size, nil, gl.DYNAMIC_DRAW) + c.ctx.BufferInit(gl.ARRAY_BUFFER, size, gl.DYNAMIC_DRAW) return buffer(b) } func (c *context) newElementArrayBuffer(size int) buffer { - b := c.ctx.GenBuffers(1)[0] + b := c.ctx.CreateBuffer() c.ctx.BindBuffer(gl.ELEMENT_ARRAY_BUFFER, b) - c.ctx.BufferData(gl.ELEMENT_ARRAY_BUFFER, size, nil, gl.DYNAMIC_DRAW) + c.ctx.BufferInit(gl.ELEMENT_ARRAY_BUFFER, size, gl.DYNAMIC_DRAW) return buffer(b) } @@ -427,7 +427,7 @@ func (c *context) elementArrayBufferSubData(data []uint16) { } func (c *context) deleteBuffer(b buffer) { - c.ctx.DeleteBuffers([]uint32{uint32(b)}) + c.ctx.DeleteBuffer(uint32(b)) } func (c *context) drawElements(len int, offsetInBytes int) { diff --git a/internal/graphicsdriver/opengl/gl/default_notpurego.go b/internal/graphicsdriver/opengl/gl/default_notpurego.go index cc63f4cc9..3883da5c8 100644 --- a/internal/graphicsdriver/opengl/gl/default_notpurego.go +++ b/internal/graphicsdriver/opengl/gl/default_notpurego.go @@ -454,13 +454,8 @@ func (c *defaultContext) BlendFuncSeparate(srcRGB uint32, dstRGB uint32, srcAlph C.glowBlendFuncSeparate(c.gpBlendFuncSeparate, (C.GLenum)(srcRGB), (C.GLenum)(dstRGB), (C.GLenum)(srcAlpha), (C.GLenum)(dstAlpha)) } -func (c *defaultContext) BufferData(target uint32, size int, data []byte, usage uint32) { - var ptr *byte - if len(data) > 0 { - ptr = &data[0] - } - C.glowBufferData(c.gpBufferData, (C.GLenum)(target), (C.GLsizeiptr)(size), unsafe.Pointer(ptr), (C.GLenum)(usage)) - runtime.KeepAlive(data) +func (c *defaultContext) BufferInit(target uint32, size int, usage uint32) { + C.glowBufferData(c.gpBufferData, (C.GLenum)(target), (C.GLsizeiptr)(size), nil, (C.GLenum)(usage)) } func (c *defaultContext) BufferSubData(target uint32, offset int, data []byte) { @@ -485,42 +480,62 @@ func (c *defaultContext) CompileShader(shader uint32) { C.glowCompileShader(c.gpCompileShader, (C.GLuint)(shader)) } +func (c *defaultContext) CreateBuffer() uint32 { + var buffer uint32 + C.glowGenBuffers(c.gpGenBuffers, 1, (*C.GLuint)(unsafe.Pointer(&buffer))) + return buffer +} + +func (c *defaultContext) CreateFramebuffer() uint32 { + var framebuffer uint32 + C.glowGenFramebuffersEXT(c.gpGenFramebuffersEXT, 1, (*C.GLuint)(unsafe.Pointer(&framebuffer))) + return framebuffer +} + func (c *defaultContext) CreateProgram() uint32 { ret := C.glowCreateProgram(c.gpCreateProgram) return uint32(ret) } +func (c *defaultContext) CreateRenderbuffer() uint32 { + var renderbuffer uint32 + C.glowGenRenderbuffersEXT(c.gpGenRenderbuffersEXT, 1, (*C.GLuint)(unsafe.Pointer(&renderbuffer))) + return renderbuffer +} + func (c *defaultContext) CreateShader(xtype uint32) uint32 { ret := C.glowCreateShader(c.gpCreateShader, (C.GLenum)(xtype)) return uint32(ret) } -func (c *defaultContext) DeleteBuffers(buffers []uint32) { - C.glowDeleteBuffers(c.gpDeleteBuffers, (C.GLsizei)(len(buffers)), (*C.GLuint)(unsafe.Pointer(&buffers[0]))) - runtime.KeepAlive(buffers) +func (c *defaultContext) CreateTexture() uint32 { + var texture uint32 + C.glowGenTextures(c.gpGenTextures, 1, (*C.GLuint)(unsafe.Pointer(&texture))) + return texture } -func (c *defaultContext) DeleteFramebuffers(framebuffers []uint32) { - C.glowDeleteFramebuffersEXT(c.gpDeleteFramebuffersEXT, (C.GLsizei)(len(framebuffers)), (*C.GLuint)(unsafe.Pointer(&framebuffers[0]))) - runtime.KeepAlive(framebuffers) +func (c *defaultContext) DeleteBuffer(buffer uint32) { + C.glowDeleteBuffers(c.gpDeleteBuffers, 1, (*C.GLuint)(unsafe.Pointer(&buffer))) +} + +func (c *defaultContext) DeleteFramebuffer(framebuffer uint32) { + C.glowDeleteFramebuffersEXT(c.gpDeleteFramebuffersEXT, 1, (*C.GLuint)(unsafe.Pointer(&framebuffer))) } func (c *defaultContext) DeleteProgram(program uint32) { C.glowDeleteProgram(c.gpDeleteProgram, (C.GLuint)(program)) } -func (c *defaultContext) DeleteRenderbuffers(renderbuffers []uint32) { - C.glowDeleteRenderbuffersEXT(c.gpDeleteRenderbuffersEXT, (C.GLsizei)(len(renderbuffers)), (*C.GLuint)(unsafe.Pointer(&renderbuffers[0]))) - runtime.KeepAlive(renderbuffers) +func (c *defaultContext) DeleteRenderbuffer(renderbuffer uint32) { + C.glowDeleteRenderbuffersEXT(c.gpDeleteRenderbuffersEXT, 1, (*C.GLuint)(unsafe.Pointer(&renderbuffer))) } func (c *defaultContext) DeleteShader(shader uint32) { C.glowDeleteShader(c.gpDeleteShader, (C.GLuint)(shader)) } -func (c *defaultContext) DeleteTextures(textures []uint32) { - C.glowDeleteTextures(c.gpDeleteTextures, (C.GLsizei)(len(textures)), (*C.GLuint)(unsafe.Pointer(&textures[0]))) - runtime.KeepAlive(textures) +func (c *defaultContext) DeleteTexture(texture uint32) { + C.glowDeleteTextures(c.gpDeleteTextures, 1, (*C.GLuint)(unsafe.Pointer(&texture))) } func (c *defaultContext) Disable(cap uint32) { @@ -555,30 +570,6 @@ func (c *defaultContext) FramebufferTexture2D(target uint32, attachment uint32, C.glowFramebufferTexture2DEXT(c.gpFramebufferTexture2DEXT, (C.GLenum)(target), (C.GLenum)(attachment), (C.GLenum)(textarget), (C.GLuint)(texture), (C.GLint)(level)) } -func (c *defaultContext) GenBuffers(n int32) []uint32 { - buffers := make([]uint32, n) - C.glowGenBuffers(c.gpGenBuffers, (C.GLsizei)(n), (*C.GLuint)(unsafe.Pointer(&buffers[0]))) - return buffers -} - -func (c *defaultContext) GenFramebuffers(n int32) []uint32 { - framebuffers := make([]uint32, n) - C.glowGenFramebuffersEXT(c.gpGenFramebuffersEXT, (C.GLsizei)(n), (*C.GLuint)(unsafe.Pointer(&framebuffers[0]))) - return framebuffers -} - -func (c *defaultContext) GenRenderbuffers(n int32) []uint32 { - renderbuffers := make([]uint32, n) - C.glowGenRenderbuffersEXT(c.gpGenRenderbuffersEXT, (C.GLsizei)(n), (*C.GLuint)(unsafe.Pointer(&renderbuffers[0]))) - return renderbuffers -} - -func (c *defaultContext) GenTextures(n int32) []uint32 { - textures := make([]uint32, n) - C.glowGenTextures(c.gpGenTextures, (C.GLsizei)(n), (*C.GLuint)(unsafe.Pointer(&textures[0]))) - return textures -} - func (c *defaultContext) GetError() uint32 { ret := C.glowGetError(c.gpGetError) return uint32(ret) @@ -724,18 +715,18 @@ func (c *defaultContext) Uniform4fv(location int32, value []float32) { runtime.KeepAlive(value) } -func (c *defaultContext) UniformMatrix2fv(location int32, transpose bool, value []float32) { - C.glowUniformMatrix2fv(c.gpUniformMatrix2fv, (C.GLint)(location), (C.GLsizei)(len(value)/4), (C.GLboolean)(boolToInt(transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) +func (c *defaultContext) UniformMatrix2fv(location int32, value []float32) { + C.glowUniformMatrix2fv(c.gpUniformMatrix2fv, (C.GLint)(location), (C.GLsizei)(len(value)/4), 0, (*C.GLfloat)(unsafe.Pointer(&value[0]))) runtime.KeepAlive(value) } -func (c *defaultContext) UniformMatrix3fv(location int32, transpose bool, value []float32) { - C.glowUniformMatrix3fv(c.gpUniformMatrix3fv, (C.GLint)(location), (C.GLsizei)(len(value)/9), (C.GLboolean)(boolToInt(transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) +func (c *defaultContext) UniformMatrix3fv(location int32, value []float32) { + C.glowUniformMatrix3fv(c.gpUniformMatrix3fv, (C.GLint)(location), (C.GLsizei)(len(value)/9), 0, (*C.GLfloat)(unsafe.Pointer(&value[0]))) runtime.KeepAlive(value) } -func (c *defaultContext) UniformMatrix4fv(location int32, transpose bool, value []float32) { - C.glowUniformMatrix4fv(c.gpUniformMatrix4fv, (C.GLint)(location), (C.GLsizei)(len(value)/16), (C.GLboolean)(boolToInt(transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) +func (c *defaultContext) UniformMatrix4fv(location int32, value []float32) { + C.glowUniformMatrix4fv(c.gpUniformMatrix4fv, (C.GLint)(location), (C.GLsizei)(len(value)/16), 0, (*C.GLfloat)(unsafe.Pointer(&value[0]))) runtime.KeepAlive(value) } diff --git a/internal/graphicsdriver/opengl/gl/default_purego.go b/internal/graphicsdriver/opengl/gl/default_purego.go index 47a3cbc97..497951799 100644 --- a/internal/graphicsdriver/opengl/gl/default_purego.go +++ b/internal/graphicsdriver/opengl/gl/default_purego.go @@ -155,13 +155,8 @@ func (c *defaultContext) BlendFuncSeparate(srcRGB uint32, dstRGB uint32, srcAlph purego.SyscallN(c.gpBlendFuncSeparate, uintptr(srcRGB), uintptr(dstRGB), uintptr(srcAlpha), uintptr(dstAlpha)) } -func (c *defaultContext) BufferData(target uint32, size int, data []byte, usage uint32) { - var ptr *byte - if len(data) > 0 { - ptr = &data[0] - } - purego.SyscallN(c.gpBufferData, uintptr(target), uintptr(size), uintptr(unsafe.Pointer(ptr)), uintptr(usage)) - runtime.KeepAlive(data) +func (c *defaultContext) BufferInit(target uint32, size int, usage uint32) { + purego.SyscallN(c.gpBufferData, uintptr(target), uintptr(size), 0, uintptr(usage)) } func (c *defaultContext) BufferSubData(target uint32, offset int, data []byte) { @@ -186,40 +181,62 @@ func (c *defaultContext) CompileShader(shader uint32) { purego.SyscallN(c.gpCompileShader, uintptr(shader)) } +func (c *defaultContext) CreateBuffer() uint32 { + var buffer uint32 + purego.SyscallN(c.gpGenBuffers, 1, uintptr(unsafe.Pointer(&buffer))) + return buffer +} + +func (c *defaultContext) CreateFramebuffer() uint32 { + var framebuffer uint32 + purego.SyscallN(c.gpGenFramebuffersEXT, 1, uintptr(unsafe.Pointer(&framebuffer))) + return framebuffer +} + func (c *defaultContext) CreateProgram() uint32 { ret, _, _ := purego.SyscallN(c.gpCreateProgram) return uint32(ret) } +func (c *defaultContext) CreateRenderbuffer() uint32 { + var renderbuffer uint32 + purego.SyscallN(c.gpGenRenderbuffersEXT, 1, uintptr(unsafe.Pointer(&renderbuffer))) + return renderbuffer +} + func (c *defaultContext) CreateShader(xtype uint32) uint32 { ret, _, _ := purego.SyscallN(c.gpCreateShader, uintptr(xtype)) return uint32(ret) } -func (c *defaultContext) DeleteBuffers(buffers []uint32) { - purego.SyscallN(c.gpDeleteBuffers, uintptr(len(buffers)), uintptr(unsafe.Pointer(&buffers[0]))) - runtime.KeepAlive(buffers) +func (c *defaultContext) CreateTexture() uint32 { + var texture uint32 + purego.SyscallN(c.gpGenTextures, 1, uintptr(unsafe.Pointer(&texture))) + return texture } -func (c *defaultContext) DeleteFramebuffers(framebuffers []uint32) { - purego.SyscallN(c.gpDeleteFramebuffersEXT, uintptr(len(framebuffers)), uintptr(unsafe.Pointer(&framebuffers[0]))) - runtime.KeepAlive(framebuffers) +func (c *defaultContext) DeleteBuffer(buffer uint32) { + purego.SyscallN(c.gpDeleteBuffers, 1, uintptr(unsafe.Pointer(&buffer))) +} + +func (c *defaultContext) DeleteFramebuffer(framebuffer uint32) { + purego.SyscallN(c.gpDeleteFramebuffersEXT, 1, uintptr(unsafe.Pointer(&framebuffer))) } func (c *defaultContext) DeleteProgram(program uint32) { purego.SyscallN(c.gpDeleteProgram, uintptr(program)) } -func (c *defaultContext) DeleteRenderbuffers(renderbuffers []uint32) { - purego.SyscallN(c.gpDeleteRenderbuffersEXT, uintptr(len(renderbuffers)), uintptr(unsafe.Pointer(&renderbuffers[0]))) +func (c *defaultContext) DeleteRenderbuffer(renderbuffer uint32) { + purego.SyscallN(c.gpDeleteRenderbuffersEXT, 1, uintptr(unsafe.Pointer(&renderbuffer))) } func (c *defaultContext) DeleteShader(shader uint32) { purego.SyscallN(c.gpDeleteShader, uintptr(shader)) } -func (c *defaultContext) DeleteTextures(textures []uint32) { - purego.SyscallN(c.gpDeleteTextures, uintptr(len(textures)), uintptr(unsafe.Pointer(&textures[0]))) +func (c *defaultContext) DeleteTexture(texture uint32) { + purego.SyscallN(c.gpDeleteTextures, 1, uintptr(unsafe.Pointer(&texture))) } func (c *defaultContext) Disable(cap uint32) { @@ -254,30 +271,6 @@ func (c *defaultContext) FramebufferTexture2D(target uint32, attachment uint32, purego.SyscallN(c.gpFramebufferTexture2DEXT, uintptr(target), uintptr(attachment), uintptr(textarget), uintptr(texture), uintptr(level)) } -func (c *defaultContext) GenBuffers(n int32) []uint32 { - buffers := make([]uint32, n) - purego.SyscallN(c.gpGenBuffers, uintptr(n), uintptr(unsafe.Pointer(&buffers[0]))) - return buffers -} - -func (c *defaultContext) GenFramebuffers(n int32) []uint32 { - framebuffers := make([]uint32, n) - purego.SyscallN(c.gpGenFramebuffersEXT, uintptr(n), uintptr(unsafe.Pointer(&framebuffers[0]))) - return framebuffers -} - -func (c *defaultContext) GenRenderbuffers(n int32) []uint32 { - renderbuffers := make([]uint32, n) - purego.SyscallN(c.gpGenRenderbuffersEXT, uintptr(n), uintptr(unsafe.Pointer(&renderbuffers[0]))) - return renderbuffers -} - -func (c *defaultContext) GenTextures(n int32) []uint32 { - textures := make([]uint32, n) - purego.SyscallN(c.gpGenTextures, uintptr(n), uintptr(unsafe.Pointer(&textures[0]))) - return textures -} - func (c *defaultContext) GetError() uint32 { ret, _, _ := purego.SyscallN(c.gpGetError) return uint32(ret) @@ -423,18 +416,18 @@ func (c *defaultContext) Uniform4fv(location int32, value []float32) { runtime.KeepAlive(value) } -func (c *defaultContext) UniformMatrix2fv(location int32, transpose bool, value []float32) { - purego.SyscallN(c.gpUniformMatrix2fv, uintptr(location), uintptr(len(value)/4), uintptr(boolToInt(transpose)), uintptr(unsafe.Pointer(&value[0]))) +func (c *defaultContext) UniformMatrix2fv(location int32, value []float32) { + purego.SyscallN(c.gpUniformMatrix2fv, uintptr(location), uintptr(len(value)/4), 0, uintptr(unsafe.Pointer(&value[0]))) runtime.KeepAlive(value) } -func (c *defaultContext) UniformMatrix3fv(location int32, transpose bool, value []float32) { - purego.SyscallN(c.gpUniformMatrix3fv, uintptr(location), uintptr(len(value)/9), uintptr(boolToInt(transpose)), uintptr(unsafe.Pointer(&value[0]))) +func (c *defaultContext) UniformMatrix3fv(location int32, value []float32) { + purego.SyscallN(c.gpUniformMatrix3fv, uintptr(location), uintptr(len(value)/9), 0, uintptr(unsafe.Pointer(&value[0]))) runtime.KeepAlive(value) } -func (c *defaultContext) UniformMatrix4fv(location int32, transpose bool, value []float32) { - purego.SyscallN(c.gpUniformMatrix4fv, uintptr(location), uintptr(len(value)/16), uintptr(boolToInt(transpose)), uintptr(unsafe.Pointer(&value[0]))) +func (c *defaultContext) UniformMatrix4fv(location int32, value []float32) { + purego.SyscallN(c.gpUniformMatrix4fv, uintptr(location), uintptr(len(value)/16), 0, uintptr(unsafe.Pointer(&value[0]))) runtime.KeepAlive(value) } diff --git a/internal/graphicsdriver/opengl/gl/gomobile.go b/internal/graphicsdriver/opengl/gl/gomobile.go index 3dca53ed7..b5f46475a 100644 --- a/internal/graphicsdriver/opengl/gl/gomobile.go +++ b/internal/graphicsdriver/opengl/gl/gomobile.go @@ -79,15 +79,8 @@ func (g *gomobileContext) BlendFuncSeparate(srcRGB uint32, dstRGB uint32, srcAlp g.ctx.BlendFuncSeparate(gl.Enum(srcRGB), gl.Enum(dstRGB), gl.Enum(srcAlpha), gl.Enum(dstAlpha)) } -func (g *gomobileContext) BufferData(target uint32, size int, data []byte, usage uint32) { - if data == nil { - g.ctx.BufferInit(gl.Enum(target), size, gl.Enum(usage)) - } else { - if size != len(data) { - panic("gl: size and len(data) must be same at BufferData") - } - g.ctx.BufferData(gl.Enum(target), data, gl.Enum(usage)) - } +func (g *gomobileContext) BufferInit(target uint32, size int, usage uint32) { + g.ctx.BufferInit(gl.Enum(target), size, gl.Enum(usage)) } func (g *gomobileContext) BufferSubData(target uint32, offset int, data []byte) { @@ -110,44 +103,52 @@ func (g *gomobileContext) CompileShader(shader uint32) { g.ctx.CompileShader(gl.Shader{Value: shader}) } +func (g *gomobileContext) CreateBuffer() uint32 { + return g.ctx.CreateBuffer().Value +} + +func (g *gomobileContext) CreateFramebuffer() uint32 { + return g.ctx.CreateFramebuffer().Value +} + func (g *gomobileContext) CreateProgram() uint32 { return g.ctx.CreateProgram().Value } +func (g *gomobileContext) CreateRenderbuffer() uint32 { + return g.ctx.CreateRenderbuffer().Value +} + func (g *gomobileContext) CreateShader(xtype uint32) uint32 { return g.ctx.CreateShader(gl.Enum(xtype)).Value } -func (g *gomobileContext) DeleteBuffers(buffers []uint32) { - for _, b := range buffers { - g.ctx.DeleteBuffer(gl.Buffer{Value: b}) - } +func (g *gomobileContext) CreateTexture() uint32 { + return g.ctx.CreateTexture().Value } -func (g *gomobileContext) DeleteFramebuffers(framebuffers []uint32) { - for _, b := range framebuffers { - g.ctx.DeleteFramebuffer(gl.Framebuffer{Value: b}) - } +func (g *gomobileContext) DeleteBuffer(buffer uint32) { + g.ctx.DeleteBuffer(gl.Buffer{Value: buffer}) +} + +func (g *gomobileContext) DeleteFramebuffer(framebuffer uint32) { + g.ctx.DeleteFramebuffer(gl.Framebuffer{Value: framebuffer}) } func (g *gomobileContext) DeleteProgram(program uint32) { g.ctx.DeleteProgram(gmProgram(program)) } -func (g *gomobileContext) DeleteRenderbuffers(renderbuffers []uint32) { - for _, r := range renderbuffers { - g.ctx.DeleteRenderbuffer(gl.Renderbuffer{Value: r}) - } +func (g *gomobileContext) DeleteRenderbuffer(renderbuffer uint32) { + g.ctx.DeleteRenderbuffer(gl.Renderbuffer{Value: renderbuffer}) } func (g *gomobileContext) DeleteShader(shader uint32) { g.ctx.DeleteShader(gl.Shader{Value: shader}) } -func (g *gomobileContext) DeleteTextures(textures []uint32) { - for _, t := range textures { - g.ctx.DeleteTexture(gl.Texture{Value: t}) - } +func (g *gomobileContext) DeleteTexture(texture uint32) { + g.ctx.DeleteTexture(gl.Texture{Value: texture}) } func (g *gomobileContext) Disable(cap uint32) { @@ -182,38 +183,6 @@ func (g *gomobileContext) FramebufferTexture2D(target uint32, attachment uint32, g.ctx.FramebufferTexture2D(gl.Enum(target), gl.Enum(attachment), gl.Enum(textarget), gl.Texture{Value: texture}, int(level)) } -func (g *gomobileContext) GenBuffers(n int32) []uint32 { - buffers := make([]uint32, n) - for i := range buffers { - buffers[i] = g.ctx.CreateBuffer().Value - } - return buffers -} - -func (g *gomobileContext) GenFramebuffers(n int32) []uint32 { - framebuffers := make([]uint32, n) - for i := range framebuffers { - framebuffers[i] = g.ctx.CreateFramebuffer().Value - } - return framebuffers -} - -func (g *gomobileContext) GenRenderbuffers(n int32) []uint32 { - renderbuffers := make([]uint32, n) - for i := range renderbuffers { - renderbuffers[i] = g.ctx.CreateRenderbuffer().Value - } - return renderbuffers -} - -func (g *gomobileContext) GenTextures(n int32) []uint32 { - textures := make([]uint32, n) - for i := range textures { - textures[i] = g.ctx.CreateTexture().Value - } - return textures -} - func (g *gomobileContext) GetError() uint32 { return uint32(g.ctx.GetError()) } @@ -326,24 +295,15 @@ func (g *gomobileContext) Uniform4fv(location int32, value []float32) { g.ctx.Uniform4fv(gl.Uniform{Value: location}, value) } -func (g *gomobileContext) UniformMatrix2fv(location int32, transpose bool, value []float32) { - if transpose { - panic("gl: UniformMatrix2fv with transpose is not implemented") - } +func (g *gomobileContext) UniformMatrix2fv(location int32, value []float32) { g.ctx.UniformMatrix2fv(gl.Uniform{Value: location}, value) } -func (g *gomobileContext) UniformMatrix3fv(location int32, transpose bool, value []float32) { - if transpose { - panic("gl: UniformMatrix3fv with transpose is not implemented") - } +func (g *gomobileContext) UniformMatrix3fv(location int32, value []float32) { g.ctx.UniformMatrix3fv(gl.Uniform{Value: location}, value) } -func (g *gomobileContext) UniformMatrix4fv(location int32, transpose bool, value []float32) { - if transpose { - panic("gl: UniformMatrix4fv with transpose is not implemented") - } +func (g *gomobileContext) UniformMatrix4fv(location int32, value []float32) { g.ctx.UniformMatrix4fv(gl.Uniform{Value: location}, value) } diff --git a/internal/graphicsdriver/opengl/gl/interface.go b/internal/graphicsdriver/opengl/gl/interface.go index ff53f9e6f..c68121476 100644 --- a/internal/graphicsdriver/opengl/gl/interface.go +++ b/internal/graphicsdriver/opengl/gl/interface.go @@ -31,20 +31,24 @@ type Context interface { BindTexture(target uint32, texture uint32) BlendEquationSeparate(modeRGB uint32, modeAlpha uint32) BlendFuncSeparate(srcRGB uint32, dstRGB uint32, srcAlpha uint32, dstAlpha uint32) - BufferData(target uint32, size int, data []byte, usage uint32) + BufferInit(target uint32, size int, usage uint32) BufferSubData(target uint32, offset int, data []byte) CheckFramebufferStatus(target uint32) uint32 Clear(mask uint32) ColorMask(red, green, blue, alpha bool) CompileShader(shader uint32) + CreateBuffer() uint32 + CreateFramebuffer() uint32 CreateProgram() uint32 + CreateRenderbuffer() uint32 CreateShader(xtype uint32) uint32 - DeleteBuffers(buffers []uint32) - DeleteFramebuffers(framebuffers []uint32) + CreateTexture() uint32 + DeleteBuffer(buffer uint32) + DeleteFramebuffer(framebuffer uint32) DeleteProgram(program uint32) - DeleteRenderbuffers(renderbuffer []uint32) + DeleteRenderbuffer(renderbuffer uint32) DeleteShader(shader uint32) - DeleteTextures(textures []uint32) + DeleteTexture(textures uint32) Disable(cap uint32) DisableVertexAttribArray(index uint32) DrawElements(mode uint32, count int32, xtype uint32, offset int) @@ -53,10 +57,6 @@ type Context interface { Flush() FramebufferRenderbuffer(target uint32, attachment uint32, renderbuffertarget uint32, renderbuffer uint32) FramebufferTexture2D(target uint32, attachment uint32, textarget uint32, texture uint32, level int32) - GenBuffers(n int32) []uint32 - GenFramebuffers(n int32) []uint32 - GenRenderbuffers(n int32) []uint32 - GenTextures(n int32) []uint32 GetError() uint32 GetInteger(pname uint32) int GetProgramInfoLog(program uint32) string @@ -85,9 +85,9 @@ type Context interface { Uniform2fv(location int32, value []float32) Uniform3fv(location int32, value []float32) Uniform4fv(location int32, value []float32) - UniformMatrix2fv(location int32, transpose bool, value []float32) - UniformMatrix3fv(location int32, transpose bool, value []float32) - UniformMatrix4fv(location int32, transpose bool, value []float32) + UniformMatrix2fv(location int32, value []float32) + UniformMatrix3fv(location int32, value []float32) + UniformMatrix4fv(location int32, value []float32) UseProgram(program uint32) VertexAttribPointer(index uint32, size int32, xtype uint32, normalized bool, stride int32, offset int) Viewport(x int32, y int32, width int32, height int32)