Andrei Alexandrescu wrote:
Chris Nicholson-Sauls wrote:
downs wrote:
Here is a funny consequence of this amusing fact:
if you overload opAssign in a struct with lazy T[] dgs..., you can
achieve the following syntax
WithFlag(GL_BLEND, true) = WithDepthMask(false) = tex.With =
Quads = {
foreach (i, q; qa) {
float f = 1f*i / qa.length; Color(1f-f, f, 1f);
TexCoord(0f, 0f); Vertex(q.points[0]);
TexCoord(1f, 0f); Vertex(q.points[1]);
TexCoord(1f, 1f); Vertex(q.points[3]);
TexCoord(0f, 1f); Vertex(q.points[2]);
}
};
That's... just beautiful...
-- Chris Nicholson-Sauls
Not getting it... could someone please explain?
Andrei
From what I get, he has something like this:
struct WithFlag(int OP, bool enable) {
static void opAssign(T)(lazy T next) {
static if(enable) glEnable(OP);
else glDisable(OP);
next();
}
}
struct WithDepthMask(bool enable) {
static void opAssign(T)(lazy T next) {
glDepthMask(enable);
next();
}
}
struct Tex {
void opAssign(T)(lazy T next) {
glBindTexture(_tex);
next();
}
}
struct Quads {
static void opAssign(T)(lazy T commands) {
glBegin(GL_QUADS);
commands();
glEnd();
}
}
I don't know if thats his exact code, but from what I can remember of gl
from memory it should look like this.
Jeremie