>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