Browse Source

Added BufferTexture::offsetAlignment() limit query.

pull/51/head
Vladimír Vondruš 13 years ago
parent
commit
13692f4895
  1. 16
      src/BufferTexture.cpp
  2. 10
      src/BufferTexture.h
  3. 2
      src/Implementation/TextureState.cpp
  4. 3
      src/Implementation/TextureState.h

16
src/BufferTexture.cpp

@ -29,11 +29,27 @@
#include "Context.h"
#include "Extensions.h"
#include "Implementation/State.h"
#include "Implementation/TextureState.h"
namespace Magnum {
BufferTexture::SetBufferImplementation BufferTexture::setBufferImplementation = &BufferTexture::setBufferImplementationDefault;
BufferTexture::SetBufferRangeImplementation BufferTexture::setBufferRangeImplementation = &BufferTexture::setBufferRangeImplementationDefault;
Int BufferTexture::offsetAlignment() {
if(!Context::current()->isExtensionSupported<Extensions::GL::ARB::texture_buffer_range>())
return 0;
GLint& value = Context::current()->state().texture->bufferOffsetAlignment;
/* Get the value, if not already cached */
if(value == 0)
glGetIntegerv(GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT, &value);
return value;
}
void BufferTexture::initializeContextBasedFunctionality(Context& context) {
if(context.isExtensionSupported<Extensions::GL::EXT::direct_state_access>()) {
Debug() << "BufferTexture: using" << Extensions::GL::EXT::direct_state_access::string() << "features";

10
src/BufferTexture.h

@ -205,6 +205,16 @@ class MAGNUM_EXPORT BufferTexture: private AbstractTexture {
/** @copydoc AbstractTexture::maxLabelLength() */
static Int maxLabelLength() { return AbstractTexture::maxLabelLength(); }
/**
* @brief Minimum required alignment for texture buffer offsets
*
* The result is cached, repeated queries don't result in repeated
* OpenGL calls. If extension @extension{ARB,texture_buffer_range}
* (part of OpenGL 4.3) is not available, returns `0`.
* @see @fn_gl{Get} with @def_gl{TEXTURE_BUFFER_OFFSET_ALIGNMENT}
*/
static Int offsetAlignment();
explicit BufferTexture(): AbstractTexture(GL_TEXTURE_BUFFER) {}
/** @copydoc AbstractTexture::id() */

2
src/Implementation/TextureState.cpp

@ -28,7 +28,7 @@ namespace Magnum { namespace Implementation {
TextureState::TextureState(): maxAnisotropy(0.0f), currentLayer(0)
#ifndef MAGNUM_TARGET_GLES
, maxColorSamples(0), maxDepthSamples(0), maxIntegerSamples(0)
, maxColorSamples(0), maxDepthSamples(0), maxIntegerSamples(0), bufferOffsetAlignment(0)
#endif
{}

3
src/Implementation/TextureState.h

@ -39,7 +39,8 @@ struct TextureState {
#ifndef MAGNUM_TARGET_GLES
GLint maxColorSamples,
maxDepthSamples,
maxIntegerSamples;
maxIntegerSamples,
bufferOffsetAlignment;
#endif
std::vector<GLuint> bindings;

Loading…
Cancel
Save