{ vertex(Vector4(x, y, z, w)); }
void vertex(const Vector3 &v)
- { vertex(Vector4(v.x, v.y, v.z, 1)); }
+ { vertex(compose(v, 1.0f)); }
void vertex(const Vector4 &v)
{ vertex_(mtx*v); }
{ normal(Vector3(x, y, z)); }
void normal(const Vector3 &n)
- { attrib(get_attribute_semantic(NORMAL3), mtx*Vector4(n.x, n.y, n.z, 0)); }
+ { attrib(get_attribute_semantic(NORMAL3), mtx*compose(n, 0.0f)); }
void tangent(float x, float y, float z)
{ tangent(Vector3(x, y, z)); }
void tangent(const Vector3 &t)
- { attrib(get_attribute_semantic(TANGENT3), mtx*Vector4(t.x, t.y, t.z, 0)); }
+ { attrib(get_attribute_semantic(TANGENT3), mtx*compose(t, 0.0f)); }
void texcoord(float s)
{ texcoord(s, 0, 0, 1); }
Geometry::Angle<float> a = Geometry::Angle<float>::from_turns(d);
sample_points[i] = Vector3(cos(a)*r, sin(a)*r, z)*(0.1f+0.9f*d*d);
}
- shdata.uniform3_array("sample_points", n, &sample_points[0].x);
+ shdata.uniform3_array("sample_points", n, &sample_points[0][0]);
shdata.uniform("n_samples", static_cast<int>(n));
}
void DirectionalLight::update_shader_data(ProgramData &shdata, const string &base) const
{
shdata.uniform(base+".type", 1);
- shdata.uniform(base+".position", -direction.x, -direction.y, -direction.z, 0.0f);
+ shdata.uniform(base+".position", compose(-direction, 0.0f));
shdata.uniform(base+".color", color.r*transmittance.r, color.g*transmittance.g, color.b*transmittance.b);
shdata.uniform(base+".attenuation", 1.0f, 0.0f, 0.0f);
}
void PointLight::update_shader_data(ProgramData &shdata, const string &base) const
{
shdata.uniform(base+".type", 2);
- shdata.uniform(base+".position", position.x, position.y, position.z, 1.0f);
+ shdata.uniform(base+".position", compose(position, 1.0f));
shdata.uniform(base+".color", color.r, color.g, color.b);
shdata.uniform3(base+".attenuation", attenuation);
}
template<typename T, unsigned N>
void ProgramData::uniform(Tag tag, const LinAl::Vector<T, N> &v)
-{ uniform(tag, TypeTraits<LinAl::Vector<T, N>>::type, 1, &v.x); }
+{ uniform(tag, TypeTraits<LinAl::Vector<T, N>>::type, 1, &v[0]); }
template<typename T, unsigned R, unsigned C>
void ProgramData::uniform(Tag tag, const LinAl::Matrix<T, R, C> &v)
template<typename T, unsigned N>
void ProgramData::uniform_array(Tag tag, unsigned n, const LinAl::Vector<T, N> *v)
-{ uniform(tag, TypeTraits<LinAl::Vector<T, N>>::type, n, &v[0].x); }
+{ uniform(tag, TypeTraits<LinAl::Vector<T, N>>::type, n, &v[0][0]); }
template<typename T, unsigned R, unsigned C>
void ProgramData::uniform_array(Tag tag, unsigned n, const LinAl::Matrix<T, R, C> *v)
Vector3 Camera::project(const Vector3 &p) const
{
- return project(Vector4(p.x, p.y, p.z, 1.0));
+ return project(compose(p, 1.0f));
}
Vector4 Camera::unproject(const Vector4 &p) const
Vector3 Camera::unproject(const Vector3 &p) const
{
- return unproject(Vector4(p.x, p.y, p.z, 1.0f)).slice<3>(0);
+ return unproject(compose(p, 1.0f)).slice<3>(0);
}
bool Camera::is_in_frustum(const Renderable &renderable) const