aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Waller <p@pwaller.net>2014-04-12 16:53:03 +0100
committerPeter Waller <p@pwaller.net>2014-04-12 16:53:03 +0100
commit088c295803191c36c19e5a40b2ed670f4f66dadf (patch)
tree0623202279ff83cc33a87248852d6d89e83ed02b
parent2f9b7c7aef3ec1e5e1a9b44d04f59de96f027675 (diff)
parentf6f02bb7e574506596ae42e066fcfce3d9fde314 (diff)
downloadgl-088c295803191c36c19e5a40b2ed670f4f66dadf.tar.gz
Merge pull request #132 from Ferguzz/master
Support for multiple string inputs to shader.Source().
-rw-r--r--shader.go18
1 files changed, 12 insertions, 6 deletions
diff --git a/shader.go b/shader.go
index aec8742..cd8514f 100644
--- a/shader.go
+++ b/shader.go
@@ -12,6 +12,7 @@ package gl
// }
//
import "C"
+import "unsafe"
// Shader
@@ -53,14 +54,19 @@ func (shader Shader) GetSource() string {
return ""
}
-func (shader Shader) Source(source string) {
+func (shader Shader) Source(source ...string) {
+ count := C.GLsizei(len(source))
+ cstrings := make([]*C.GLchar, count)
+ length := make([]C.GLint, count)
- csource := glString(source)
- defer freeString(csource)
-
- var one C.GLint = C.GLint(len(source))
+ for i, s := range source {
+ csource := glString(s)
+ cstrings[i] = csource
+ length[i] = C.GLint(len(s))
+ defer freeString(csource)
+ }
- C.glShaderSource(C.GLuint(shader), 1, &csource, &one)
+ C.glShaderSource(C.GLuint(shader), count, (**_Ctype_GLchar)(unsafe.Pointer(&cstrings[0])), (*_Ctype_GLint)(unsafe.Pointer(&length[0])))
}
func (shader Shader) Compile() { C.glCompileShader(C.GLuint(shader)) }