>From 06c09fb71726773793fd5a84234c9700b9c2310a Mon Sep 17 00:00:00 2001
From: Frederic Plourde <[email protected]>
Date: Tue, 20 Sep 2011 14:19:51 -0400
Subject: [PATCH 1/3] Add uniform{2i,3i,4i} support to GLProgram

---
 plugins/opengl/include/opengl/opengl.h  |   13 ++++++++++
 plugins/opengl/include/opengl/program.h |    7 +++++
 plugins/opengl/src/program.cpp          |   39
+++++++++++++++++++++++++++++++
 plugins/opengl/src/screen.cpp           |    9 +++++++
 4 files changed, 68 insertions(+), 0 deletions(-)

diff --git a/plugins/opengl/include/opengl/opengl.h
b/plugins/opengl/include/opengl/opengl.h
index faea22d..90988b2 100644
--- a/plugins/opengl/include/opengl/opengl.h
+++ b/plugins/opengl/include/opengl/opengl.h
@@ -230,6 +230,16 @@ namespace GL {
                                      GLfloat y,
                                      GLfloat z,
                                      GLfloat w);
+    typedef void (*GLUniform2iProc) (GLint location, GLint x, GLint y);
+    typedef void (*GLUniform3iProc) (GLint location,
+                                     GLint x,
+                                     GLint y,
+                                     GLint z);
+    typedef void (*GLUniform4iProc) (GLint location,
+                                     GLint x,
+                                     GLint y,
+                                     GLint z,
+                                     GLint w);
     typedef void (*GLUniformMatrix4fvProc) (GLint location,
                                             GLsizei count,
                                             GLboolean transpose,
@@ -300,8 +310,11 @@ namespace GL {
     extern GLUniform1fProc          uniform1f;
     extern GLUniform1iProc          uniform1i;
     extern GLUniform2fProc          uniform2f;
+    extern GLUniform2iProc          uniform2i;
     extern GLUniform3fProc          uniform3f;
+    extern GLUniform3iProc          uniform3i;
     extern GLUniform4fProc          uniform4f;
+    extern GLUniform4iProc          uniform4i;
     extern GLUniformMatrix4fvProc   uniformMatrix4fv;
     extern GLGetAttribLocationProc  getAttribLocation;
 
diff --git a/plugins/opengl/include/opengl/program.h
b/plugins/opengl/include/opengl/program.h
index f7ac571..3165ee4 100644
--- a/plugins/opengl/include/opengl/program.h
+++ b/plugins/opengl/include/opengl/program.h
@@ -57,6 +57,13 @@ class GLProgram
                        GLfloat y,
                        GLfloat z,
                            GLfloat w);
+    bool setUniform2i (const char *name, GLint x, GLint y);
+    bool setUniform3i (const char *name, GLint x, GLint y, GLint z);
+    bool setUniform4i (const char *name,
+                       GLint x,
+                       GLint y,
+                       GLint z,
+                           GLint w);
 
     GLuint attributeLocation (const char *name);
 
diff --git a/plugins/opengl/src/program.cpp b/plugins/opengl/src/program.cpp
index 32b3534..719b0d3 100644
--- a/plugins/opengl/src/program.cpp
+++ b/plugins/opengl/src/program.cpp
@@ -216,6 +216,45 @@ bool GLProgram::setUniform4f (const char *name,
     return true;
 }
 
+bool GLProgram::setUniform2i (const char *name,
+                              GLint x,
+                              GLint y)
+{
+    GLint location = (*GL::getUniformLocation) (priv->program, name);
+    if (location == -1)
+    return false;
+
+    (*GL::uniform2i) (location, x, y);
+    return true;
+}
+
+bool GLProgram::setUniform3i (const char *name,
+                              GLint x,
+                              GLint y,
+                              GLint z)
+{
+    GLint location = (*GL::getUniformLocation) (priv->program, name);
+    if (location == -1)
+    return false;
+
+    (*GL::uniform3i) (location, x, y, z);
+    return true;
+}
+
+bool GLProgram::setUniform4i (const char *name,
+                              GLint x,
+                              GLint y,
+                              GLint z,
+                              GLint w)
+{
+    GLint location = (*GL::getUniformLocation) (priv->program, name);
+    if (location == -1)
+    return false;
+
+    (*GL::uniform4i) (location, x, y, z, w);
+    return true;
+}
+
 GLuint GLProgram::attributeLocation (const char *name)
 {
     return (*GL::getAttribLocation) (priv->program, name);
diff --git a/plugins/opengl/src/screen.cpp b/plugins/opengl/src/screen.cpp
index 51300f1..2605e02 100644
--- a/plugins/opengl/src/screen.cpp
+++ b/plugins/opengl/src/screen.cpp
@@ -88,8 +88,11 @@ namespace GL {
     GLUniform1fProc          uniform1f = NULL;
     GLUniform1iProc          uniform1i = NULL;
     GLUniform2fProc          uniform2f = NULL;
+    GLUniform2iProc          uniform2i = NULL;
     GLUniform3fProc          uniform3f = NULL;
+    GLUniform3iProc          uniform3i = NULL;
     GLUniform4fProc          uniform4f = NULL;
+    GLUniform4iProc          uniform4i = NULL;
     GLUniformMatrix4fvProc   uniformMatrix4fv = NULL;
     GLGetAttribLocationProc  getAttribLocation = NULL;
 
@@ -297,8 +300,11 @@ GLScreen::GLScreen (CompScreen *s) :
     GL::uniform1f = glUniform1f;
     GL::uniform1i = glUniform1i;
     GL::uniform2f = glUniform2f;
+    GL::uniform2i = glUniform2i;
     GL::uniform3f = glUniform3f;
+    GL::uniform3i = glUniform3i;
     GL::uniform4f = glUniform4f;
+    GL::uniform4i = glUniform4i;
     GL::uniformMatrix4fv = glUniformMatrix4fv;
     GL::getAttribLocation = glGetAttribLocation;
 
@@ -614,8 +620,11 @@ GLScreen::GLScreen (CompScreen *s) :
     GL::uniform1f = (GL::GLUniform1fProc) getProcAddress ("glUniform1f");
     GL::uniform1i = (GL::GLUniform1iProc) getProcAddress ("glUniform1i");
     GL::uniform2f = (GL::GLUniform2fProc) getProcAddress ("glUniform2f");
+    GL::uniform2i = (GL::GLUniform2iProc) getProcAddress ("glUniform2i");
     GL::uniform3f = (GL::GLUniform3fProc) getProcAddress ("glUniform3f");
+    GL::uniform3i = (GL::GLUniform3iProc) getProcAddress ("glUniform3i");
     GL::uniform4f = (GL::GLUniform4fProc) getProcAddress ("glUniform4f");
+    GL::uniform4i = (GL::GLUniform4iProc) getProcAddress ("glUniform4i");
     GL::uniformMatrix4fv = (GL::GLUniformMatrix4fvProc) getProcAddress
("glUniformMatrix4fv");
     GL::getAttribLocation = (GL::GLGetAttribLocationProc)
getProcAddress ("glGetAttribLocation");
 
-- 
1.7.4.1

_______________________________________________
dev mailing list
[email protected]
http://lists.compiz.org/mailman/listinfo/dev

Reply via email to