diff options
author | jimt <jimteeuwen@gmail.com> | 2014-04-12 13:33:59 +0200 |
---|---|---|
committer | jimt <jimteeuwen@gmail.com> | 2014-04-12 13:33:59 +0200 |
commit | 2f9b7c7aef3ec1e5e1a9b44d04f59de96f027675 (patch) | |
tree | 1c3f18e4c707b6cd19c6b7c1c4612e0ad04e63ab | |
parent | 9ce31868aa20d2f9277a0909204591fdb492963b (diff) | |
parent | 25b7bfc9ceec3d18e0b5a7d7b223c467782219ae (diff) | |
download | gl-2f9b7c7aef3ec1e5e1a9b44d04f59de96f027675.tar.gz |
Merge pull request #140 from PolyFloyd/query
Added Query Objects
-rw-r--r-- | gl_defs.go | 3 | ||||
-rw-r--r-- | object.go | 2 | ||||
-rw-r--r-- | query.go | 96 |
3 files changed, 101 insertions, 0 deletions
@@ -58,6 +58,7 @@ const ( AND_INVERTED = C.GL_AND_INVERTED AND_REVERSE = C.GL_AND_REVERSE AND = C.GL_AND + ANY_SAMPLES_PASSED = C.GL_ANY_SAMPLES_PASSED ARRAY_BUFFER_BINDING = C.GL_ARRAY_BUFFER_BINDING ARRAY_BUFFER = C.GL_ARRAY_BUFFER ATTACHED_SHADERS = C.GL_ATTACHED_SHADERS @@ -1232,6 +1233,8 @@ const ( TEXTURE = C.GL_TEXTURE TIMEOUT_EXPIRED = C.GL_TIMEOUT_EXPIRED TIMEOUT_IGNORED = C.GL_TIMEOUT_IGNORED + TIMESTAMP = C.GL_TIMESTAMP + TIME_ELAPSED = C.GL_TIME_ELAPSED TRANSFORM_FEEDBACK = C.GL_TRANSFORM_FEEDBACK TRANSFORM_BIT = C.GL_TRANSFORM_BIT TRANSFORM_FEEDBACK_BUFFER_BINDING = C.GL_TRANSFORM_FEEDBACK_BUFFER_BINDING @@ -15,6 +15,8 @@ func (object Object) IsBuffer() bool { return C.glIsBuffer(C.GLuint(object)) != func (object Object) IsProgram() bool { return C.glIsProgram(C.GLuint(object)) != 0 } +func (object Object) IsQuery() bool { return C.glIsQuery(C.GLuint(object)) != 0 } + func (object Object) IsShader() bool { return C.glIsShader(C.GLuint(object)) != 0 } func (object Object) IsTexture() bool { return C.glIsTexture(C.GLuint(object)) != 0 } diff --git a/query.go b/query.go new file mode 100644 index 0000000..88bdc32 --- /dev/null +++ b/query.go @@ -0,0 +1,96 @@ +// Copyright 2012 The go-gl Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package gl + +// #include "gl.h" +import "C" + +type Query Object + +func GenQuery() (q Query) { + C.glGenQueries(1, (*C.GLuint)(&q)) + return +} + +func GenQueries(queries []Query) { + if len(queries) > 0 { + C.glGenQueries(C.GLsizei(len(queries)), (*C.GLuint)(&queries[0])) + } +} + +func (query Query) Begin(target GLenum) { + C.glBeginQuery(C.GLenum(target), C.GLuint(query)) +} + +func (query Query) BeginIndexed(target GLenum, index uint) { + C.glBeginQueryIndexed(C.GLenum(target), C.GLuint(index), C.GLuint(query)) +} + +func (query Query) Delete() { + C.glDeleteQueries(1, (*C.GLuint)(&query)) +} + +func (query Query) GetObjecti(pname GLenum) (param int32) { + C.glGetQueryObjectiv(C.GLuint(query), C.GLenum(pname), (*C.GLint)(¶m)) + return +} + +func (query Query) GetObjectui(pname GLenum) (param uint32) { + C.glGetQueryObjectuiv(C.GLuint(query), C.GLenum(pname), (*C.GLuint)(¶m)) + return +} + +func (query Query) GetObjecti64(pname GLenum) (param int64) { + C.glGetQueryObjecti64v(C.GLuint(query), C.GLenum(pname), (*C.GLint64)(¶m)) + return +} + +func (query Query) GetObjectui64(pname GLenum) (param uint64) { + C.glGetQueryObjectui64v(C.GLuint(query), C.GLenum(pname), (*C.GLuint64)(¶m)) + return +} + +func (query Query) Counter(target GLenum) { + C.glQueryCounter(C.GLuint(query), C.GLenum(target)) +} + +// Returns whether the passed samples counter is immediately available. If a delay +// would not occur waiting for the query result, true is returned, which also indicates +// that the results of all previous queries are available as well. +func (query Query) ResultAvailable() bool { + return query.GetObjectui(QUERY_RESULT_AVAILABLE) == TRUE +} + +func (query Query) BeginConditionalRender(mode GLenum) { + C.glBeginConditionalRender(C.GLuint(query), C.GLenum(mode)) +} + +func DeleteQueries(queries []Query) { + if len(queries) > 0 { + C.glDeleteQueries(C.GLsizei(len(queries)), (*C.GLuint)(&queries[0])) + } +} + +func EndQuery(target GLenum) { + C.glEndQuery(C.GLenum(target)) +} + +func GetQuery(target GLenum, pname GLenum) (param int32) { + C.glGetQueryiv(C.GLenum(target), C.GLenum(pname), (*C.GLint)(¶m)) + return +} + +func GetQueryIndexed(target GLenum, index uint, pname GLenum) (param int32) { + C.glGetQueryIndexediv(C.GLenum(target), C.GLuint(index), C.GLenum(pname), (*C.GLint)(¶m)) + return +} + +func (query Query) EndQueryIndexed(target GLenum, index uint) { + C.glEndQueryIndexed(C.GLenum(target), C.GLuint(index)) +} + +func (query Query) EndConditionalRender() { + C.glEndConditionalRender() +} |