summaryrefslogtreecommitdiff
path: root/progs
diff options
context:
space:
mode:
Diffstat (limited to 'progs')
-rw-r--r--progs/demos/fbotexture.c28
-rw-r--r--progs/egl/demo3.c2
-rw-r--r--progs/glsl/multitex.shtest4
-rw-r--r--progs/glsl/shtest.c99
-rw-r--r--progs/util/shaderutil.c33
-rw-r--r--progs/util/shaderutil.h6
-rw-r--r--progs/xdemos/.gitignore1
7 files changed, 150 insertions, 23 deletions
diff --git a/progs/demos/fbotexture.c b/progs/demos/fbotexture.c
index 3b36f755a0..56482663dc 100644
--- a/progs/demos/fbotexture.c
+++ b/progs/demos/fbotexture.c
@@ -498,7 +498,7 @@ SetupFunctionPointers(void)
* Make FBO to render into given texture.
*/
static GLuint
-MakeFBO_RenderTexture(GLuint TexObj)
+MakeFBO_RenderTexture(GLuint texObj)
{
GLuint fb;
GLint sizeFudge = 0;
@@ -507,7 +507,7 @@ MakeFBO_RenderTexture(GLuint TexObj)
glBindFramebuffer_func(GL_FRAMEBUFFER_EXT, fb);
/* Render color to texture */
glFramebufferTexture2D_func(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT,
- TexTarget, TexObj, TextureLevel);
+ TexTarget, texObj, TextureLevel);
if (Use_ARB_fbo) {
/* use a smaller depth buffer to see what happens */
@@ -541,7 +541,7 @@ MakeFBO_RenderTexture(GLuint TexObj)
/* queries */
{
- GLint bits, w, h;
+ GLint bits, w, h, name;
glBindRenderbuffer_func(GL_RENDERBUFFER_EXT, DepthRB);
glGetRenderbufferParameteriv_func(GL_RENDERBUFFER_EXT,
@@ -559,8 +559,28 @@ MakeFBO_RenderTexture(GLuint TexObj)
glGetRenderbufferParameteriv_func(GL_RENDERBUFFER_EXT,
GL_RENDERBUFFER_STENCIL_SIZE_EXT, &bits);
printf("Stencil renderbuffer size = %d bits\n", bits);
- }
+ glGetFramebufferAttachmentParameteriv_func(GL_FRAMEBUFFER_EXT,
+ GL_COLOR_ATTACHMENT0,
+ GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT,
+ &name);
+ printf("Render to texture name: %d\n", texObj);
+ printf("Color attachment[0] name: %d\n", name);
+ assert(texObj == name);
+
+ glGetFramebufferAttachmentParameteriv_func(GL_FRAMEBUFFER_EXT,
+ GL_STENCIL_ATTACHMENT,
+ GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT,
+ &name);
+ printf("Stencil attachment name: %d\n", name);
+
+ glGetFramebufferAttachmentParameteriv_func(GL_FRAMEBUFFER_EXT,
+ GL_DEPTH_ATTACHMENT,
+ GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT,
+ &name);
+ printf("Depth attachment name: %d\n", name);
+
+ }
/* bind the regular framebuffer */
glBindFramebuffer_func(GL_FRAMEBUFFER_EXT, 0);
diff --git a/progs/egl/demo3.c b/progs/egl/demo3.c
index a6096a257e..daab62d173 100644
--- a/progs/egl/demo3.c
+++ b/progs/egl/demo3.c
@@ -551,7 +551,7 @@ write_ppm(const char *filename, const GLubyte *buffer, int width, int height)
}
}
-#include "../src/egl/main/egldisplay.h"
+#include "../../src/egl/main/egldisplay.h"
typedef struct fb_display
{
diff --git a/progs/glsl/multitex.shtest b/progs/glsl/multitex.shtest
index 5be45f6c7c..4b7c3fd4a5 100644
--- a/progs/glsl/multitex.shtest
+++ b/progs/glsl/multitex.shtest
@@ -1,6 +1,6 @@
vs multitex.vert
fs multitex.frag
-texture 0 ../images/tile.rgb
-texture 1 ../images/tree2.rgba
+texture 0 2D ../images/tile.rgb
+texture 1 2D ../images/tree2.rgba
uniform tex1 GL_SAMPLER_2D 0
uniform tex2 GL_SAMPLER_2D 1
diff --git a/progs/glsl/shtest.c b/progs/glsl/shtest.c
index 2622af1313..fa477d9eeb 100644
--- a/progs/glsl/shtest.c
+++ b/progs/glsl/shtest.c
@@ -21,6 +21,9 @@
* fs shader.frag
* uniform pi 3.14159
* uniform v1 1.0 0.5 0.2 0.3
+ * texture 0 2D texture0.rgb
+ * texture 1 CUBE texture1.rgb
+ * texture 2 RECT texture2.rgb
*
*/
@@ -255,7 +258,7 @@ Redisplay(void)
glMatrixMode(GL_MODELVIEW);
if (Object == SPHERE) {
- Sphere(2.0, 20, 10);
+ Sphere(2.5, 20, 10);
}
else if (Object == CUBE) {
Cube(2.0);
@@ -376,13 +379,14 @@ InitUniforms(const struct config_file *conf,
static void
-LoadTexture(GLint unit, const char *texFileName)
+LoadTexture(GLint unit, GLenum target, const char *texFileName)
{
GLint imgWidth, imgHeight;
GLenum imgFormat;
GLubyte *image = NULL;
GLuint tex;
GLenum filter = GL_LINEAR;
+ GLenum objTarget;
image = LoadRGBImage(texFileName, &imgWidth, &imgHeight, &imgFormat);
if (!image) {
@@ -390,21 +394,41 @@ LoadTexture(GLint unit, const char *texFileName)
exit(1);
}
- printf("Load Texture: unit %d: %s %d x %d\n",
- unit, texFileName, imgWidth, imgHeight);
+ printf("Load Texture: unit %d, target 0x%x: %s %d x %d\n",
+ unit, target, texFileName, imgWidth, imgHeight);
+
+ if (target >= GL_TEXTURE_CUBE_MAP_POSITIVE_X &&
+ target <= GL_TEXTURE_CUBE_MAP_NEGATIVE_Z) {
+ objTarget = GL_TEXTURE_CUBE_MAP;
+ }
+ else {
+ objTarget = target;
+ }
glActiveTexture(GL_TEXTURE0 + unit);
glGenTextures(1, &tex);
- glBindTexture(GL_TEXTURE_2D, tex);
+ glBindTexture(objTarget, tex);
+
+ if (target == GL_TEXTURE_3D) {
+ /* depth=1 */
+ gluBuild3DMipmaps(target, 4, imgWidth, imgHeight, 1,
+ imgFormat, GL_UNSIGNED_BYTE, image);
+ }
+ else if (target == GL_TEXTURE_1D) {
+ gluBuild1DMipmaps(target, 4, imgWidth,
+ imgFormat, GL_UNSIGNED_BYTE, image);
+ }
+ else {
+ gluBuild2DMipmaps(target, 4, imgWidth, imgHeight,
+ imgFormat, GL_UNSIGNED_BYTE, image);
+ }
- gluBuild2DMipmaps(GL_TEXTURE_2D, 4, imgWidth, imgHeight,
- imgFormat, GL_UNSIGNED_BYTE, image);
free(image);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, filter);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, filter);
+ glTexParameteri(objTarget, GL_TEXTURE_WRAP_S, GL_REPEAT);
+ glTexParameteri(objTarget, GL_TEXTURE_WRAP_T, GL_REPEAT);
+ glTexParameteri(objTarget, GL_TEXTURE_MIN_FILTER, filter);
+ glTexParameteri(objTarget, GL_TEXTURE_MAG_FILTER, filter);
}
@@ -423,7 +447,11 @@ TypeFromName(const char *n)
{ "GL_INT_VEC2", GL_INT_VEC2 },
{ "GL_INT_VEC3", GL_INT_VEC3 },
{ "GL_INT_VEC4", GL_INT_VEC4 },
+ { "GL_SAMPLER_1D", GL_SAMPLER_1D },
{ "GL_SAMPLER_2D", GL_SAMPLER_2D },
+ { "GL_SAMPLER_3D", GL_SAMPLER_3D },
+ { "GL_SAMPLER_CUBE", GL_SAMPLER_CUBE },
+ { "GL_SAMPLER_2D_RECT", GL_SAMPLER_2D_RECT_ARB },
{ NULL, 0 }
};
GLuint i;
@@ -468,11 +496,40 @@ ReadConfigFile(const char *filename, struct config_file *conf)
FragShaderFile[strlen(FragShaderFile) - 1] = 0;
}
else if (strncmp(line, "texture ", 8) == 0) {
- char texFileName[100];
+ char target[100], texFileName[100];
int unit, k;
- k = sscanf(line + 8, "%d %s", &unit, texFileName);
- assert(k == 2);
- LoadTexture(unit, texFileName);
+ k = sscanf(line + 8, "%d %s %s", &unit, target, texFileName);
+ assert(k == 3 || k == 8);
+ if (strcmp(target, "CUBE") == 0) {
+ char texFileNames[6][100];
+ k = sscanf(line + 8, "%d %s %s %s %s %s %s %s",
+ &unit, target,
+ texFileNames[0],
+ texFileNames[1],
+ texFileNames[2],
+ texFileNames[3],
+ texFileNames[4],
+ texFileNames[5]);
+ LoadTexture(unit, GL_TEXTURE_CUBE_MAP_POSITIVE_X, texFileNames[0]);
+ LoadTexture(unit, GL_TEXTURE_CUBE_MAP_NEGATIVE_X, texFileNames[1]);
+ LoadTexture(unit, GL_TEXTURE_CUBE_MAP_POSITIVE_Y, texFileNames[2]);
+ LoadTexture(unit, GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, texFileNames[3]);
+ LoadTexture(unit, GL_TEXTURE_CUBE_MAP_POSITIVE_Z, texFileNames[4]);
+ LoadTexture(unit, GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, texFileNames[5]);
+ }
+ else if (!strcmp(target, "2D")) {
+ LoadTexture(unit, GL_TEXTURE_2D, texFileName);
+ }
+ else if (!strcmp(target, "3D")) {
+ LoadTexture(unit, GL_TEXTURE_3D, texFileName);
+ }
+ else if (!strcmp(target, "RECT")) {
+ LoadTexture(unit, GL_TEXTURE_RECTANGLE_ARB, texFileName);
+ }
+ else {
+ printf("Bad texture target: %s\n", target);
+ exit(1);
+ }
}
else if (strncmp(line, "uniform ", 8) == 0) {
char name[1000], typeName[100];
@@ -509,7 +566,9 @@ ReadConfigFile(const char *filename, struct config_file *conf)
static void
Init(void)
{
+ GLdouble vertTime, fragTime, linkTime;
struct config_file config;
+
memset(&config, 0, sizeof(config));
if (ConfigFile)
@@ -529,8 +588,16 @@ Init(void)
exit(1);
vertShader = CompileShaderFile(GL_VERTEX_SHADER, VertShaderFile);
+ vertTime = GetShaderCompileTime();
fragShader = CompileShaderFile(GL_FRAGMENT_SHADER, FragShaderFile);
+ fragTime = GetShaderCompileTime();
+
Program = LinkShaders(vertShader, fragShader);
+ linkTime = GetShaderLinkTime();
+
+ printf("Time to compile vertex shader: %fs\n", vertTime);
+ printf("Time to compile fragment shader: %fs\n", fragTime);
+ printf("Time to link shaders: %fs\n", linkTime);
glUseProgram(Program);
@@ -611,8 +678,8 @@ ParseOptions(int argc, char *argv[])
int
main(int argc, char *argv[])
{
- glutInit(&argc, argv);
glutInitWindowSize(400, 400);
+ glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
win = glutCreateWindow(argv[0]);
glewInit();
diff --git a/progs/util/shaderutil.c b/progs/util/shaderutil.c
index 489e71cc30..c58c249831 100644
--- a/progs/util/shaderutil.c
+++ b/progs/util/shaderutil.c
@@ -14,6 +14,12 @@
#include <GL/glut.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
ShadersSupported(void)
@@ -37,10 +43,17 @@ CompileShaderText(GLenum shaderType, const char *text)
{
GLuint shader;
GLint stat;
+ GLdouble t0, t1;
shader = glCreateShader(shaderType);
glShaderSource(shader, 1, (const GLchar **) &text, NULL);
+
+ t0 = glutGet(GLUT_ELAPSED_TIME) * 0.001;
glCompileShader(shader);
+ t1 = glutGet(GLUT_ELAPSED_TIME) * 0.001;
+
+ CompileTime = t1 - t0;
+
glGetShaderiv(shader, GL_COMPILE_STATUS, &stat);
if (!stat) {
GLchar log[1000];
@@ -95,6 +108,7 @@ GLuint
LinkShaders(GLuint vertShader, GLuint fragShader)
{
GLuint program = glCreateProgram();
+ GLdouble t0, t1;
assert(vertShader || fragShader);
@@ -102,7 +116,12 @@ LinkShaders(GLuint vertShader, GLuint fragShader)
glAttachShader(program, fragShader);
if (vertShader)
glAttachShader(program, vertShader);
+
+ t0 = glutGet(GLUT_ELAPSED_TIME) * 0.001;
glLinkProgram(program);
+ t1 = glutGet(GLUT_ELAPSED_TIME) * 0.001;
+
+ LinkTime = t1 - t0;
/* check link */
{
@@ -121,6 +140,20 @@ LinkShaders(GLuint vertShader, GLuint fragShader)
}
+GLdouble
+GetShaderCompileTime(void)
+{
+ return CompileTime;
+}
+
+
+GLdouble
+GetShaderLinkTime(void)
+{
+ return LinkTime;
+}
+
+
void
SetUniformValues(GLuint program, struct uniform_info uniforms[])
{
diff --git a/progs/util/shaderutil.h b/progs/util/shaderutil.h
index 0a6be02675..91c0d4094f 100644
--- a/progs/util/shaderutil.h
+++ b/progs/util/shaderutil.h
@@ -36,6 +36,12 @@ CompileShaderFile(GLenum shaderType, const char *filename);
extern GLuint
LinkShaders(GLuint vertShader, GLuint fragShader);
+extern GLdouble
+GetShaderCompileTime(void);
+
+extern GLdouble
+GetShaderLinkTime(void);
+
extern void
SetUniformValues(GLuint program, struct uniform_info uniforms[]);
diff --git a/progs/xdemos/.gitignore b/progs/xdemos/.gitignore
index 92446dd9fc..1b9b3a87c0 100644
--- a/progs/xdemos/.gitignore
+++ b/progs/xdemos/.gitignore
@@ -13,6 +13,7 @@ glxpixmap
glxsnoop
glxswapcontrol
manywin
+multictx
offset
overlay
pbdemo