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

Reply via email to