]> git.tdb.fi Git - libs/gl.git/commitdiff
Make Material::apply const
authorMikko Rasa <tdb@tdb.fi>
Wed, 10 Oct 2007 06:58:39 +0000 (06:58 +0000)
committerMikko Rasa <tdb@tdb.fi>
Wed, 10 Oct 2007 06:58:39 +0000 (06:58 +0000)
Allow creating meshes runtime
Add Program::uniform4
Add arithmetic operators for Color
Use glXGetProcAddressARB to hopefully work on olfder glX implementations

source/batch.cpp
source/batch.h
source/color.h
source/extension.cpp
source/material.cpp
source/material.h
source/mesh.cpp
source/mesh.h
source/program.cpp
source/program.h

index d650fda8b6c3576cf3605d0f632f4d0faf17200f..df4e2fb828e0102989abd2ddacb069f59a33d3a9 100644 (file)
@@ -19,7 +19,7 @@ Batch::Batch(PrimitiveType t):
        max_index(0)
 { }
 
-void Batch::append(uint i)
+Batch &Batch::append(uint i)
 {
        if(indices.empty())
                min_index=max_index=i;
@@ -29,6 +29,8 @@ void Batch::append(uint i)
                max_index=max(max_index, i);
        }
        indices.push_back(i);
+
+       return *this;
 }
 
 void Batch::append(const vector<uint> &ind)
index aace6528e2cfe2a386338f098ea0dff75f880430..237995dcd7698b60061836336524e9ce8181cdc0 100644 (file)
@@ -31,7 +31,7 @@ public:
        };
 
        Batch(PrimitiveType t);
-       void append(uint);
+       Batch &append(uint);
        void append(const std::vector<uint> &);
        void draw() const;
 private:
index 0fc303a2bfc7afc2d0607d1923d6d5219d249ee6..d3710a9d64c745fb85d87a4216222854e4c08730 100644 (file)
@@ -21,6 +21,10 @@ struct Color
        Color(float v): r(v), g(v), b(v), a(1) { }
        Color(float r_, float g_, float b_): r(r_), g(g_), b(b_), a(1) { }
        Color(float r_, float g_, float b_, float a_): r(r_), g(g_), b(b_), a(a_) { }
+       Color operator*(float f) const { return Color(r*f, g*f, b*f, a); }
+       Color operator+(const Color &c) const { return Color(r+c.r, g+c.g, b+c.g, 1-(1-a)*(1-c.a)); }
+       bool operator==(const Color &c) const { return (r==c.r && b==c.b && g==c.g && a==c.a); }
+       bool operator!=(const Color &c) const { return !operator==(c); }
 };
 
 } // namespace GL
index 1a603defe0d24bbf6249b576bda1a86eceab0f48..2d57d1d12224155e8b9ade1f3e488c2d35c8e7c7 100644 (file)
@@ -56,7 +56,7 @@ void require_extension(const string &ext)
 ExtFunc *get_proc_address(const string &name)
 {
 #ifndef WIN32
-       return glXGetProcAddress(reinterpret_cast<const GLubyte *>(name.c_str()));
+       return glXGetProcAddressARB(reinterpret_cast<const GLubyte *>(name.c_str()));
 #endif
 }
 
index 25c21ff21988b3aed6a00419cb4dcc9ec2450a9f..58cd15cb8e122169803ce5015be54681df948173 100644 (file)
@@ -43,7 +43,7 @@ void Material::set_shininess(float s)
        shininess=s;
 }
 
-void Material::apply()
+void Material::apply() const
 {
        glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, &ambient.r);
        glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, &diffuse.r);
index b2ea995ef66a083d265eccde7feef0e5e9997c15..babf26763b887980eb66bb8dbbb3191eb2e50d4a 100644 (file)
@@ -29,7 +29,7 @@ public:
        void set_specular(const Color &s);
        void set_emission(const Color &e);
        void set_shininess(float s);
-       void apply();
+       void apply() const;
 };
 
 } // namespace GL
index 4e671e037e6352e3617c1c474b7e8ecb02eac454..8d039977e0ff2532992adce536a9a73a20f2256f 100644 (file)
@@ -18,6 +18,17 @@ Mesh::Mesh():
        vertices.use_vertex_buffer();
 }
 
+Mesh::Mesh(VertexFormat f):
+       vertices(f)
+{
+       vertices.use_vertex_buffer();
+}
+
+void Mesh::add_batch(const Batch &b)
+{
+       batches.push_back(b);
+}
+
 void Mesh::draw() const
 {
        vertices.apply();
index 648fb72c11dc26849ffd98ce322dcf3d1cb3b730..7c80d32263d0b45f7d1bf46c62b33fe992b3f632 100644 (file)
@@ -30,6 +30,9 @@ public:
        };
 
        Mesh();
+       Mesh(VertexFormat f);
+       RefPtr<VertexArrayBuilder> modify_vertices() { return vertices.modify(); }
+       void add_batch(const Batch &b);
        void draw() const;
 private:
        VertexArray vertices;
index f34133faf767b1e905f7706e1caae938f606c6a4..f0fffb1f3a82dc98f28d7dd24dfd53adb496cbb0 100644 (file)
@@ -144,6 +144,11 @@ void Program::uniform(int i, float x, float y, float z, float w)
        glUniform4fARB(i, x, y, z, w);
 }
 
+void Program::uniform4(int i, const float *v)
+{
+       glUniform4fvARB(i, 1, v);
+}
+
 void Program::uniform_matrix4(int i, const float *v)
 {
        glUniformMatrix4fvARB(i, 1, false, v);
index f007fb3a5d3636b72820ffb9b6656e7860172977..af249edefa2066c29bcf23e7c6f643ddd7d6c95c 100644 (file)
@@ -64,6 +64,7 @@ public:
        void uniform(int, float, float);
        void uniform(int, float, float, float);
        void uniform(int, float, float, float, float);
+       void uniform4(int, const float *);
        void uniform_matrix4(int, const float *);
 
        static void unbind();