points \
pointcoord \
samplers \
+ samplers_array \
skinning \
texdemo1 \
toyball \
samplers: samplers.o readtex.o shaderutil.o
$(APP_CC) -I$(INCDIR) $(CFLAGS) $(LDFLAGS) samplers.o readtex.o shaderutil.o $(LIBS) -o $@
+samplers_array.o: samplers.c readtex.h extfuncs.h shaderutil.h
+ $(APP_CC) -c -DSAMPLERS_ARRAY -I$(INCDIR) $(CFLAGS) samplers.c -o samplers_array.o
+
+samplers_array: samplers_array.o readtex.o shaderutil.o
+ $(APP_CC) -I$(INCDIR) $(CFLAGS) $(LDFLAGS) samplers_array.o readtex.o shaderutil.o $(LIBS) -o $@
skinning.o: skinning.c readtex.h extfuncs.h shaderutil.h
$(APP_CC) -c -I$(INCDIR) $(CFLAGS) skinning.c
int s;
p += sprintf(p, "// Generated fragment shader:\n");
+#ifndef SAMPLERS_ARRAY
for (s = 0; s < numSamplers; s++) {
p += sprintf(p, "uniform sampler2D tex%d;\n", s);
}
+#else
+ p += sprintf(p, "uniform sampler2D tex[%d];\n", numSamplers);
+#endif
p += sprintf(p, "void main()\n");
p += sprintf(p, "{\n");
p += sprintf(p, " vec4 color = vec4(0.0);\n");
for (s = 0; s < numSamplers; s++) {
+#ifndef SAMPLERS_ARRAY
p += sprintf(p, " color += texture2D(tex%d, gl_TexCoord[0].xy);\n", s);
+#else
+ p += sprintf(p, " color += texture2D(tex[%d], gl_TexCoord[0].xy);\n", s);
+#endif
}
p += sprintf(p, " gl_FragColor = color;\n");
p += sprintf(p, "}\n");
char uname[10];
GLint loc;
+#ifndef SAMPLERS_ARRAY
sprintf(uname, "tex%d", s);
+#else
+ sprintf(uname, "tex[%d]", s);
+#endif
loc = glGetUniformLocation_func(Program, uname);
assert(loc >= 0);