gl: a few more ES 3.0 functions
Nothing exciting, just exercising the layout of the functions.
Change-Id: I460fdc1c9596968bbdfdafe7d068ea393e0029ed
Reviewed-on: https://go-review.googlesource.com/24051
Reviewed-by: Nigel Tao <nigeltao@golang.org>
diff --git a/gl/fn.go b/gl/fn.go
index a3fe0a6..35c52c8 100644
--- a/gl/fn.go
+++ b/gl/fn.go
@@ -43,7 +43,6 @@
glfnBlendEquationSeparate
glfnBlendFunc
glfnBlendFuncSeparate
- glfnBlitFramebuffer
glfnBufferData
glfnBufferSubData
glfnCheckFramebufferStatus
@@ -172,6 +171,23 @@
glfnVertexAttrib4fv
glfnVertexAttribPointer
glfnViewport
+
+ // ES 3.0 functions
+ glfnUniformMatrix2x3fv
+ glfnUniformMatrix3x2fv
+ glfnUniformMatrix2x4fv
+ glfnUniformMatrix4x2fv
+ glfnUniformMatrix3x4fv
+ glfnUniformMatrix4x3fv
+ glfnBlitFramebuffer
+ glfnUniform1ui
+ glfnUniform2ui
+ glfnUniform3ui
+ glfnUniform4ui
+ glfnUniform1uiv
+ glfnUniform2uiv
+ glfnUniform3uiv
+ glfnUniform4uiv
)
func goString(buf []byte) string {
diff --git a/gl/gl.go b/gl/gl.go
index d9d0184..b4215de 100644
--- a/gl/gl.go
+++ b/gl/gl.go
@@ -1680,6 +1680,78 @@
})
}
+func (ctx context3) UniformMatrix2x3fv(dst Uniform, src []float32) {
+ ctx.enqueue(call{
+ args: fnargs{
+ fn: glfnUniformMatrix2x3fv,
+ a0: dst.c(),
+ a1: uintptr(len(src) / 6),
+ },
+ parg: unsafe.Pointer(&src[0]),
+ blocking: true,
+ })
+}
+
+func (ctx context3) UniformMatrix3x2fv(dst Uniform, src []float32) {
+ ctx.enqueue(call{
+ args: fnargs{
+ fn: glfnUniformMatrix3x2fv,
+ a0: dst.c(),
+ a1: uintptr(len(src) / 6),
+ },
+ parg: unsafe.Pointer(&src[0]),
+ blocking: true,
+ })
+}
+
+func (ctx context3) UniformMatrix2x4fv(dst Uniform, src []float32) {
+ ctx.enqueue(call{
+ args: fnargs{
+ fn: glfnUniformMatrix2x4fv,
+ a0: dst.c(),
+ a1: uintptr(len(src) / 8),
+ },
+ parg: unsafe.Pointer(&src[0]),
+ blocking: true,
+ })
+}
+
+func (ctx context3) UniformMatrix4x2fv(dst Uniform, src []float32) {
+ ctx.enqueue(call{
+ args: fnargs{
+ fn: glfnUniformMatrix4x2fv,
+ a0: dst.c(),
+ a1: uintptr(len(src) / 8),
+ },
+ parg: unsafe.Pointer(&src[0]),
+ blocking: true,
+ })
+}
+
+func (ctx context3) UniformMatrix3x4fv(dst Uniform, src []float32) {
+ ctx.enqueue(call{
+ args: fnargs{
+ fn: glfnUniformMatrix3x4fv,
+ a0: dst.c(),
+ a1: uintptr(len(src) / 12),
+ },
+ parg: unsafe.Pointer(&src[0]),
+ blocking: true,
+ })
+}
+
+func (ctx context3) UniformMatrix4x3fv(dst Uniform, src []float32) {
+ ctx.enqueue(call{
+ args: fnargs{
+ fn: glfnUniformMatrix4x3fv,
+ a0: dst.c(),
+ a1: uintptr(len(src) / 12),
+ },
+ parg: unsafe.Pointer(&src[0]),
+ blocking: true,
+ })
+}
+
func (ctx context3) BlitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1 int, mask uint, filter Enum) {
ctx.enqueue(call{
args: fnargs{
@@ -1697,3 +1769,49 @@
},
})
}
+
+func (ctx context3) Uniform1ui(dst Uniform, v uint32) {
+ ctx.enqueue(call{
+ args: fnargs{
+ fn: glfnUniform1ui,
+ a0: dst.c(),
+ a1: uintptr(v),
+ },
+ })
+}
+
+func (ctx context3) Uniform2ui(dst Uniform, v0, v1 uint32) {
+ ctx.enqueue(call{
+ args: fnargs{
+ fn: glfnUniform2ui,
+ a0: dst.c(),
+ a1: uintptr(v0),
+ a2: uintptr(v1),
+ },
+ })
+}
+
+func (ctx context3) Uniform3ui(dst Uniform, v0, v1, v2 uint) {
+ ctx.enqueue(call{
+ args: fnargs{
+ fn: glfnUniform3ui,
+ a0: dst.c(),
+ a1: uintptr(v0),
+ a2: uintptr(v1),
+ a3: uintptr(v2),
+ },
+ })
+}
+
+func (ctx context3) Uniform4ui(dst Uniform, v0, v1, v2, v3 uint32) {
+ ctx.enqueue(call{
+ args: fnargs{
+ fn: glfnUniform4ui,
+ a0: dst.c(),
+ a1: uintptr(v0),
+ a2: uintptr(v1),
+ a3: uintptr(v2),
+ a4: uintptr(v3),
+ },
+ })
+}
diff --git a/gl/gldebug.go b/gl/gldebug.go
index b2f6133..6cb6fba 100644
--- a/gl/gldebug.go
+++ b/gl/gldebug.go
@@ -3455,6 +3455,102 @@
blocking: true})
}
+func (ctx context3) UniformMatrix2x3fv(dst Uniform, src []float32) {
+ defer func() {
+ errstr := ctx.errDrain()
+ log.Printf("gl.UniformMatrix2x3fv(%v, len(%d)) %v", dst, len(src), errstr)
+ }()
+ ctx.enqueueDebug(call{
+ args: fnargs{
+ fn: glfnUniformMatrix2x3fv,
+ a0: dst.c(),
+ a1: uintptr(len(src) / 6),
+ },
+ parg: unsafe.Pointer(&src[0]),
+ blocking: true,
+ })
+}
+
+func (ctx context3) UniformMatrix3x2fv(dst Uniform, src []float32) {
+ defer func() {
+ errstr := ctx.errDrain()
+ log.Printf("gl.UniformMatrix3x2fv(%v, len(%d)) %v", dst, len(src), errstr)
+ }()
+ ctx.enqueueDebug(call{
+ args: fnargs{
+ fn: glfnUniformMatrix3x2fv,
+ a0: dst.c(),
+ a1: uintptr(len(src) / 6),
+ },
+ parg: unsafe.Pointer(&src[0]),
+ blocking: true,
+ })
+}
+
+func (ctx context3) UniformMatrix2x4fv(dst Uniform, src []float32) {
+ defer func() {
+ errstr := ctx.errDrain()
+ log.Printf("gl.UniformMatrix2x4fv(%v, len(%d)) %v", dst, len(src), errstr)
+ }()
+ ctx.enqueueDebug(call{
+ args: fnargs{
+ fn: glfnUniformMatrix2x4fv,
+ a0: dst.c(),
+ a1: uintptr(len(src) / 8),
+ },
+ parg: unsafe.Pointer(&src[0]),
+ blocking: true,
+ })
+}
+
+func (ctx context3) UniformMatrix4x2fv(dst Uniform, src []float32) {
+ defer func() {
+ errstr := ctx.errDrain()
+ log.Printf("gl.UniformMatrix4x2fv(%v, len(%d)) %v", dst, len(src), errstr)
+ }()
+ ctx.enqueueDebug(call{
+ args: fnargs{
+ fn: glfnUniformMatrix4x2fv,
+ a0: dst.c(),
+ a1: uintptr(len(src) / 8),
+ },
+ parg: unsafe.Pointer(&src[0]),
+ blocking: true,
+ })
+}
+
+func (ctx context3) UniformMatrix3x4fv(dst Uniform, src []float32) {
+ defer func() {
+ errstr := ctx.errDrain()
+ log.Printf("gl.UniformMatrix3x4fv(%v, len(%d)) %v", dst, len(src), errstr)
+ }()
+ ctx.enqueueDebug(call{
+ args: fnargs{
+ fn: glfnUniformMatrix3x4fv,
+ a0: dst.c(),
+ a1: uintptr(len(src) / 12),
+ },
+ parg: unsafe.Pointer(&src[0]),
+ blocking: true,
+ })
+}
+
+func (ctx context3) UniformMatrix4x3fv(dst Uniform, src []float32) {
+ defer func() {
+ errstr := ctx.errDrain()
+ log.Printf("gl.UniformMatrix4x3fv(%v, len(%d)) %v", dst, len(src), errstr)
+ }()
+ ctx.enqueueDebug(call{
+ args: fnargs{
+ fn: glfnUniformMatrix4x3fv,
+ a0: dst.c(),
+ a1: uintptr(len(src) / 12),
+ },
+ parg: unsafe.Pointer(&src[0]),
+ blocking: true,
+ })
+}
+
func (ctx context3) BlitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1 int, mask uint, filter Enum) {
defer func() {
errstr := ctx.errDrain()
@@ -3476,3 +3572,65 @@
},
blocking: true})
}
+
+func (ctx context3) Uniform1ui(dst Uniform, v uint32) {
+ defer func() {
+ errstr := ctx.errDrain()
+ log.Printf("gl.Uniform1ui(%v, %v) %v", dst, v, errstr)
+ }()
+ ctx.enqueueDebug(call{
+ args: fnargs{
+ fn: glfnUniform1ui,
+ a0: dst.c(),
+ a1: uintptr(v),
+ },
+ blocking: true})
+}
+
+func (ctx context3) Uniform2ui(dst Uniform, v0, v1 uint32) {
+ defer func() {
+ errstr := ctx.errDrain()
+ log.Printf("gl.Uniform2ui(%v, %v, %v) %v", dst, v0, v1, errstr)
+ }()
+ ctx.enqueueDebug(call{
+ args: fnargs{
+ fn: glfnUniform2ui,
+ a0: dst.c(),
+ a1: uintptr(v0),
+ a2: uintptr(v1),
+ },
+ blocking: true})
+}
+
+func (ctx context3) Uniform3ui(dst Uniform, v0, v1, v2 uint) {
+ defer func() {
+ errstr := ctx.errDrain()
+ log.Printf("gl.Uniform3ui(%v, %v, %v, %v) %v", dst, v0, v1, v2, errstr)
+ }()
+ ctx.enqueueDebug(call{
+ args: fnargs{
+ fn: glfnUniform3ui,
+ a0: dst.c(),
+ a1: uintptr(v0),
+ a2: uintptr(v1),
+ a3: uintptr(v2),
+ },
+ blocking: true})
+}
+
+func (ctx context3) Uniform4ui(dst Uniform, v0, v1, v2, v3 uint32) {
+ defer func() {
+ errstr := ctx.errDrain()
+ log.Printf("gl.Uniform4ui(%v, %v, %v, %v, %v) %v", dst, v0, v1, v2, v3, errstr)
+ }()
+ ctx.enqueueDebug(call{
+ args: fnargs{
+ fn: glfnUniform4ui,
+ a0: dst.c(),
+ a1: uintptr(v0),
+ a2: uintptr(v1),
+ a3: uintptr(v2),
+ a4: uintptr(v3),
+ },
+ blocking: true})
+}
diff --git a/gl/work.c b/gl/work.c
index 8f259f7..75e6a71 100644
--- a/gl/work.c
+++ b/gl/work.c
@@ -11,10 +11,25 @@
#if defined(GL_ES_VERSION_3_0) && GL_ES_VERSION_3_0
#else
#include <stdio.h>
-void glBlitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter) {
+static void gles3missing() {
printf("GLES3 function is missing\n");
exit(2);
}
+static void glUniformMatrix2x3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) { gles3missing(); }
+static void glUniformMatrix3x2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) { gles3missing(); }
+static void glUniformMatrix2x4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) { gles3missing(); }
+static void glUniformMatrix4x2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) { gles3missing(); }
+static void glUniformMatrix3x4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) { gles3missing(); }
+static void glUniformMatrix4x3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) { gles3missing(); }
+static void glBlitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter) { gles3missing(); }
+static void glUniform1ui(GLint location, GLuint v0) { gles3missing(); }
+static void glUniform2ui(GLint location, GLuint v0, GLuint v1) { gles3missing(); }
+static void glUniform3ui(GLint location, GLuint v0, GLuint v1, GLuint v2) { gles3missing(); }
+static void glUniform4ui(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3) { gles3missing(); }
+static void glUniform1uiv(GLint location, GLsizei count, const GLuint *value) { gles3missing(); }
+static void glUniform2uiv(GLint location, GLsizei count, const GLuint *value) { gles3missing(); }
+static void glUniform3uiv(GLint location, GLsizei count, const GLuint *value) { gles3missing(); }
+static void glUniform4uiv(GLint location, GLsizei count, const GLuint *value) { gles3missing(); }
#endif
uintptr_t processFn(struct fnargs* args, char* parg) {
@@ -398,6 +413,9 @@
case glfnUniform1i:
glUniform1i((GLint)args->a0, (GLint)args->a1);
break;
+ case glfnUniform1ui:
+ glUniform1ui((GLint)args->a0, (GLuint)args->a1);
+ break;
case glfnUniform1iv:
glUniform1iv((GLint)args->a0, (GLsizeiptr)args->a1, (GLvoid*)parg);
break;
@@ -410,6 +428,9 @@
case glfnUniform2i:
glUniform2i((GLint)args->a0, (GLint)args->a1, (GLint)args->a2);
break;
+ case glfnUniform2ui:
+ glUniform2ui((GLint)args->a0, (GLuint)args->a1, (GLuint)args->a2);
+ break;
case glfnUniform2iv:
glUniform2iv((GLint)args->a0, (GLsizeiptr)args->a1, (GLvoid*)parg);
break;
@@ -422,6 +443,9 @@
case glfnUniform3i:
glUniform3i((GLint)args->a0, (GLint)args->a1, (GLint)args->a2, (GLint)args->a3);
break;
+ case glfnUniform3ui:
+ glUniform3ui((GLint)args->a0, (GLuint)args->a1, (GLuint)args->a2, (GLuint)args->a3);
+ break;
case glfnUniform3iv:
glUniform3iv((GLint)args->a0, (GLsizeiptr)args->a1, (GLvoid*)parg);
break;
@@ -434,6 +458,9 @@
case glfnUniform4i:
glUniform4i((GLint)args->a0, (GLint)args->a1, (GLint)args->a2, (GLint)args->a3, (GLint)args->a4);
break;
+ case glfnUniform4ui:
+ glUniform4ui((GLint)args->a0, (GLuint)args->a1, (GLuint)args->a2, (GLuint)args->a3, (GLuint)args->a4);
+ break;
case glfnUniform4iv:
glUniform4iv((GLint)args->a0, (GLsizeiptr)args->a1, (GLvoid*)parg);
break;
@@ -446,6 +473,24 @@
case glfnUniformMatrix4fv:
glUniformMatrix4fv((GLint)args->a0, (GLsizeiptr)args->a1, 0, (GLvoid*)parg);
break;
+ case glfnUniformMatrix2x3fv:
+ glUniformMatrix2x3fv((GLint)args->a0, (GLsizeiptr)args->a1, 0, (GLvoid*)parg);
+ break;
+ case glfnUniformMatrix3x2fv:
+ glUniformMatrix3x2fv((GLint)args->a0, (GLsizeiptr)args->a1, 0, (GLvoid*)parg);
+ break;
+ case glfnUniformMatrix2x4fv:
+ glUniformMatrix2x4fv((GLint)args->a0, (GLsizeiptr)args->a1, 0, (GLvoid*)parg);
+ break;
+ case glfnUniformMatrix4x2fv:
+ glUniformMatrix4x2fv((GLint)args->a0, (GLsizeiptr)args->a1, 0, (GLvoid*)parg);
+ break;
+ case glfnUniformMatrix3x4fv:
+ glUniformMatrix3x4fv((GLint)args->a0, (GLsizeiptr)args->a1, 0, (GLvoid*)parg);
+ break;
+ case glfnUniformMatrix4x3fv:
+ glUniformMatrix4x3fv((GLint)args->a0, (GLsizeiptr)args->a1, 0, (GLvoid*)parg);
+ break;
case glfnUseProgram:
glUseProgram((GLint)args->a0);
break;
diff --git a/gl/work.h b/gl/work.h
index 3d9a81b..dc494ba 100644
--- a/gl/work.h
+++ b/gl/work.h
@@ -45,7 +45,6 @@
glfnBlendEquationSeparate,
glfnBlendFunc,
glfnBlendFuncSeparate,
- glfnBlitFramebuffer,
glfnBufferData,
glfnBufferSubData,
glfnCheckFramebufferStatus,
@@ -174,6 +173,23 @@
glfnVertexAttrib4fv,
glfnVertexAttribPointer,
glfnViewport,
+
+ // ES 3.0 functions
+ glfnUniformMatrix2x3fv,
+ glfnUniformMatrix3x2fv,
+ glfnUniformMatrix2x4fv,
+ glfnUniformMatrix4x2fv,
+ glfnUniformMatrix3x4fv,
+ glfnUniformMatrix4x3fv,
+ glfnBlitFramebuffer,
+ glfnUniform1ui,
+ glfnUniform2ui,
+ glfnUniform3ui,
+ glfnUniform4ui,
+ glfnUniform1uiv,
+ glfnUniform2uiv,
+ glfnUniform3uiv,
+ glfnUniform4uiv,
} glfn;
// TODO: generate this type from fn.go.