2
0
mirror of synced 2025-02-22 06:28:04 +00:00

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>
This commit is contained in:
David Crawshaw 2016-06-14 13:42:05 -04:00
parent 4409fe621c
commit 3919ffce20
5 changed files with 356 additions and 3 deletions

View File

@ -43,7 +43,6 @@ const (
glfnBlendEquationSeparate
glfnBlendFunc
glfnBlendFuncSeparate
glfnBlitFramebuffer
glfnBufferData
glfnBufferSubData
glfnCheckFramebufferStatus
@ -172,6 +171,23 @@ const (
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 {

118
gl/gl.go
View File

@ -1680,6 +1680,78 @@ func (ctx *context) Viewport(x, y, width, height int) {
})
}
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) BlitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, ds
},
})
}
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),
},
})
}

View File

@ -3455,6 +3455,102 @@ func (ctx *context) Viewport(x, y, width, height int) {
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 @@ func (ctx context3) BlitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, ds
},
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})
}

View File

@ -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 @@ uintptr_t processFn(struct fnargs* args, char* parg) {
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 @@ uintptr_t processFn(struct fnargs* args, char* parg) {
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 @@ uintptr_t processFn(struct fnargs* args, char* parg) {
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 @@ uintptr_t processFn(struct fnargs* args, char* parg) {
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 @@ uintptr_t processFn(struct fnargs* args, char* parg) {
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;

View File

@ -45,7 +45,6 @@ typedef enum {
glfnBlendEquationSeparate,
glfnBlendFunc,
glfnBlendFuncSeparate,
glfnBlitFramebuffer,
glfnBufferData,
glfnBufferSubData,
glfnCheckFramebufferStatus,
@ -174,6 +173,23 @@ typedef enum {
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.