progs/util: added GetShaderCompile/LinkTime() to get compilation/link times

This commit is contained in:
Brian Paul
2009-08-20 14:29:26 -06:00
parent 8a883d1657
commit f300db379e
2 changed files with 39 additions and 0 deletions

View File

@@ -14,6 +14,12 @@
#include <GL/glut.h> #include <GL/glut.h>
#include "shaderutil.h" #include "shaderutil.h"
/** time to compile previous shader */
static GLdouble CompileTime = 0.0;
/** time to linke previous program */
static GLdouble LinkTime = 0.0;
GLboolean GLboolean
ShadersSupported(void) ShadersSupported(void)
@@ -37,10 +43,17 @@ CompileShaderText(GLenum shaderType, const char *text)
{ {
GLuint shader; GLuint shader;
GLint stat; GLint stat;
GLdouble t0, t1;
shader = glCreateShader(shaderType); shader = glCreateShader(shaderType);
glShaderSource(shader, 1, (const GLchar **) &text, NULL); glShaderSource(shader, 1, (const GLchar **) &text, NULL);
t0 = glutGet(GLUT_ELAPSED_TIME) * 0.001;
glCompileShader(shader); glCompileShader(shader);
t1 = glutGet(GLUT_ELAPSED_TIME) * 0.001;
CompileTime = t1 - t0;
glGetShaderiv(shader, GL_COMPILE_STATUS, &stat); glGetShaderiv(shader, GL_COMPILE_STATUS, &stat);
if (!stat) { if (!stat) {
GLchar log[1000]; GLchar log[1000];
@@ -95,6 +108,7 @@ GLuint
LinkShaders(GLuint vertShader, GLuint fragShader) LinkShaders(GLuint vertShader, GLuint fragShader)
{ {
GLuint program = glCreateProgram(); GLuint program = glCreateProgram();
GLdouble t0, t1;
assert(vertShader || fragShader); assert(vertShader || fragShader);
@@ -102,7 +116,12 @@ LinkShaders(GLuint vertShader, GLuint fragShader)
glAttachShader(program, fragShader); glAttachShader(program, fragShader);
if (vertShader) if (vertShader)
glAttachShader(program, vertShader); glAttachShader(program, vertShader);
t0 = glutGet(GLUT_ELAPSED_TIME) * 0.001;
glLinkProgram(program); glLinkProgram(program);
t1 = glutGet(GLUT_ELAPSED_TIME) * 0.001;
LinkTime = t1 - t0;
/* check link */ /* check link */
{ {
@@ -121,6 +140,20 @@ LinkShaders(GLuint vertShader, GLuint fragShader)
} }
GLdouble
GetShaderCompileTime(void)
{
return CompileTime;
}
GLdouble
GetShaderLinkTime(void)
{
return LinkTime;
}
void void
SetUniformValues(GLuint program, struct uniform_info uniforms[]) SetUniformValues(GLuint program, struct uniform_info uniforms[])
{ {

View File

@@ -36,6 +36,12 @@ CompileShaderFile(GLenum shaderType, const char *filename);
extern GLuint extern GLuint
LinkShaders(GLuint vertShader, GLuint fragShader); LinkShaders(GLuint vertShader, GLuint fragShader);
extern GLdouble
GetShaderCompileTime(void);
extern GLdouble
GetShaderLinkTime(void);
extern void extern void
SetUniformValues(GLuint program, struct uniform_info uniforms[]); SetUniformValues(GLuint program, struct uniform_info uniforms[]);