diff --git a/Doxyfile b/Doxyfile
index a9b8a684f..d534db6af 100644
--- a/Doxyfile
+++ b/Doxyfile
@@ -200,6 +200,8 @@ ALIASES = \
"configurationvalue{1}=@brief %Configuration value parser and writer @xrefitem configurationvalues \"Configuration value parser and writer\" \"Configuration value parsers and writers for custom types\" Allows parsing and writing \1 from and to Corrade::Utility::Configuration." \
"collisionoperator{2}=@relates \1\n@brief Collision of %\1 and %\2\n@see \2::operator%(const \1&) const" \
"todoc=@xrefitem todoc \"Documentation todo\" \"Documentation-related todo list\"" \
+ "fn_gl{1}=gl\1()" \
+ "def_gl{1}=`GL_\1`" \
"requires_gl=@xrefitem requires-gl \"Requires desktop OpenGL\" \"Functionality requiring desktop OpenGL (not available on OpenGL ES)\" Not available on OpenGL ES." \
"requires_gl30=@xrefitem requires-gl30 \"Requires OpenGL 3.0\" \"Functionality requiring OpenGL 3.0\"" \
"requires_gl31=@xrefitem requires-gl31 \"Requires OpenGL 3.1\" \"Functionality requiring OpenGL 3.1\"" \
diff --git a/src/AbstractShaderProgram.h b/src/AbstractShaderProgram.h
index 510850e18..33be5bb23 100644
--- a/src/AbstractShaderProgram.h
+++ b/src/AbstractShaderProgram.h
@@ -192,6 +192,7 @@ class MAGNUM_EXPORT AbstractShaderProgram {
* @brief Constructor
*
* Creates one OpenGL shader program.
+ * @see @fn_gl{CreateProgram}
*/
inline AbstractShaderProgram(): state(Initialized) {
program = glCreateProgram();
@@ -201,6 +202,7 @@ class MAGNUM_EXPORT AbstractShaderProgram {
* @brief Destructor
*
* Deletes associated OpenGL shader program.
+ * @see @fn_gl{DeleteProgram}
*/
virtual ~AbstractShaderProgram() = 0;
@@ -208,6 +210,8 @@ class MAGNUM_EXPORT AbstractShaderProgram {
* @brief Use shader
* @return False if the program wasn't successfully linked, true
* otherwise.
+ *
+ * @see @fn_gl{UseProgram}
*/
bool use();
@@ -216,11 +220,12 @@ class MAGNUM_EXPORT AbstractShaderProgram {
/**
* @brief Allow retrieving program binary
*
- * Disabled by default.
- * @requires_gl
- * @requires_gl41 Extension @extension{ARB,get_program_binary}
+ * Initially disabled.
* @note This function should be called after attachShader() calls and
* before link().
+ * @see @fn_gl{ProgramParameter} with @def_gl{PROGRAM_BINARY_RETRIEVABLE_HINT}
+ * @requires_gl
+ * @requires_gl41 Extension @extension{ARB,get_program_binary}
*/
inline void setRetrievableBinary(bool enabled) {
glProgramParameteri(program, GL_PROGRAM_BINARY_RETRIEVABLE_HINT, enabled ? GL_TRUE : GL_FALSE);
@@ -229,11 +234,12 @@ class MAGNUM_EXPORT AbstractShaderProgram {
/**
* @brief Allow the program to be bound to individual pipeline stages
*
- * Disabled by default.
- * @requires_gl
- * @requires_gl41 Extension @extension{ARB,separate_shader_objects}
+ * Initially disabled.
* @note This function should be called after attachShader() calls and
* before link().
+ * @see @fn_gl{ProgramParameter} with @def_gl{PROGRAM_SEPARABLE}
+ * @requires_gl
+ * @requires_gl41 Extension @extension{ARB,separate_shader_objects}
*/
inline void setSeparable(bool enabled) {
glProgramParameteri(program, GL_PROGRAM_SEPARABLE, enabled ? GL_TRUE : GL_FALSE);
@@ -247,10 +253,11 @@ class MAGNUM_EXPORT AbstractShaderProgram {
*
* Compiles the shader, if it is not already, and prepares it for
* linking.
+ * @see Shader::compile(), @fn_gl{AttachShader}
*/
bool attachShader(Shader& shader);
- /** @copydoc attachShader(Shader&) */
+ /** @overload */
inline bool attachShader(Shader&& shader) {
return attachShader(shader);
}
@@ -268,6 +275,7 @@ class MAGNUM_EXPORT AbstractShaderProgram {
* explicitly in the shader instead of using this function. See
* @ref AbstractShaderProgram-attribute-location "class documentation"
* for more information.
+ * @see @fn_gl{BindAttribLocation}
*/
void bindAttributeLocation(GLuint location, const std::string& name);
@@ -281,14 +289,15 @@ class MAGNUM_EXPORT AbstractShaderProgram {
* Binds fragment data to location which is used later for framebuffer
* operations. See also Framebuffer::BlendFunction for more
* information about using color input index.
- * @requires_gl
- * @requires_gl33 Extension @extension{ARB,blend_func_extended}
* @note This function should be called after attachShader() calls and
* before link().
* @deprecated Preferred usage is to specify attribute location
* explicitly in the shader instead of using this function. See
* @ref AbstractShaderProgram-attribute-location "class documentation"
* for more information.
+ * @see @fn_gl{BindFragDataLocationIndexed}
+ * @requires_gl
+ * @requires_gl33 Extension @extension{ARB,blend_func_extended}
*/
void bindFragmentDataLocationIndexed(GLuint location, GLuint index, const std::string& name);
@@ -299,6 +308,7 @@ class MAGNUM_EXPORT AbstractShaderProgram {
*
* The same as bindFragmentDataLocationIndexed(), but with `index` set
* to `0`.
+ * @see @fn_gl{BindFragDataLocation}
* @requires_gl
* @requires_gl30 Extension @extension{EXT,gpu_shader4}
*/
@@ -310,6 +320,8 @@ class MAGNUM_EXPORT AbstractShaderProgram {
*
* Binds previously specified attributes to given indexes and links the
* shader program together.
+ * @see @fn_gl{LinkProgram}, @fn_gl{GetProgram} with
+ * @def_gl{LINK_STATUS}, @fn_gl{GetProgramInfoLog}
*/
void link();
@@ -318,6 +330,7 @@ class MAGNUM_EXPORT AbstractShaderProgram {
* @param name Uniform name
*
* @note This function should be called after link().
+ * @see @fn_gl{GetUniformLocation}
*/
GLint uniformLocation(const std::string& name);
@@ -327,6 +340,7 @@ class MAGNUM_EXPORT AbstractShaderProgram {
* @param value Value
*
* @attention This function doesn't check whether this shader is in use!
+ * @see @fn_gl{Uniform}
*/
inline void setUniform(GLint location, GLfloat value) {
glUniform1f(location, value);
diff --git a/src/AbstractTexture.h b/src/AbstractTexture.h
index c3dec918a..3549b2343 100644
--- a/src/AbstractTexture.h
+++ b/src/AbstractTexture.h
@@ -535,7 +535,7 @@ class MAGNUM_EXPORT AbstractTexture {
* @brief Max supported layer count
*
* At least 48.
- * @see bind(GLint)
+ * @see bind(GLint), @fn_gl{Get} with @def_gl{MAX_COMBINED_TEXTURE_IMAGE_UNITS}
*/
static GLint maxSupportedLayerCount();
@@ -543,7 +543,7 @@ class MAGNUM_EXPORT AbstractTexture {
/**
* @brief Max supported anisotropy
*
- * @see setMaxAnisotropy()
+ * @see setMaxAnisotropy(), @fn_gl{Get} with @def_gl{MAX_TEXTURE_MAX_ANISOTROPY_EXT}
* @requires_extension @extension{EXT,texture_filter_anisotropic}
*/
static GLfloat maxSupportedAnisotropy();
@@ -554,6 +554,7 @@ class MAGNUM_EXPORT AbstractTexture {
* @param target Target, e.g. `GL_TEXTURE_2D`.
*
* Creates one OpenGL texture.
+ * @see @fn_gl{GenTextures}
*/
inline AbstractTexture(GLenum target): _target(target) {
glGenTextures(1, &texture);
@@ -563,6 +564,7 @@ class MAGNUM_EXPORT AbstractTexture {
* @brief Destructor
*
* Deletes assigned OpenGL texture.
+ * @see @fn_gl{DeleteTextures}
*/
virtual ~AbstractTexture() = 0;
@@ -575,6 +577,7 @@ class MAGNUM_EXPORT AbstractTexture {
* Sets current texture as active in given layer. The layer must be
* between 0 and maxSupportedLayerCount(). Note that only one texture
* can be bound to given layer.
+ * @see bind(), @fn_gl{ActiveTexture}
*/
inline void bind(GLint layer) {
glActiveTexture(GL_TEXTURE0 + layer);
@@ -595,6 +598,7 @@ class MAGNUM_EXPORT AbstractTexture {
* see @ref AbstractTexture::Filter "Filter" and
* @ref AbstractTexture::Mipmap "Mipmap" documentation for more
* information.
+ * @see bind(), @fn_gl{TexParameter} with @def_gl{TEXTURE_MIN_FILTER}
*/
AbstractTexture* setMinificationFilter(Filter filter, Mipmap mipmap = Mipmap::BaseLevel);
@@ -605,6 +609,7 @@ class MAGNUM_EXPORT AbstractTexture {
*
* Sets filter used when the object pixel size is larger than largest
* texture size.
+ * @see bind(), @fn_gl{TexParameter} with @def_gl{TEXTURE_MAG_FILTER}
*/
inline AbstractTexture* setMagnificationFilter(Filter filter) {
bind();
@@ -619,6 +624,7 @@ class MAGNUM_EXPORT AbstractTexture {
*
* Border color when @ref AbstractTexture::Wrapping "wrapping" is set
* to `ClampToBorder`.
+ * @see bind(), @fn_gl{TexParameter} with @def_gl{TEXTURE_BORDER_COLOR}
* @requires_gl
*/
inline AbstractTexture* setBorderColor(const Color4& color) {
@@ -633,7 +639,7 @@ class MAGNUM_EXPORT AbstractTexture {
*
* Default value is `1.0`, which means no anisotropy. Set to value
* greater than `1.0` for anisotropic filtering.
- * @see maxSupportedAnisotropy()
+ * @see maxSupportedAnisotropy(), bind(), @fn_gl{TexParameter} with @def_gl{TEXTURE_MAX_ANISOTROPY_EXT}
* @requires_extension @extension{EXT,texture_filter_anisotropic}
*/
inline AbstractTexture* setMaxAnisotropy(GLfloat anisotropy) {
@@ -648,7 +654,7 @@ class MAGNUM_EXPORT AbstractTexture {
* @return Pointer to self (for method chaining)
*
* Can not be used for rectangle textures.
- * @see setMinificationFilter()
+ * @see setMinificationFilter(), @fn_gl{GenerateMipmap}
* @requires_gl30 Extension @extension{EXT,framebuffer_object}
*/
AbstractTexture* generateMipmap();
@@ -665,6 +671,7 @@ class MAGNUM_EXPORT AbstractTexture {
*
* Unlike bind(GLint) doesn't bind the texture to any particular
* layer, thus unusable for binding for rendering.
+ * @see @fn_gl{BindTexture}
*/
inline void bind() {
glBindTexture(_target, texture);
diff --git a/src/Buffer.h b/src/Buffer.h
index 4c3607234..15ccda925 100644
--- a/src/Buffer.h
+++ b/src/Buffer.h
@@ -109,7 +109,7 @@ class Buffer {
#endif
};
- /** @brief Buffer usage */
+ /** @brief %Buffer usage */
enum class Usage: GLenum {
/**
* Set once by the application and used infrequently for drawing.
@@ -181,6 +181,8 @@ class Buffer {
/**
* @brief Unbind any buffer from given target
* @param target %Target
+ *
+ * @see @fn_gl{BindBuffer}
*/
inline static void unbind(Target target) {
glBindBuffer(static_cast(target), 0);
@@ -192,6 +194,7 @@ class Buffer {
* without parameter)
*
* Generates new OpenGL buffer.
+ * @see @fn_gl{GenBuffers}
*/
inline Buffer(Target defaultTarget): _defaultTarget(defaultTarget) {
glGenBuffers(1, &buffer);
@@ -201,6 +204,7 @@ class Buffer {
* @brief Destructor
*
* Deletes associated OpenGL buffer.
+ * @see @fn_gl{DeleteBuffers}
*/
inline virtual ~Buffer() {
glDeleteBuffers(1, &buffer);
@@ -216,12 +220,15 @@ class Buffer {
* @brief Bind buffer
*
* Binds buffer with default target.
+ * @see bind(Target)
*/
inline void bind() { bind(_defaultTarget); }
/**
* @brief Bind buffer
* @param target %Target
+ *
+ * @see @fn_gl{BindBuffer}
*/
inline void bind(Target target) {
glBindBuffer(static_cast(target), buffer);
@@ -234,6 +241,7 @@ class Buffer {
* @param usage %Buffer usage
*
* Sets buffer data with default target.
+ * @see setData(Target, GLsizeiptr, const GLvoid*, Usage)
*/
inline void setData(GLsizeiptr size, const GLvoid* data, Usage usage) {
setData(_defaultTarget, size, data, usage);
@@ -247,6 +255,7 @@ class Buffer {
* Sets buffer data with default target. More convenient for setting
* data from fixed-size arrays than
* setData(GLsizeiptr, const GLvoid*, Usage).
+ * @see setData(Target, GLsizeiptr, const GLvoid*, Usage)
*/
template inline void setData(const T(&data)[size], Usage usage) {
setData(_defaultTarget, data, usage);
@@ -258,6 +267,7 @@ class Buffer {
* @param usage %Buffer usage
*
* Sets buffer data with default target.
+ * @see setData(Target, GLsizeiptr, const GLvoid*, Usage)
*/
template inline void setData(const std::vector& data, Usage usage) {
setData(_defaultTarget, data, usage);
@@ -269,6 +279,8 @@ class Buffer {
* @param size Data size
* @param data Pointer to data
* @param usage %Buffer usage
+ *
+ * @see bind(Target), @fn_gl{BufferData}
*/
inline void setData(Target target, GLsizeiptr size, const GLvoid* data, Usage usage) {
bind(target);
@@ -283,6 +295,8 @@ class Buffer {
*
* More convenient for setting data from fixed-size arrays than
* setData(Target, GLsizeiptr, const GLvoid*, Usage).
+ *
+ * @see setData(Target, GLsizeiptr, const GLvoid*, Usage)
*/
template inline void setData(Target target, const T(&data)[size], Usage usage) {
setData(target, size*sizeof(T), data, usage);
@@ -293,6 +307,8 @@ class Buffer {
* @param target %Target
* @param data Vector with data
* @param usage %Buffer usage
+ *
+ * @see setData(Target, GLsizeiptr, const GLvoid*, Usage)
*/
template inline void setData(Target target, const std::vector& data, Usage usage) {
setData(target, data.size()*sizeof(T), data.data(), usage);
@@ -305,6 +321,7 @@ class Buffer {
* @param data Pointer to data
*
* Sets buffer subdata with default target.
+ * @see setSubData(Target, GLintptr, GLsizeiptr, const GLvoid*)
*/
inline void setSubData(GLintptr offset, GLsizeiptr size, const GLvoid* data) {
setSubData(_defaultTarget, offset, size, data);
@@ -318,6 +335,7 @@ class Buffer {
* Sets buffer subdata with default target. More convenient for
* setting data from fixed-size arrays than
* setSubData(GLintptr, GLsizeiptr, const GLvoid*).
+ * @see setSubData(Target, GLintptr, GLsizeiptr, const GLvoid*)
*/
template inline void setSubData(GLintptr offset, const T(&data)[size]) {
setSubData(_defaultTarget, offset, data);
@@ -329,6 +347,7 @@ class Buffer {
* @param data Vector with data
*
* Sets buffer subdata with default target.
+ * @see setSubData(Target, GLintptr, GLsizeiptr, const GLvoid*)
*/
template inline void setSubData(GLintptr offset, const std::vector& data) {
setSubData(_defaultTarget, offset, data);
@@ -340,6 +359,8 @@ class Buffer {
* @param offset Offset
* @param size Data size
* @param data Pointer to data
+ *
+ * @see bind(Target), @fn_gl{BufferSubData}
*/
inline void setSubData(Target target, GLintptr offset, GLsizeiptr size, const GLvoid* data) {
bind(target);
@@ -354,6 +375,7 @@ class Buffer {
*
* More convenient for setting data from fixed-size arrays than
* setSubData(Target, GLintptr, GLsizeiptr, const GLvoid*).
+ * @see setSubData(Target, GLintptr, GLsizeiptr, const GLvoid*)
*/
template inline void setSubData(Target target, GLintptr offset, const T(&data)[size]) {
setSubData(target, offset, size*sizeof(T), data);
@@ -364,6 +386,8 @@ class Buffer {
* @param target %Target
* @param offset Offset
* @param data Vector with data
+ *
+ * @see setSubData(Target, GLintptr, GLsizeiptr, const GLvoid*)
*/
template inline void setSubData(Target target, GLintptr offset, const std::vector& data) {
setSubData(target, offset, data.size()*sizeof(T), data.data());
diff --git a/src/BufferedImage.h b/src/BufferedImage.h
index 5489716df..0ee2ce696 100644
--- a/src/BufferedImage.h
+++ b/src/BufferedImage.h
@@ -32,6 +32,7 @@ namespace Magnum {
Class for storing image data in GPU memory. Can be replaced with Image, which
stores image data in client memory, ImageWrapper, or for example with
Trade::ImageData.
+@see Buffer
@requires_gl
*/
template class BufferedImage: public AbstractImage {
@@ -57,6 +58,8 @@ template class BufferedImage: public AbstractImage {
* Binds the buffer to @ref Buffer::Target "pixel unpack
* target" and returns nullptr, so it can be used for texture updating
* functions the same way as Image::data().
+ *
+ * @see Buffer::bind(Target)
*/
void* data() {
_buffer.bind(Buffer::Target::PixelUnpack);
@@ -76,6 +79,8 @@ template class BufferedImage: public AbstractImage {
*
* Updates the image buffer with given data. The data are not deleted
* after filling the buffer.
+ *
+ * @see setData(const Math::Vector&, Components, ComponentType, const GLvoid*, Buffer::Usage)
*/
template inline void setData(const Math::Vector& dimensions, Components components, const T* data, Buffer::Usage usage) {
setData(dimensions, components, TypeTraits::imageType(), data, usage);
@@ -91,6 +96,8 @@ template class BufferedImage: public AbstractImage {
*
* Updates the image buffer with given data. The data are not deleted
* after filling the buffer.
+ *
+ * @see Buffer::setData()
*/
void setData(const Math::Vector& dimensions, Components components, ComponentType type, const GLvoid* data, Buffer::Usage usage) {
_components = components;
diff --git a/src/BufferedTexture.h b/src/BufferedTexture.h
index 12f2b05c0..8ae1a5b7a 100644
--- a/src/BufferedTexture.h
+++ b/src/BufferedTexture.h
@@ -121,17 +121,30 @@ class BufferedTexture {
* @brief Constructor
*
* Creates one OpenGL texture.
+ * @see @fn_gl{GenTextures}
*/
inline BufferedTexture() {
glGenTextures(1, &texture);
}
- /** @copydoc AbstractTexture::~AbstractTexture() */
+ /**
+ * @brief Destructor
+ *
+ * Deletes assigned OpenGL texture.
+ * @see @fn_gl{DeleteTextures}
+ */
inline virtual ~BufferedTexture() {
glDeleteTextures(1, &texture);
}
- /** @copydoc AbstractTexture::bind(GLint) */
+ /**
+ * @brief Bind texture for rendering
+ *
+ * Sets current texture as active in given layer. The layer must be
+ * between 0 and maxSupportedLayerCount(). Note that only one texture
+ * can be bound to given layer.
+ * @see @fn_gl{ActiveTexture}, @fn_gl{BindTexture}
+ */
inline void bind(GLint layer) {
glActiveTexture(GL_TEXTURE0 + layer);
bind();
@@ -145,6 +158,7 @@ class BufferedTexture {
* Binds given buffer to this texture. The buffer itself can be then
* filled with data of proper format at any time using Buffer own data
* setting functions.
+ * @see @fn_gl{BindTexture}, @fn_gl{TexBuffer}
*/
void setBuffer(InternalFormat internalFormat, Buffer* buffer) {
bind();
@@ -154,7 +168,6 @@ class BufferedTexture {
private:
GLuint texture;
- /** @copydoc AbstractTexture::bind() */
inline void bind() {
glBindTexture(GL_TEXTURE_BUFFER, texture);
}
diff --git a/src/CubeMapTexture.h b/src/CubeMapTexture.h
index 9ce2ae96d..9ff62d0cf 100644
--- a/src/CubeMapTexture.h
+++ b/src/CubeMapTexture.h
@@ -63,6 +63,7 @@ class CubeMapTexture: public AbstractTexture {
/**
* @brief Enable/disable seamless cube map textures
*
+ * @see @fn_gl{Enable}/@fn_gl{Disable} with @def_gl{TEXTURE_CUBE_MAP_SEAMLESS}
* @requires_gl
* @requires_gl32 Extension @extension{ARB,seamless_cube_map}
*/
@@ -75,6 +76,7 @@ class CubeMapTexture: public AbstractTexture {
* @brief Constructor
*
* Creates one cube map OpenGL texture.
+ * @see @def_gl{TEXTURE_CUBE_MAP}
*/
inline CubeMapTexture(): AbstractTexture(GL_TEXTURE_CUBE_MAP) {}
diff --git a/src/CubeMapTextureArray.h b/src/CubeMapTextureArray.h
index 2f5801147..4569c1ad1 100644
--- a/src/CubeMapTextureArray.h
+++ b/src/CubeMapTextureArray.h
@@ -50,6 +50,7 @@ class CubeMapTextureArray: public AbstractTexture {
/**
* @brief Enable/disable seamless cube map textures
*
+ * @see @fn_gl{Enable}/@fn_gl{Disable} with @def_gl{TEXTURE_CUBE_MAP_SEAMLESS}
* @requires_gl32 Extension @extension{ARB,seamless_cube_map}
*/
inline static void setSeamless(bool enabled) {
@@ -60,6 +61,7 @@ class CubeMapTextureArray: public AbstractTexture {
* @brief Constructor
*
* Creates one cube map OpenGL texture.
+ * @see @def_gl{TEXTURE_CUBE_MAP_ARRAY}
*/
inline CubeMapTextureArray(): AbstractTexture(GL_TEXTURE_CUBE_MAP_ARRAY) {}
diff --git a/src/Framebuffer.h b/src/Framebuffer.h
index 268714b0d..d1278ff86 100644
--- a/src/Framebuffer.h
+++ b/src/Framebuffer.h
@@ -109,7 +109,11 @@ class MAGNUM_EXPORT Framebuffer {
FaceCulling = GL_CULL_FACE /**< Back face culling */
};
- /** @brief Set feature */
+ /**
+ * @brief Set feature
+ *
+ * @see @fn_gl{Enable}/@fn_gl{Disable}
+ */
inline static void setFeature(Feature feature, bool enabled) {
enabled ? glEnable(static_cast(feature)) : glDisable(static_cast(feature));
}
@@ -120,6 +124,7 @@ class MAGNUM_EXPORT Framebuffer {
* Initial value is `PolygonFacing::Back`. If set to both front and
* back, only points and lines are drawn.
* @attention You have to also enable face culling with setFeature().
+ * @see @fn_gl{CullFace}
*/
inline static void setFaceCullingMode(PolygonFacing mode) {
glCullFace(static_cast(mode));
@@ -129,7 +134,7 @@ class MAGNUM_EXPORT Framebuffer {
* @brief Set viewport size
*
* Call when window size changes.
- * @see Camera::setViewport()
+ * @see @fn_gl{Viewport}
*/
inline static void setViewport(const Math::Vector2& position, const Math::Vector2& size) {
glViewport(position.x(), position.y(), size.x(), size.y());
@@ -157,7 +162,8 @@ class MAGNUM_EXPORT Framebuffer {
/**
* @brief Clear specified buffers in framebuffer
*
- * @see clear(), setClearColor(), setClearDepth(), setClearStencil()
+ * @see clear(), setClearColor(), setClearDepth(), setClearStencil(),
+ * @fn_gl{Clear}
* @todo Clearing only given draw buffer
*/
inline static void clear(ClearMask mask) { glClear(static_cast(mask)); }
@@ -166,6 +172,7 @@ class MAGNUM_EXPORT Framebuffer {
* @brief Set clear color
*
* Initial value is `{0.0f, 0.0f, 0.0f, 1.0f}`.
+ * @see @fn_gl{ClearColor}
*/
inline static void setClearColor(const Color4& color) {
glClearColor(color.r(), color.g(), color.b(), color.a());
@@ -176,6 +183,7 @@ class MAGNUM_EXPORT Framebuffer {
* @brief Set clear depth
*
* Initial value is `1.0`.
+ * @see @fn_gl{ClearDepth}
* @requires_gl See setClearDepth(GLfloat), which is supported in OpenGL ES.
*/
inline static void setClearDepth(GLdouble depth) { glClearDepth(depth); }
@@ -184,6 +192,7 @@ class MAGNUM_EXPORT Framebuffer {
/**
* @overload
*
+ * @see @fn_gl{ClearDepth}
* @requires_gl41 Extension @extension{ARB,ES2_compatibility}
*/
inline static void setClearDepth(GLfloat depth) { glClearDepthf(depth); }
@@ -192,6 +201,7 @@ class MAGNUM_EXPORT Framebuffer {
* @brief Set clear stencil
*
* Initial value is `0`.
+ * @see @fn_gl{ClearStencil}
*/
inline static void setClearStencil(GLint stencil) { glClearStencil(stencil); }
@@ -205,7 +215,9 @@ class MAGNUM_EXPORT Framebuffer {
* @param size Scissor rectangle size. Initial value is
* size of the window when the context is first attached to a
* window.
+ *
* @attention You have to enable scissoring with setFeature() first.
+ * @see @fn_gl{Scissor}
*/
inline static void setScissor(const Math::Vector2& bottomLeft, const Math::Vector2& size) {
glScissor(bottomLeft.x(), bottomLeft.y(), size.x(), size.y());
@@ -286,7 +298,8 @@ class MAGNUM_EXPORT Framebuffer {
* Initial value is all `1`s.
*
* @attention You have to enable stencil test with setFeature() first.
- * @see setStencilFunction(StencilFunction, GLint, GLuint)
+ * @see setStencilFunction(StencilFunction, GLint, GLuint),
+ * @fn_gl{StencilFuncSeparate}
*/
inline static void setStencilFunction(PolygonFacing facing, StencilFunction function, GLint referenceValue, GLuint mask) {
glStencilFuncSeparate(static_cast(facing), static_cast(function), referenceValue, mask);
@@ -297,6 +310,7 @@ class MAGNUM_EXPORT Framebuffer {
*
* The same as setStencilFunction(PolygonFacing, StencilFunction, GLint, GLuint)
* with `facing` set to `PolygonFacing::FrontAndBack`.
+ * @see @fn_gl{StencilFunc}
*/
inline static void setStencilFunction(StencilFunction function, GLint referenceValue, GLuint mask) {
glStencilFunc(static_cast(function), referenceValue, mask);
@@ -313,7 +327,8 @@ class MAGNUM_EXPORT Framebuffer {
*
* Initial value for all fields is `StencilOperation::Keep`.
* @attention You have to enable stencil test with setFeature() first.
- * @see setStencilOperation(StencilOperation, StencilOperation, StencilOperation)
+ * @see setStencilOperation(StencilOperation, StencilOperation, StencilOperation),
+ * @fn_gl{StencilOpSeparate}
*/
inline static void setStencilOperation(PolygonFacing facing, StencilOperation stencilFail, StencilOperation depthFail, StencilOperation depthPass) {
glStencilOpSeparate(static_cast(facing), static_cast(stencilFail), static_cast(depthFail), static_cast(depthPass));
@@ -324,6 +339,7 @@ class MAGNUM_EXPORT Framebuffer {
*
* The same as setStencilOperation(PolygonFacing, StencilOperation, StencilOperation, StencilOperation)
* with `facing` set to `PolygonFacing::FrontAndBack`.
+ * @see @fn_gl{StencilOp}
*/
inline static void setStencilOperation(StencilOperation stencilFail, StencilOperation depthFail, StencilOperation depthPass) {
glStencilOp(static_cast(stencilFail), static_cast(depthFail), static_cast(depthPass));
@@ -345,6 +361,7 @@ class MAGNUM_EXPORT Framebuffer {
*
* Initial value is `DepthFunction::Less`.
* @attention You have to enable depth test with setFeature() first.
+ * @see @fn_gl{DepthFunc}
*/
inline static void setDepthFunction(DepthFunction function) {
glDepthFunc(static_cast(function));
@@ -359,6 +376,7 @@ class MAGNUM_EXPORT Framebuffer {
*
* Set to `false` to disallow writing to given color channel. Initial
* values are all `true`.
+ * @see @fn_gl{ColorMask}
* @todo Masking only given draw buffer
*/
inline static void setColorMask(GLboolean allowRed, GLboolean allowGreen, GLboolean allowBlue, GLboolean allowAlpha) {
@@ -370,6 +388,7 @@ class MAGNUM_EXPORT Framebuffer {
*
* Set to `false` to disallow writing to depth buffer. Initial value
* is `true`.
+ * @see @fn_gl{DepthMask}
*/
inline static void setDepthMask(GLboolean allow) {
glDepthMask(allow);
@@ -380,7 +399,7 @@ class MAGNUM_EXPORT Framebuffer {
*
* Set given bit to `0` to disallow writing stencil value for given
* faces to it. Initial value is all `1`s.
- * @see setStencilMask(GLuint)
+ * @see setStencilMask(GLuint), @fn_gl{StencilMaskSeparate}
*/
inline static void setStencilMask(PolygonFacing facing, GLuint allowBits) {
glStencilMaskSeparate(static_cast(facing), allowBits);
@@ -391,6 +410,7 @@ class MAGNUM_EXPORT Framebuffer {
*
* The same as setStencilMask(PolygonFacing, GLuint) with `facing` set
* to `PolygonFacing::FrontAndBack`.
+ * @see @fn_gl{StencilMask}
*/
inline static void setStencilMask(GLuint allowBits) {
glStencilMask(allowBits);
@@ -561,7 +581,8 @@ class MAGNUM_EXPORT Framebuffer {
* How to combine source color (pixel value) with destination color
* (framebuffer). Initial value is `BlendEquation::Add`.
* @attention You have to enable blending with setFeature() first.
- * @see setBlendEquation(BlendEquation, BlendEquation)
+ * @see setBlendEquation(BlendEquation, BlendEquation),
+ * @fn_gl{BlendEquation}
*/
inline static void setBlendEquation(BlendEquation equation) {
glBlendEquation(static_cast(equation));
@@ -572,6 +593,7 @@ class MAGNUM_EXPORT Framebuffer {
*
* See setBlendEquation(BlendEquation) for more information.
* @attention You have to enable blending with setFeature() first.
+ * @see @fn_gl{BlendEquationSeparate}
*/
inline static void setBlendEquation(BlendEquation rgb, BlendEquation alpha) {
glBlendEquationSeparate(static_cast(rgb), static_cast(alpha));
@@ -586,7 +608,8 @@ class MAGNUM_EXPORT Framebuffer {
* `BlendFunction::Zero`.
*
* @attention You have to enable blending with setFeature() first.
- * @see setBlendFunction(BlendFunction, BlendFunction, BlendFunction, BlendFunction)
+ * @see setBlendFunction(BlendFunction, BlendFunction, BlendFunction, BlendFunction),
+ * @fn_gl{BlendFunc}
*/
inline static void setBlendFunction(BlendFunction source, BlendFunction destination) {
glBlendFunc(static_cast(source), static_cast(destination));
@@ -597,6 +620,7 @@ class MAGNUM_EXPORT Framebuffer {
*
* See setBlendFunction(BlendFunction, BlendFunction) for more information.
* @attention You have to enable blending with setFeature() first.
+ * @see @fn_gl{BlendFuncSeparate}
*/
inline static void setBlendFunction(BlendFunction sourceRgb, BlendFunction destinationRgb, BlendFunction sourceAlpha, BlendFunction destinationAlpha) {
glBlendFuncSeparate(static_cast(sourceRgb), static_cast(destinationRgb), static_cast(sourceAlpha), static_cast(destinationAlpha));
@@ -611,6 +635,7 @@ class MAGNUM_EXPORT Framebuffer {
* `BlendFunction::ConstantAlpha` and
* `BlendFunction::OneMinusConstantAlpha`.
* @attention You have to enable blending with setFeature() first.
+ * @see @fn_gl{BlendColor}
*/
inline static void setBlendColor(const Color4& color) {
glBlendColor(color.r(), color.g(), color.b(), color.a());
@@ -650,6 +675,7 @@ class MAGNUM_EXPORT Framebuffer {
* @brief Set logical operation
*
* @attention You have to enable logical operation with setFeature() first.
+ * @see @fn_gl{LogicOp}
* @requires_gl Logic operations on framebuffer are in desktop OpenGL only.
*/
inline static void setLogicOperation(LogicOperation operation) {
@@ -727,6 +753,7 @@ class MAGNUM_EXPORT Framebuffer {
* @brief Constructor
*
* Generates new OpenGL framebuffer.
+ * @see @fn_gl{GenFramebuffers}
* @requires_gl30 Extension @extension{EXT,framebuffer_object}
*/
inline Framebuffer() { glGenFramebuffers(1, &framebuffer); }
@@ -735,6 +762,7 @@ class MAGNUM_EXPORT Framebuffer {
* @brief Destructor
*
* Deletes associated OpenGL framebuffer.
+ * @see @fn_gl{DeleteFramebuffers}
* @requires_gl30 Extension @extension{EXT,framebuffer_object}
*/
inline ~Framebuffer() { glDeleteFramebuffers(1, &framebuffer); }
@@ -743,6 +771,7 @@ class MAGNUM_EXPORT Framebuffer {
* @brief Bind default framebuffer to given target
* @param target %Target
*
+ * @see @fn_gl{BindFramebuffer}
* @requires_gl30 Extension @extension{EXT,framebuffer_object}
*/
inline static void bindDefault(Target target) {
@@ -752,6 +781,7 @@ class MAGNUM_EXPORT Framebuffer {
/**
* @brief Bind framebuffer
*
+ * @see @fn_gl{BindFramebuffer}
* @requires_gl30 Extension @extension{EXT,framebuffer_object}
*/
inline void bind(Target target) {
@@ -769,7 +799,7 @@ class MAGNUM_EXPORT Framebuffer {
* If used for blit(), the order is not important. Each used attachment
* should have either renderbuffer or texture attached for writing to
* work properly.
- * @see mapForDraw(), mapDefaultForRead()
+ * @see mapForDraw(), mapDefaultForRead(), bindDefault(), @fn_gl{DrawBuffers}
* @requires_gl
* @requires_gl30 Extension @extension{EXT,framebuffer_object}
*/
@@ -785,7 +815,7 @@ class MAGNUM_EXPORT Framebuffer {
* If used for blit(), the order is not important. Each used attachment
* should have either renderbuffer or texture attached for writing to
* work properly.
- * @see mapDefaultForDraw(), mapForRead()
+ * @see mapDefaultForDraw(), mapForRead(), bind(), @fn_gl{DrawBuffers}
* @requires_gl
* @requires_gl30 Extension @extension{EXT,framebuffer_object}
*/
@@ -797,7 +827,7 @@ class MAGNUM_EXPORT Framebuffer {
*
* Each used attachment should have either renderbuffer or texture
* attached to work properly.
- * @see mapForRead(), mapDefaultForDraw()
+ * @see mapForRead(), mapDefaultForDraw(), bindDefault(), @fn_gl{ReadBuffer}
* @requires_gl
* @requires_gl30 Extension @extension{EXT,framebuffer_object}
*/
@@ -812,7 +842,7 @@ class MAGNUM_EXPORT Framebuffer {
*
* The color attachment should have either renderbuffer or texture
* attached for reading to work properly.
- * @see mapDefaultForRead(), mapForDraw()
+ * @see mapDefaultForRead(), mapForDraw(), bind(), @fn_gl{ReadBuffer}
* @requires_gl
* @requires_gl30 Extension @extension{EXT,framebuffer_object}
*/
@@ -854,8 +884,9 @@ class MAGNUM_EXPORT Framebuffer {
* @brief Attach renderbuffer to given framebuffer depth/stencil attachment
* @param target %Target
* @param depthStencilAttachment Depth/stencil attachment
- * @param renderbuffer Renderbuffer
+ * @param renderbuffer %Renderbuffer
*
+ * @see bind(), @fn_gl{FramebufferRenderbuffer}
* @requires_gl30 Extension @extension{EXT,framebuffer_object}
*/
inline void attachRenderbuffer(Target target, DepthStencilAttachment depthStencilAttachment, Renderbuffer* renderbuffer) {
@@ -868,8 +899,9 @@ class MAGNUM_EXPORT Framebuffer {
* @brief Attach renderbuffer to given framebuffer color attachment
* @param target %Target
* @param colorAttachment Color attachment ID (number between 0 and 15)
- * @param renderbuffer Renderbuffer
+ * @param renderbuffer %Renderbuffer
*
+ * @see bind(), @fn_gl{FramebufferRenderbuffer}
* @requires_gl30 Extension @extension{EXT,framebuffer_object}
*/
inline void attachRenderbuffer(Target target, unsigned int colorAttachment, Renderbuffer* renderbuffer) {
@@ -886,6 +918,7 @@ class MAGNUM_EXPORT Framebuffer {
* @param texture 1D texture
* @param mipLevel Mip level
*
+ * @see bind(), @fn_gl{FramebufferTexture}
* @requires_gl
* @requires_gl30 Extension @extension{EXT,framebuffer_object}
*/
@@ -903,6 +936,7 @@ class MAGNUM_EXPORT Framebuffer {
* @param texture 1D texture
* @param mipLevel Mip level
*
+ * @see bind(), @fn_gl{FramebufferTexture}
* @requires_gl
* @requires_gl30 Extension @extension{EXT,framebuffer_object}
*/
@@ -922,7 +956,7 @@ class MAGNUM_EXPORT Framebuffer {
* @param mipLevel Mip level. For rectangle textures it
* should be always 0.
*
- * @see attachCubeMapTexture()
+ * @see attachCubeMapTexture(), bind(), @fn_gl{FramebufferTexture}
* @requires_gl30 Extension @extension{EXT,framebuffer_object}
*/
inline void attachTexture2D(Target target, DepthStencilAttachment depthStencilAttachment, Texture2D* texture, GLint mipLevel) {
@@ -940,7 +974,7 @@ class MAGNUM_EXPORT Framebuffer {
* @param mipLevel Mip level. For rectangle textures it
* should be always 0.
*
- * @see attachCubeMapTexture()
+ * @see attachCubeMapTexture(), bind(), @fn_gl{FramebufferTexture}
* @requires_gl30 Extension @extension{EXT,framebuffer_object}
*/
inline void attachTexture2D(Target target, unsigned int colorAttachment, Texture2D* texture, GLint mipLevel) {
@@ -958,7 +992,7 @@ class MAGNUM_EXPORT Framebuffer {
* @param coordinate Cube map coordinate
* @param mipLevel Mip level
*
- * @see attachTexture2D()
+ * @see attachTexture2D(), bind(), @fn_gl{FramebufferTexture}
* @requires_gl30 Extension @extension{EXT,framebuffer_object}
*/
inline void attachCubeMapTexture(Target target, DepthStencilAttachment depthStencilAttachment, CubeMapTexture* texture, CubeMapTexture::Coordinate coordinate, GLint mipLevel) {
@@ -975,7 +1009,7 @@ class MAGNUM_EXPORT Framebuffer {
* @param coordinate Cube map coordinate
* @param mipLevel Mip level
*
- * @see attachTexture2D()
+ * @see attachTexture2D(), bind(), @fn_gl{FramebufferTexture}
* @requires_gl30 Extension @extension{EXT,framebuffer_object}
*/
inline void attachCubeMapTexture(Target target, unsigned int colorAttachment, CubeMapTexture* texture, CubeMapTexture::Coordinate coordinate, GLint mipLevel) {
@@ -993,6 +1027,7 @@ class MAGNUM_EXPORT Framebuffer {
* @param mipLevel Mip level
* @param layer Layer of 2D image within a 3D texture
*
+ * @see bind(), @fn_gl{FramebufferTexture}
* @requires_gl
* @requires_gl30 Extension @extension{EXT,framebuffer_object}
*/
@@ -1011,6 +1046,7 @@ class MAGNUM_EXPORT Framebuffer {
* @param mipLevel Mip level
* @param layer Layer of 2D image within a 3D texture.
*
+ * @see bind(), @fn_gl{FramebufferTexture}
* @requires_gl
* @requires_gl30 Extension @extension{EXT,framebuffer_object}
*/
@@ -1065,6 +1101,7 @@ class MAGNUM_EXPORT Framebuffer {
* mapDefaultForDraw() for binding particular framebuffer for reading
* and drawing. If multiple attachments are specified in mapForDraw()
* / mapDefaultForDraw(), the data are written to each of them.
+ * @see @fn_gl{BlitFramebuffer}
* @requires_gl
* @requires_gl30 Extension @extension{EXT,framebuffer_blit}
*/
@@ -1085,6 +1122,7 @@ class MAGNUM_EXPORT Framebuffer {
* no interpolation is needed and thus
* AbstractTexture::Filter::NearestNeighbor filtering is used by
* default.
+ * @see @fn_gl{BlitFramebuffer}
* @requires_gl
* @requires_gl30 Extension @extension{EXT,framebuffer_blit}
*/
@@ -1101,6 +1139,7 @@ class MAGNUM_EXPORT Framebuffer {
* @param type Data type
* @param image %Image where to put the data
*
+ * @see @fn_gl{ReadPixels}
* @requires_gl30 Extension @extension{EXT,framebuffer_object}
*/
static void read(const Math::Vector2& offset, const Math::Vector2& dimensions, AbstractImage::Components components, AbstractImage::ComponentType type, Image2D* image);
@@ -1115,6 +1154,7 @@ class MAGNUM_EXPORT Framebuffer {
* @param image Buffered image where to put the data
* @param usage %Buffer usage
*
+ * @see Buffer::bind(Target), @fn_gl{ReadPixels}
* @requires_gl
* @requires_gl30 Extension @extension{EXT,framebuffer_object}
*/
diff --git a/src/IndexedMesh.h b/src/IndexedMesh.h
index 7250357b2..f7ad05992 100644
--- a/src/IndexedMesh.h
+++ b/src/IndexedMesh.h
@@ -69,12 +69,22 @@ class MAGNUM_EXPORT IndexedMesh: public Mesh {
*/
inline Buffer* indexBuffer() { return &_indexBuffer; }
+ /**
+ * @brief Draw the mesh
+ *
+ * Expects an active shader with all uniforms set.
+ * @see Buffer::bind(), bind(), unbind(), finalize(), @fn_gl{DrawElements}
+ * @todo Index buffer bound every time?!
+ */
void draw();
protected:
- #ifndef DOXYGEN_GENERATING_OUTPUT
+ /**
+ * @brief Finalize the mesh
+ *
+ * @see Mesh::finalize(), Buffer::bind()
+ */
MAGNUM_LOCAL void finalize();
- #endif
private:
Buffer _indexBuffer;
diff --git a/src/Mesh.h b/src/Mesh.h
index dd7972adf..450c44619 100644
--- a/src/Mesh.h
+++ b/src/Mesh.h
@@ -69,6 +69,7 @@ class MAGNUM_EXPORT Mesh {
* @brief Set front-facing polygon winding
*
* Initial value is `FrontFace::%CounterClockWise`.
+ * @see @fn_gl{FrontFace}
*/
void setFrontFace(FrontFace mode) {
glFrontFace(static_cast(mode));
@@ -96,6 +97,7 @@ class MAGNUM_EXPORT Mesh {
* @brief Set provoking vertex
*
* Initial value is ProvokingMode::%LastVertexConvention.
+ * @see @fn_gl{ProvokingVertex}
* @requires_gl OpenGL ES behaves always like the default.
* @requires_gl32 Extension @extension{ARB,provoking_vertex}. Older
* versions behave always like the default.
@@ -137,6 +139,7 @@ class MAGNUM_EXPORT Mesh {
* @brief Set polygon drawing mode
*
* Initial value is `PolygonMode::%Fill`.
+ * @see @fn_gl{PolygonMode}
* @requires_gl OpenGL ES behaves always like the default. See
* setPrimitive() for possible workaround.
*/
@@ -171,7 +174,7 @@ class MAGNUM_EXPORT Mesh {
* @brief Enable/disable polygon offset for given mode
*
* Initially disabled for all modes.
- * @see setPolygonOffset()
+ * @see setPolygonOffset(), @fn_gl{Enable}/@fn_gl{Disable}
*/
inline static void setPolygonOffsetMode(PolygonOffsetMode mode, bool enabled) {
enabled ? glEnable(static_cast(mode)) : glDisable(static_cast(mode));
@@ -184,6 +187,7 @@ class MAGNUM_EXPORT Mesh {
*
* @attention You have to call setPolygonOffsetMode() to enable
* polygon offset for desired polygon modes.
+ * @see @fn_gl{PolygonOffset}
*/
inline static void setPolygonOffset(GLfloat factor, GLfloat units) {
glPolygonOffset(factor, units);
@@ -192,7 +196,8 @@ class MAGNUM_EXPORT Mesh {
/**
* @brief Set line width
*
- * Initial value is 1.
+ * Initial value is `1.0f`.
+ * @see @fn_gl{LineWidth}
*/
inline static void setLineWidth(GLfloat width) {
glLineWidth(width);
@@ -203,7 +208,7 @@ class MAGNUM_EXPORT Mesh {
* @brief Set point size
*
* Initial value is `1.0f`.
- * @see setProgramPointSize()
+ * @see setProgramPointSize(), @fn_gl{PointSize}
* @requires_gl Set directly in vertex shader using @c gl_PointSize
* builtin variable.
*/
@@ -216,7 +221,7 @@ class MAGNUM_EXPORT Mesh {
*
* If enabled, the point size is taken from vertex/geometry shader
* builtin `gl_PointSize`. Initially disabled on desktop OpenGL.
- * @see setPointSize()
+ * @see setPointSize(), @fn_gl{Enable}/@fn_gl{Disable} with @def_gl{PROGRAM_POINT_SIZE}
* @requires_gl Always enabled on OpenGL ES.
*/
inline static void setProgramPointSize(bool enabled) {
@@ -272,7 +277,7 @@ class MAGNUM_EXPORT Mesh {
};
/**
- * @brief Buffer type
+ * @brief %Buffer type
*
* If storing more than one attribute data in the buffer, the data of
* one attribute can be either kept together or interleaved with data
@@ -292,6 +297,7 @@ class MAGNUM_EXPORT Mesh {
* Allows creating the object without knowing anything about mesh
* data. Note that you have to call setVertexCount() manually for mesh
* to draw properly.
+ * @see @fn_gl{GenVertexArrays}
*/
inline Mesh(Primitive primitive = Primitive::Triangles): _primitive(primitive), _vertexCount(0), finalized(false) {
#ifndef MAGNUM_TARGET_GLES
@@ -303,6 +309,8 @@ class MAGNUM_EXPORT Mesh {
* @brief Constructor
* @param primitive Primitive type
* @param vertexCount Vertex count
+ *
+ * @see @fn_gl{GenVertexArrays}
*/
inline Mesh(Primitive primitive, GLsizei vertexCount): _primitive(primitive), _vertexCount(vertexCount), finalized(false) {
#ifndef MAGNUM_TARGET_GLES
@@ -317,6 +325,7 @@ class MAGNUM_EXPORT Mesh {
* @brief Destructor
*
* Deletes all associated buffers.
+ * @see @fn_gl{DeleteVertexArrays}
*/
inline virtual ~Mesh() { destroy(); }
@@ -391,18 +400,30 @@ class MAGNUM_EXPORT Mesh {
* @brief Draw the mesh
*
* Expects an active shader with all uniforms set.
+ * @see bind(), unbind(), finalize(), @fn_gl{DrawArrays}
*/
virtual void draw();
protected:
- #ifndef DOXYGEN_GENERATING_OUTPUT
- /** @brief Bind all buffers */
+ /**
+ * @brief Bind all buffers
+ *
+ * @see @fn_gl{EnableVertexAttribArray}, @fn_gl{VertexAttribPointer}
+ */
void bindBuffers();
- /** @brief Bind vertex array or all buffers */
+ /**
+ * @brief Bind vertex array or all buffers
+ *
+ * @see @fn_gl{BindVertexArray} or bindBuffers()
+ */
void bind();
- /** @brief Unbind vertex array or all buffers */
+ /**
+ * @brief Unbind vertex array or all buffers
+ *
+ * @see @fn_gl{BindVertexArray} or @fn_gl{DisableVertexAttribArray}
+ */
void unbind();
/**
@@ -410,9 +431,9 @@ class MAGNUM_EXPORT Mesh {
*
* Computes location and stride of each attribute in its buffer. After
* this function is called, no new attribute can be bound.
+ * @see bindBuffers()
*/
MAGNUM_LOCAL void finalize();
- #endif
private:
/** @brief Vertex attribute */
diff --git a/src/Query.h b/src/Query.h
index 41c59415c..bfa5c94fb 100644
--- a/src/Query.h
+++ b/src/Query.h
@@ -39,6 +39,7 @@ class MAGNUM_EXPORT AbstractQuery {
* @brief Constructor
*
* Generates one OpenGL query.
+ * @see @fn_gl{GenQueries}
*/
inline AbstractQuery() { glGenQueries(1, &query); }
@@ -46,11 +47,14 @@ class MAGNUM_EXPORT AbstractQuery {
* @brief Destructor
*
* Deletes assigned OpenGL query.
+ * @see @fn_gl{DeleteQueries}
*/
virtual inline ~AbstractQuery() { glDeleteQueries(1, &query); }
/**
* @brief Whether the result is available
+ *
+ * @see @fn_gl{GetQueryObject} with @def_gl{QUERY_RESULT_AVAILABLE}
*/
bool resultAvailable();
@@ -61,7 +65,7 @@ class MAGNUM_EXPORT AbstractQuery {
*
* Note that this function is blocking until the result is available.
* See resultAvailable().
- *
+ * @see @fn_gl{GetQueryObject} with @def_gl{QUERY_RESULT}
* @requires_gl33 Extension @extension{ARB,timer_query} (result type `GLuint64` and `GLint64`)
*/
template T result();
@@ -130,6 +134,7 @@ class MAGNUM_EXPORT Query: public AbstractQuery {
* @brief Begin query
*
* Begins counting of given @p target until end() is called.
+ * @see @fn_gl{BeginQuery}
*/
void begin(Target target);
@@ -137,6 +142,7 @@ class MAGNUM_EXPORT Query: public AbstractQuery {
* @brief End query
*
* The result can be then retrieved by calling result().
+ * @see @fn_gl{EndQuery}
*/
void end();
@@ -239,6 +245,7 @@ class MAGNUM_EXPORT SampleQuery: public AbstractQuery {
/**
* @brief Begin conditional rendering based on result value
*
+ * @see @fn_gl{BeginConditionalRender}
* @requires_gl30 Extension @extension{NV,conditional_render}
*/
inline void beginConditionalRender(ConditionalRenderMode mode) {
@@ -248,6 +255,7 @@ class MAGNUM_EXPORT SampleQuery: public AbstractQuery {
/**
* @brief End conditional render
*
+ * @see @fn_gl{EndConditionalRender}
* @requires_gl30 Extension @extension{NV,conditional_render}
*/
inline void endConditionalRender() {
@@ -293,7 +301,11 @@ Using this query results in fewer OpenGL calls when doing more measures.
*/
class TimeQuery: public AbstractQuery {
public:
- /** @brief Query timestamp */
+ /**
+ * @brief Query timestamp
+ *
+ * @see @fn_gl{QueryCounter} with @def_gl{TIMESTAMP}
+ */
inline void timestamp() {
glQueryCounter(query, GL_TIMESTAMP);
}
diff --git a/src/Renderbuffer.h b/src/Renderbuffer.h
index ebba60801..9ff67f01d 100644
--- a/src/Renderbuffer.h
+++ b/src/Renderbuffer.h
@@ -184,6 +184,7 @@ class Renderbuffer {
* @brief Constructor
*
* Generates new OpenGL renderbuffer.
+ * @see @fn_gl{GenRenderbuffers}
*/
inline Renderbuffer() {
glGenRenderbuffers(1, &renderbuffer);
@@ -193,6 +194,7 @@ class Renderbuffer {
* @brief Destructor
*
* Deletes associated OpenGL renderbuffer.
+ * @see @fn_gl{DeleteRenderbuffers}
*/
inline ~Renderbuffer() {
glDeleteRenderbuffers(1, &renderbuffer);
@@ -201,7 +203,11 @@ class Renderbuffer {
/** @brief OpenGL internal renderbuffer ID */
inline GLuint id() const { return renderbuffer; }
- /** @brief Bind renderbuffer */
+ /**
+ * @brief Bind renderbuffer
+ *
+ * @see @fn_gl{BindRenderbuffer}
+ */
inline void bind() {
glBindRenderbuffer(GL_RENDERBUFFER, renderbuffer);
}
@@ -210,6 +216,8 @@ class Renderbuffer {
* @brief Set renderbuffer storage
* @param internalFormat Internal format
* @param size Renderbuffer size
+ *
+ * @see bind(), @fn_gl{RenderbufferStorage}
*/
inline void setStorage(InternalFormat internalFormat, const Math::Vector2& size) {
bind();
diff --git a/src/Shader.h b/src/Shader.h
index 75c3a0f63..4cd0cada9 100644
--- a/src/Shader.h
+++ b/src/Shader.h
@@ -122,7 +122,7 @@ class MAGNUM_EXPORT Shader {
*
* Creates empty OpenGL shader. Sources can be added with addSource()
* or addFile().
- * @see fromData(), fromFile()
+ * @see fromData(), fromFile(), @fn_gl{CreateShader}
*/
inline Shader(Type type): _type(type), _state(State::Initialized), shader(0) {
shader = glCreateShader(static_cast(_type));
@@ -132,6 +132,7 @@ class MAGNUM_EXPORT Shader {
* @brief Destructor
*
* Deletes associated OpenGL shader.
+ * @see @fn_gl{DeleteShader}
*/
inline ~Shader() { if(shader) glDeleteShader(shader); }
@@ -185,7 +186,9 @@ class MAGNUM_EXPORT Shader {
* before, it tries to compile it. If compilation fails or no sources
* are present, returns 0. If the shader was compiled already, returns
* already existing shader.
- * @see state()
+ * @see state(), @fn_gl{ShaderSource}, @fn_gl{CompileShader},
+ * @fn_gl{GetShader} with @def_gl{COMPILE_STATUS},
+ * @fn_gl{GetShaderInfoLog}
*/
GLuint compile();
diff --git a/src/Texture.h b/src/Texture.h
index 61f1013b3..6e6f73c05 100644
--- a/src/Texture.h
+++ b/src/Texture.h
@@ -122,6 +122,8 @@ template class Texture: public AbstractTexture {
* @attention For rectangle textures only some modes are supported,
* see @ref AbstractTexture::Wrapping "Wrapping" documentation for
* more information.
+ * @see bind(), @fn_gl{TexParameter} with @def_gl{TEXTURE_WRAP_S},
+ * @def_gl{TEXTURE_WRAP_T}, @def_gl{TEXTURE_WRAP_R}
*/
inline Texture* setWrapping(const Math::Vector& wrapping) {
bind();
@@ -139,6 +141,7 @@ template class Texture: public AbstractTexture {
*
* Sets texture data from given image. The image is not deleted
* afterwards.
+ * @see bind(), @fn_gl{TexImage1D}, @fn_gl{TexImage2D}, @fn_gl{TexImage3D}
*/
template inline Texture* setData(GLint mipLevel, InternalFormat internalFormat, Image* image) {
bind();
@@ -162,6 +165,7 @@ template class Texture: public AbstractTexture {
* taken as if it had the last dimension equal to 1. It can be used
* for e.g. updating 3D texture with multiple 2D images or for filling
* 1D texture array (which is two-dimensional) with 1D images.
+ * @see bind(), @fn_gl{TexSubImage1D}, @fn_gl{TexSubImage2D}, @fn_gl{TexSubImage3D}
*/
template inline Texture* setSubData(GLint mipLevel, const Math::Vector& offset, Image* image) {
bind();