public interface JCGLShaderUniformsType
| Modifier and Type | Method and Description |
|---|---|
void |
shaderUniformPutFloat(JCGLProgramUniformType u,
float value)
Upload the value
value to the uniform u. |
void |
shaderUniformPutInteger(JCGLProgramUniformType u,
int value)
Upload the value
value to the uniform u. |
void |
shaderUniformPutMatrix3x3f(JCGLProgramUniformType u,
com.io7m.jtensors.core.unparameterized.matrices.Matrix3x3D value)
Upload the value
value to the uniform u. |
void |
shaderUniformPutMatrix4x4f(JCGLProgramUniformType u,
com.io7m.jtensors.core.unparameterized.matrices.Matrix4x4D value)
Upload the value
value to the uniform u. |
<S,T> void |
shaderUniformPutPMatrix3x3f(JCGLProgramUniformType u,
com.io7m.jtensors.core.parameterized.matrices.PMatrix3x3D<S,T> value)
Upload the value
value to the uniform u. |
<S,T> void |
shaderUniformPutPMatrix4x4f(JCGLProgramUniformType u,
com.io7m.jtensors.core.parameterized.matrices.PMatrix4x4D<S,T> value)
Upload the value
value to the uniform u. |
<T> void |
shaderUniformPutPVector2f(JCGLProgramUniformType u,
com.io7m.jtensors.core.parameterized.vectors.PVector2D<T> value)
Upload the value
value to the uniform u. |
<T> void |
shaderUniformPutPVector2i(JCGLProgramUniformType u,
com.io7m.jtensors.core.parameterized.vectors.PVector2I<T> value)
Upload the value
value to the uniform u. |
<T> void |
shaderUniformPutPVector2ui(JCGLProgramUniformType u,
com.io7m.jtensors.core.parameterized.vectors.PVector2I<T> value)
Upload the value
value to the uniform u. |
<T> void |
shaderUniformPutPVector3f(JCGLProgramUniformType u,
com.io7m.jtensors.core.parameterized.vectors.PVector3D<T> value)
Upload the value
value to the uniform u. |
<T> void |
shaderUniformPutPVector3i(JCGLProgramUniformType u,
com.io7m.jtensors.core.parameterized.vectors.PVector3I<T> value)
Upload the value
value to the uniform u. |
<T> void |
shaderUniformPutPVector3ui(JCGLProgramUniformType u,
com.io7m.jtensors.core.parameterized.vectors.PVector3I<T> value)
Upload the value
value to the uniform u. |
<T> void |
shaderUniformPutPVector4f(JCGLProgramUniformType u,
com.io7m.jtensors.core.parameterized.vectors.PVector4D<T> value)
Upload the value
value to the uniform u. |
<T> void |
shaderUniformPutPVector4i(JCGLProgramUniformType u,
com.io7m.jtensors.core.parameterized.vectors.PVector4I<T> value)
Upload the value
value to the uniform u. |
<T> void |
shaderUniformPutPVector4ui(JCGLProgramUniformType u,
com.io7m.jtensors.core.parameterized.vectors.PVector4I<T> value)
Upload the value
value to the uniform u. |
void |
shaderUniformPutTexture2DUnit(JCGLProgramUniformType u,
JCGLTextureUnitType value)
Upload the value
value to the uniform u. |
void |
shaderUniformPutTextureCubeUnit(JCGLProgramUniformType u,
JCGLTextureUnitType value)
Upload the value
value to the uniform u. |
void |
shaderUniformPutUnsignedInteger(JCGLProgramUniformType u,
int value)
Upload the value
value to the uniform u. |
void |
shaderUniformPutVector2f(JCGLProgramUniformType u,
com.io7m.jtensors.core.unparameterized.vectors.Vector2D value)
Upload the value
value to the uniform u. |
void |
shaderUniformPutVector2i(JCGLProgramUniformType u,
com.io7m.jtensors.core.unparameterized.vectors.Vector2I value)
Upload the value
value to the uniform u. |
void |
shaderUniformPutVector2ui(JCGLProgramUniformType u,
com.io7m.jtensors.core.unparameterized.vectors.Vector2I value)
Upload the value
value to the uniform u. |
void |
shaderUniformPutVector3f(JCGLProgramUniformType u,
com.io7m.jtensors.core.unparameterized.vectors.Vector3D value)
Upload the value
value to the uniform u. |
void |
shaderUniformPutVector3i(JCGLProgramUniformType u,
com.io7m.jtensors.core.unparameterized.vectors.Vector3I value)
Upload the value
value to the uniform u. |
void |
shaderUniformPutVector3ui(JCGLProgramUniformType u,
com.io7m.jtensors.core.unparameterized.vectors.Vector3I value)
Upload the value
value to the uniform u. |
void |
shaderUniformPutVector4f(JCGLProgramUniformType u,
com.io7m.jtensors.core.unparameterized.vectors.Vector4D value)
Upload the value
value to the uniform u. |
void |
shaderUniformPutVector4i(JCGLProgramUniformType u,
com.io7m.jtensors.core.unparameterized.vectors.Vector4I value)
Upload the value
value to the uniform u. |
void |
shaderUniformPutVector4ui(JCGLProgramUniformType u,
com.io7m.jtensors.core.unparameterized.vectors.Vector4I value)
Upload the value
value to the uniform u. |
void |
shaderUniformPutVectorf(JCGLProgramUniformType u,
FloatBuffer value)
Upload the value
value to the uniform u. |
void |
shaderUniformSetActivityCheckingEnabled(boolean enabled)
Enable or disable checking that a program is active when attempting to
assign values to uniforms.
|
void |
shaderUniformSetTypeCheckingEnabled(boolean enabled)
Enable or disable checking of the types of assigned uniforms.
|
void shaderUniformSetTypeCheckingEnabled(boolean enabled)
enabled - true iff type checking should be performed.void shaderUniformSetActivityCheckingEnabled(boolean enabled)
enabled - true iff activity checking should be performed.void shaderUniformPutFloat(JCGLProgramUniformType u, float value) throws JCGLException, JCGLExceptionProgramNotActive, JCGLExceptionProgramTypeError
value to the uniform u.u - The u variable.value - The value.JCGLException - Iff an OpenGL error occurs.JCGLExceptionProgramNotActive - Iff the program to which the uniform
belongs is not active, and program
activity checking is enabledJCGLExceptionProgramTypeError - Iff the program uniform is of the
wrong type, and type checking is
enabledshaderUniformSetTypeCheckingEnabled(boolean),
shaderUniformSetActivityCheckingEnabled(boolean)void shaderUniformPutInteger(JCGLProgramUniformType u, int value) throws JCGLException, JCGLExceptionProgramNotActive, JCGLExceptionProgramTypeError
value to the uniform u.u - The u variable.value - The value.JCGLException - Iff an OpenGL error occurs.JCGLExceptionProgramNotActive - Iff the program to which the uniform
belongs is not active, and program
activity checking is enabledJCGLExceptionProgramTypeError - Iff the program uniform is of the
wrong type, and type checking is
enabledshaderUniformSetTypeCheckingEnabled(boolean),
shaderUniformSetActivityCheckingEnabled(boolean)void shaderUniformPutUnsignedInteger(JCGLProgramUniformType u, int value) throws JCGLException, JCGLExceptionProgramNotActive, JCGLExceptionProgramTypeError
value to the uniform u.u - The u variable.value - The value.JCGLException - Iff an OpenGL error occurs.JCGLExceptionProgramNotActive - Iff the program to which the uniform
belongs is not active, and program
activity checking is enabledJCGLExceptionProgramTypeError - Iff the program uniform is of the
wrong type, and type checking is
enabledshaderUniformSetTypeCheckingEnabled(boolean),
shaderUniformSetActivityCheckingEnabled(boolean)void shaderUniformPutVectorf(JCGLProgramUniformType u, FloatBuffer value) throws JCGLException, JCGLExceptionProgramNotActive, JCGLExceptionProgramTypeError
value to the uniform u.
This method is provided to allow for the use of array-typed uniforms in
GLSL programs, where the type of the array elements are scalar floating
point values, or vector floating point values.u - The u variable.value - The value.JCGLException - Iff an OpenGL error occurs.JCGLExceptionProgramNotActive - Iff the program to which the uniform
belongs is not active, and program
activity checking is enabledJCGLExceptionProgramTypeError - Iff the program uniform is of the
wrong type, and type checking is
enabledshaderUniformSetTypeCheckingEnabled(boolean),
shaderUniformSetActivityCheckingEnabled(boolean)void shaderUniformPutVector2f(JCGLProgramUniformType u, com.io7m.jtensors.core.unparameterized.vectors.Vector2D value) throws JCGLException, JCGLExceptionProgramNotActive, JCGLExceptionProgramTypeError
value to the uniform u.u - The u variable.value - The value.JCGLException - Iff an OpenGL error occurs.JCGLExceptionProgramNotActive - Iff the program to which the uniform
belongs is not active, and program
activity checking is enabledJCGLExceptionProgramTypeError - Iff the program uniform is of the
wrong type, and type checking is
enabledshaderUniformSetTypeCheckingEnabled(boolean),
shaderUniformSetActivityCheckingEnabled(boolean)void shaderUniformPutVector3f(JCGLProgramUniformType u, com.io7m.jtensors.core.unparameterized.vectors.Vector3D value) throws JCGLException, JCGLExceptionProgramNotActive, JCGLExceptionProgramTypeError
value to the uniform u.u - The u variable.value - The value.JCGLException - Iff an OpenGL error occurs.JCGLExceptionProgramNotActive - Iff the program to which the uniform
belongs is not active, and program
activity checking is enabledJCGLExceptionProgramTypeError - Iff the program uniform is of the
wrong type, and type checking is
enabledshaderUniformSetTypeCheckingEnabled(boolean),
shaderUniformSetActivityCheckingEnabled(boolean)void shaderUniformPutVector4f(JCGLProgramUniformType u, com.io7m.jtensors.core.unparameterized.vectors.Vector4D value) throws JCGLException, JCGLExceptionProgramNotActive, JCGLExceptionProgramTypeError
value to the uniform u.u - The u variable.value - The value.JCGLException - Iff an OpenGL error occurs.JCGLExceptionProgramNotActive - Iff the program to which the uniform
belongs is not active, and program
activity checking is enabledJCGLExceptionProgramTypeError - Iff the program uniform is of the
wrong type, and type checking is
enabledshaderUniformSetTypeCheckingEnabled(boolean),
shaderUniformSetActivityCheckingEnabled(boolean)void shaderUniformPutVector2i(JCGLProgramUniformType u, com.io7m.jtensors.core.unparameterized.vectors.Vector2I value) throws JCGLException, JCGLExceptionProgramNotActive, JCGLExceptionProgramTypeError
value to the uniform u.u - The u variable.value - The value.JCGLException - Iff an OpenGL error occurs.JCGLExceptionProgramNotActive - Iff the program to which the uniform
belongs is not active, and program
activity checking is enabledJCGLExceptionProgramTypeError - Iff the program uniform is of the
wrong type, and type checking is
enabledshaderUniformSetTypeCheckingEnabled(boolean),
shaderUniformSetActivityCheckingEnabled(boolean)void shaderUniformPutVector3i(JCGLProgramUniformType u, com.io7m.jtensors.core.unparameterized.vectors.Vector3I value) throws JCGLException, JCGLExceptionProgramNotActive, JCGLExceptionProgramTypeError
value to the uniform u.u - The u variable.value - The value.JCGLException - Iff an OpenGL error occurs.JCGLExceptionProgramNotActive - Iff the program to which the uniform
belongs is not active, and program
activity checking is enabledJCGLExceptionProgramTypeError - Iff the program uniform is of the
wrong type, and type checking is
enabledshaderUniformSetTypeCheckingEnabled(boolean),
shaderUniformSetActivityCheckingEnabled(boolean)void shaderUniformPutVector4i(JCGLProgramUniformType u, com.io7m.jtensors.core.unparameterized.vectors.Vector4I value) throws JCGLException, JCGLExceptionProgramNotActive, JCGLExceptionProgramTypeError
value to the uniform u.u - The u variable.value - The value.JCGLException - Iff an OpenGL error occurs.JCGLExceptionProgramNotActive - Iff the program to which the uniform
belongs is not active, and program
activity checking is enabledJCGLExceptionProgramTypeError - Iff the program uniform is of the
wrong type, and type checking is
enabledshaderUniformSetTypeCheckingEnabled(boolean),
shaderUniformSetActivityCheckingEnabled(boolean)void shaderUniformPutVector2ui(JCGLProgramUniformType u, com.io7m.jtensors.core.unparameterized.vectors.Vector2I value) throws JCGLException, JCGLExceptionProgramNotActive, JCGLExceptionProgramTypeError
value to the uniform u.u - The u variable.value - The value.JCGLException - Iff an OpenGL error occurs.JCGLExceptionProgramNotActive - Iff the program to which the uniform
belongs is not active, and program
activity checking is enabledJCGLExceptionProgramTypeError - Iff the program uniform is of the
wrong type, and type checking is
enabledshaderUniformSetTypeCheckingEnabled(boolean),
shaderUniformSetActivityCheckingEnabled(boolean)void shaderUniformPutVector3ui(JCGLProgramUniformType u, com.io7m.jtensors.core.unparameterized.vectors.Vector3I value) throws JCGLException, JCGLExceptionProgramNotActive, JCGLExceptionProgramTypeError
value to the uniform u.u - The u variable.value - The value.JCGLException - Iff an OpenGL error occurs.JCGLExceptionProgramNotActive - Iff the program to which the uniform
belongs is not active, and program
activity checking is enabledJCGLExceptionProgramTypeError - Iff the program uniform is of the
wrong type, and type checking is
enabledshaderUniformSetTypeCheckingEnabled(boolean),
shaderUniformSetActivityCheckingEnabled(boolean)void shaderUniformPutVector4ui(JCGLProgramUniformType u, com.io7m.jtensors.core.unparameterized.vectors.Vector4I value) throws JCGLException, JCGLExceptionProgramNotActive, JCGLExceptionProgramTypeError
value to the uniform u.u - The u variable.value - The value.JCGLException - Iff an OpenGL error occurs.JCGLExceptionProgramNotActive - Iff the program to which the uniform
belongs is not active, and program
activity checking is enabledJCGLExceptionProgramTypeError - Iff the program uniform is of the
wrong type, and type checking is
enabledshaderUniformSetTypeCheckingEnabled(boolean),
shaderUniformSetActivityCheckingEnabled(boolean)<T> void shaderUniformPutPVector2f(JCGLProgramUniformType u, com.io7m.jtensors.core.parameterized.vectors.PVector2D<T> value) throws JCGLException, JCGLExceptionProgramNotActive, JCGLExceptionProgramTypeError
value to the uniform u.T - A phantom type parameteru - The u variable.value - The value.JCGLException - Iff an OpenGL error occurs.JCGLExceptionProgramNotActive - Iff the program to which the uniform
belongs is not active, and program
activity checking is enabledJCGLExceptionProgramTypeError - Iff the program uniform is of the
wrong type, and type checking is
enabledshaderUniformSetTypeCheckingEnabled(boolean),
shaderUniformSetActivityCheckingEnabled(boolean)<T> void shaderUniformPutPVector3f(JCGLProgramUniformType u, com.io7m.jtensors.core.parameterized.vectors.PVector3D<T> value) throws JCGLException, JCGLExceptionProgramNotActive, JCGLExceptionProgramTypeError
value to the uniform u.T - A phantom type parameteru - The u variable.value - The value.JCGLException - Iff an OpenGL error occurs.JCGLExceptionProgramNotActive - Iff the program to which the uniform
belongs is not active, and program
activity checking is enabledJCGLExceptionProgramTypeError - Iff the program uniform is of the
wrong type, and type checking is
enabledshaderUniformSetTypeCheckingEnabled(boolean),
shaderUniformSetActivityCheckingEnabled(boolean)<T> void shaderUniformPutPVector4f(JCGLProgramUniformType u, com.io7m.jtensors.core.parameterized.vectors.PVector4D<T> value) throws JCGLException, JCGLExceptionProgramNotActive, JCGLExceptionProgramTypeError
value to the uniform u.T - A phantom type parameteru - The u variable.value - The value.JCGLException - Iff an OpenGL error occurs.JCGLExceptionProgramNotActive - Iff the program to which the uniform
belongs is not active, and program
activity checking is enabledJCGLExceptionProgramTypeError - Iff the program uniform is of the
wrong type, and type checking is
enabledshaderUniformSetTypeCheckingEnabled(boolean),
shaderUniformSetActivityCheckingEnabled(boolean)<T> void shaderUniformPutPVector2i(JCGLProgramUniformType u, com.io7m.jtensors.core.parameterized.vectors.PVector2I<T> value) throws JCGLException, JCGLExceptionProgramNotActive, JCGLExceptionProgramTypeError
value to the uniform u.T - A phantom type parameteru - The u variable.value - The value.JCGLException - Iff an OpenGL error occurs.JCGLExceptionProgramNotActive - Iff the program to which the uniform
belongs is not active, and program
activity checking is enabledJCGLExceptionProgramTypeError - Iff the program uniform is of the
wrong type, and type checking is
enabledshaderUniformSetTypeCheckingEnabled(boolean),
shaderUniformSetActivityCheckingEnabled(boolean)<T> void shaderUniformPutPVector3i(JCGLProgramUniformType u, com.io7m.jtensors.core.parameterized.vectors.PVector3I<T> value) throws JCGLException, JCGLExceptionProgramNotActive, JCGLExceptionProgramTypeError
value to the uniform u.T - A phantom type parameteru - The u variable.value - The value.JCGLException - Iff an OpenGL error occurs.JCGLExceptionProgramNotActive - Iff the program to which the uniform
belongs is not active, and program
activity checking is enabledJCGLExceptionProgramTypeError - Iff the program uniform is of the
wrong type, and type checking is
enabledshaderUniformSetTypeCheckingEnabled(boolean),
shaderUniformSetActivityCheckingEnabled(boolean)<T> void shaderUniformPutPVector4i(JCGLProgramUniformType u, com.io7m.jtensors.core.parameterized.vectors.PVector4I<T> value) throws JCGLException, JCGLExceptionProgramNotActive, JCGLExceptionProgramTypeError
value to the uniform u.T - A phantom type parameteru - The u variable.value - The value.JCGLException - Iff an OpenGL error occurs.JCGLExceptionProgramNotActive - Iff the program to which the uniform
belongs is not active, and program
activity checking is enabledJCGLExceptionProgramTypeError - Iff the program uniform is of the
wrong type, and type checking is
enabledshaderUniformSetTypeCheckingEnabled(boolean),
shaderUniformSetActivityCheckingEnabled(boolean)<T> void shaderUniformPutPVector2ui(JCGLProgramUniformType u, com.io7m.jtensors.core.parameterized.vectors.PVector2I<T> value) throws JCGLException, JCGLExceptionProgramNotActive, JCGLExceptionProgramTypeError
value to the uniform u.T - A phantom type parameteru - The u variable.value - The value.JCGLException - Iff an OpenGL error occurs.JCGLExceptionProgramNotActive - Iff the program to which the uniform
belongs is not active, and program
activity checking is enabledJCGLExceptionProgramTypeError - Iff the program uniform is of the
wrong type, and type checking is
enabledshaderUniformSetTypeCheckingEnabled(boolean),
shaderUniformSetActivityCheckingEnabled(boolean)<T> void shaderUniformPutPVector3ui(JCGLProgramUniformType u, com.io7m.jtensors.core.parameterized.vectors.PVector3I<T> value) throws JCGLException, JCGLExceptionProgramNotActive, JCGLExceptionProgramTypeError
value to the uniform u.T - A phantom type parameteru - The u variable.value - The value.JCGLException - Iff an OpenGL error occurs.JCGLExceptionProgramNotActive - Iff the program to which the uniform
belongs is not active, and program
activity checking is enabledJCGLExceptionProgramTypeError - Iff the program uniform is of the
wrong type, and type checking is
enabledshaderUniformSetTypeCheckingEnabled(boolean),
shaderUniformSetActivityCheckingEnabled(boolean)<T> void shaderUniformPutPVector4ui(JCGLProgramUniformType u, com.io7m.jtensors.core.parameterized.vectors.PVector4I<T> value) throws JCGLException, JCGLExceptionProgramNotActive, JCGLExceptionProgramTypeError
value to the uniform u.T - A phantom type parameteru - The u variable.value - The value.JCGLException - Iff an OpenGL error occurs.JCGLExceptionProgramNotActive - Iff the program to which the uniform
belongs is not active, and program
activity checking is enabledJCGLExceptionProgramTypeError - Iff the program uniform is of the
wrong type, and type checking is
enabledshaderUniformSetTypeCheckingEnabled(boolean),
shaderUniformSetActivityCheckingEnabled(boolean)void shaderUniformPutMatrix3x3f(JCGLProgramUniformType u, com.io7m.jtensors.core.unparameterized.matrices.Matrix3x3D value) throws JCGLException, JCGLExceptionProgramNotActive, JCGLExceptionProgramTypeError
value to the uniform u.u - The u variable.value - The value.JCGLException - Iff an OpenGL error occurs.JCGLExceptionProgramNotActive - Iff the program to which the uniform
belongs is not active, and program
activity checking is enabledJCGLExceptionProgramTypeError - Iff the program uniform is of the
wrong type, and type checking is
enabledshaderUniformSetTypeCheckingEnabled(boolean),
shaderUniformSetActivityCheckingEnabled(boolean)<S,T> void shaderUniformPutPMatrix3x3f(JCGLProgramUniformType u, com.io7m.jtensors.core.parameterized.matrices.PMatrix3x3D<S,T> value) throws JCGLException, JCGLExceptionProgramNotActive, JCGLExceptionProgramTypeError
value to the uniform u.S - A phantom type parameterT - A phantom type parameteru - The u variable.value - The value.JCGLException - Iff an OpenGL error occurs.JCGLExceptionProgramNotActive - Iff the program to which the uniform
belongs is not active, and program
activity checking is enabledJCGLExceptionProgramTypeError - Iff the program uniform is of the
wrong type, and type checking is
enabledshaderUniformSetTypeCheckingEnabled(boolean),
shaderUniformSetActivityCheckingEnabled(boolean)void shaderUniformPutMatrix4x4f(JCGLProgramUniformType u, com.io7m.jtensors.core.unparameterized.matrices.Matrix4x4D value) throws JCGLException, JCGLExceptionProgramNotActive, JCGLExceptionProgramTypeError
value to the uniform u.u - The u variable.value - The value.JCGLException - Iff an OpenGL error occurs.JCGLExceptionProgramNotActive - Iff the program to which the uniform
belongs is not active, and program
activity checking is enabledJCGLExceptionProgramTypeError - Iff the program uniform is of the
wrong type, and type checking is
enabledshaderUniformSetTypeCheckingEnabled(boolean),
shaderUniformSetActivityCheckingEnabled(boolean)<S,T> void shaderUniformPutPMatrix4x4f(JCGLProgramUniformType u, com.io7m.jtensors.core.parameterized.matrices.PMatrix4x4D<S,T> value) throws JCGLException, JCGLExceptionProgramNotActive, JCGLExceptionProgramTypeError
value to the uniform u.S - A phantom type parameterT - A phantom type parameteru - The u variable.value - The value.JCGLException - Iff an OpenGL error occurs.JCGLExceptionProgramNotActive - Iff the program to which the uniform
belongs is not active, and program
activity checking is enabledJCGLExceptionProgramTypeError - Iff the program uniform is of the
wrong type, and type checking is
enabledshaderUniformSetTypeCheckingEnabled(boolean),
shaderUniformSetActivityCheckingEnabled(boolean)void shaderUniformPutTexture2DUnit(JCGLProgramUniformType u, JCGLTextureUnitType value) throws JCGLException, JCGLExceptionProgramNotActive, JCGLExceptionProgramTypeError
value to the uniform u.u - The u variable.value - The value.JCGLException - Iff an OpenGL error occurs.JCGLExceptionProgramNotActive - Iff the program to which the uniform
belongs is not active, and program
activity checking is enabledJCGLExceptionProgramTypeError - Iff the program uniform is of the
wrong type, and type checking is
enabledshaderUniformSetTypeCheckingEnabled(boolean),
shaderUniformSetActivityCheckingEnabled(boolean)void shaderUniformPutTextureCubeUnit(JCGLProgramUniformType u, JCGLTextureUnitType value) throws JCGLException, JCGLExceptionProgramNotActive, JCGLExceptionProgramTypeError
value to the uniform u.u - The u variable.value - The value.JCGLException - Iff an OpenGL error occurs.JCGLExceptionProgramNotActive - Iff the program to which the uniform
belongs is not active, and program
activity checking is enabledJCGLExceptionProgramTypeError - Iff the program uniform is of the
wrong type, and type checking is
enabledshaderUniformSetTypeCheckingEnabled(boolean),
shaderUniformSetActivityCheckingEnabled(boolean)Copyright © 2017 <code@io7m.com> http://io7m.com