+#define crazy_draw(tex) \
+ for (int _i = 0; ({ \
+ if (_i == 0) { \
+ /* Clear alpha buffer */ \
+ glBindTexture(GL_TEXTURE_2D, tex); \
+ glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); \
+ glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); \
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER); \
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER); \
+ glBlendFuncSeparate(GL_ZERO, GL_ONE, GL_ONE, GL_ZERO); \
+ } else if (_i == 1) { \
+ /* Draw pixels */ \
+ glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); \
+ glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); \
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); \
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); \
+ glBlendFuncSeparate(GL_DST_ALPHA, GL_ONE_MINUS_DST_ALPHA, GL_ZERO, GL_ZERO); \
+ } else { \
+ glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA); \
+ } \
+ }), _i < 2; _i++)
+