Currently it was incorrectly stated that for using Math::Matrix or for
example Trade::MeshData it was sufficient to
#include <Matrix.h>
#include <MeshData.h>
which was obviously wrong, as Math/ (nor any other namespace-related
subdirectory) is not on include path. Now it states correctly that a
directory prefix is needed:
#include <Math/Matrix.h>
#include <Trade/MeshData.h>
The same is now fixed for classes in magnum-plugins repository.
Doxygen produces some false-positive warnings for Matrix and Vector
classes, but the generated documentation is fine. Worked around the
warnings by using @copybrief and @copydetails instead of @copydoc.
C++ allows creating arrays with initializer lists shorter than array
length, but for vectors and matrices it will be error prone and hard to
debug. Removed deleted constructor, as it is now catched with
static_assert as well. Also this was possible before (and wasn't catched
with the deleted constructor), now isn't:
Matrix<2, int> a(1, 2);
* Moved the enum and setter function to Camera, made it static, because
it doesn't depend on any particular scene and is camera (rendering)
related.
* Function features() didn't actually work, because setFeature() didn't
update private variable at all. Removed it altogether, because the
values are not stored anywhere, the enum now holds right values
(GL_*), which makes setFeature() function so much simpler.
* Scene class now doesn't have any non-inline functions, removed *.cpp.
* The light didn't catch camera transformation changes, so it was
returning wrong position for most of the time.
* The multiplication was in wrong order, it should be multiplied with
camera matrix from the left.
I need to find an solution for this, because now it is one redundant
matrix*vector multiplication per object per frame again.
This reverts commit 0443bbe286.
Conflicts:
src/Light.cpp
src/Test/LightTest.cpp
It shouldn't be implicit, because then it will be possible to
autoconvert Vector4 from Vector2, which shouldn't be possible at all.
But it shouldn't be explicit either, because this will not be possible
then:
Vector2 vec2;
Vector3 vec3 = {vec2, 1.0};
Vector4 constructor from Vector3 stays the same, because the conversion
is fairly common, nearly always with W set to 1.
The class is now created always on the stack, so the user doesn't have
to delete it explicitly. It's now possible to write less verbose
shader code, instead of three lines before:
Shader* s = Shader::fromFile(Shader::Fragment, "Shader.frag");
attachShader(s);
// ...
delete s;
It's now only one:
attachShader(Shader::fromFile(Shader::Fragment, "Shader.frag"));