#include "extfuncs.h"
+#define TEXTURE 0
+
static GLint CoordAttrib = 0;
static char *FragProgFile = NULL;
static GLuint SphereList, RectList, CurList;
static GLint win = 0;
-static GLboolean anim = GL_FALSE;
+static GLboolean anim = GL_TRUE;
static GLboolean wire = GL_FALSE;
static GLboolean pixelLight = GL_TRUE;
static void
normalize(GLfloat *dst, const GLfloat *src)
{
- GLfloat len = sqrtf(src[0] * src[0] + src[1] * src[1] + src[2] * src[2]);
+ GLfloat len = sqrt(src[0] * src[0] + src[1] * src[1] + src[2] * src[2]);
dst[0] = src[0] / len;
dst[1] = src[1] / len;
dst[2] = src[2] / len;
GLfloat fps = frames / seconds;
printf("%d frames in %6.3f seconds = %6.3f FPS\n",
frames, seconds, fps);
+ fflush(stdout);
t0 = t;
frames = 0;
}
TestFunctions(void)
{
printf("Error 0x%x at line %d\n", glGetError(), __LINE__);
- {
- GLfloat pos[3];
- printf("Error 0x%x at line %d\n", glGetError(), __LINE__);
- printf("Light pos %g %g %g\n", pos[0], pos[1], pos[2]);
- }
-
-
- {
- GLfloat m[16], result[16];
- GLint mPos;
- int i;
-
- for (i = 0; i < 16; i++)
- m[i] = (float) i;
-
- mPos = glGetUniformLocation_func(program, "m");
- printf("Error 0x%x at line %d\n", glGetError(), __LINE__);
- glUniformMatrix4fv_func(mPos, 1, GL_FALSE, m);
- printf("Error 0x%x at line %d\n", glGetError(), __LINE__);
-
- glGetUniformfv_func(program, mPos, result);
- printf("Error 0x%x at line %d\n", glGetError(), __LINE__);
-
- for (i = 0; i < 16; i++) {
- printf("%8g %8g\n", m[i], result[i]);
- }
- }
assert(glIsProgram_func(program));
assert(glIsShader_func(fragShader));
glGetProgramInfoLog_func(program, 1000, &len, log);
printf("Program Info Log: %s\n", log);
}
+
+ /* active uniforms */
+ {
+ GLint n, max, i;
+ glGetProgramiv_func(program, GL_ACTIVE_UNIFORMS, &n);
+ glGetProgramiv_func(program, GL_ACTIVE_UNIFORM_MAX_LENGTH, &max);
+ printf("Num uniforms: %d Max name length: %d\n", n, max);
+ for (i = 0; i < n; i++) {
+ GLint size, len;
+ GLenum type;
+ char name[100];
+ glGetActiveUniform_func(program, i, 100, &len, &size, &type, name);
+ printf(" %d: %s nameLen=%d size=%d type=0x%x\n",
+ i, name, len, size, type);
+ }
+ }
}
+#if TEXTURE
static void
MakeTexture(void)
{
-#define SZ0 128
-#define SZ1 64
+#define SZ0 64
+#define SZ1 32
GLubyte image0[SZ0][SZ0][SZ0][4];
GLubyte image1[SZ1][SZ1][SZ1][4];
GLuint i, j, k;
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
}
+#endif
static void
version = (const char *) glGetString(GL_VERSION);
if (version[0] != '2' || version[1] != '.') {
- printf("Warning: this program expects OpenGL 2.0\n");
- /*exit(1);*/
+ printf("This program requires OpenGL 2.x, found %s\n", version);
+ exit(1);
}
GetExtensionFuncs();
glUniform4fv_func(uDiffuse, 1, diffuse);
glUniform4fv_func(uSpecular, 1, specular);
- assert(glGetError() == 0);
+ /* assert(glGetError() == 0);*/
+#if TEXTURE
glUniform1i_func(uTexture, 2); /* use texture unit 2 */
+#endif
/*assert(glGetError() == 0);*/
if (CoordAttrib) {
CurList = SphereList;
+#if TEXTURE
MakeTexture();
+#endif
printf("GL_RENDERER = %s\n",(const char *) glGetString(GL_RENDERER));
printf("Press p to toggle between per-pixel and per-vertex lighting\n");
#if 0
TestFunctions();
+#else
+ (void) TestFunctions;
#endif
}
int i;
for (i = 1; i < argc; i++) {
if (strcmp(argv[i], "-fs") == 0) {
- FragProgFile = argv[i+1];
+ FragProgFile = argv[++i];
}
else if (strcmp(argv[i], "-vs") == 0) {
- VertProgFile = argv[i+1];
+ VertProgFile = argv[++i];
+ }
+ else {
+ fprintf(stderr, "unknown option %s\n", argv[i]);
+ break;
}
}
}
{
glutInit(&argc, argv);
glutInitWindowPosition( 0, 0);
- glutInitWindowSize(100, 100);
+ glutInitWindowSize(200, 200);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
win = glutCreateWindow(argv[0]);
glutReshapeFunc(Reshape);