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();