Browse Source

If targetting exactly ES 2.0, hide everything not available there.

Some target platforms supply their own OpenGL headers, thus we cannot
use our own from ES 3.0 and compilation fails.

On the other hand, this will be better for users as usage of unsupported
features will be catched right during compilation and not at runtime.
pull/7/head
Vladimír Vondruš 14 years ago
parent
commit
9701c8dacb
  1. 12
      src/AbstractShaderProgram.h
  2. 2
      src/AbstractTexture.cpp
  3. 19
      src/AbstractTexture.h
  4. 20
      src/Buffer.h
  5. 2
      src/BufferedImage.cpp
  6. 4
      src/BufferedImage.h
  7. 5
      src/Context.cpp
  8. 2
      src/Framebuffer.cpp
  9. 11
      src/Framebuffer.h
  10. 16
      src/Implementation/BufferState.cpp
  11. 4
      src/Implementation/BufferState.h
  12. 2
      src/Renderbuffer.cpp
  13. 24
      src/Renderbuffer.h

12
src/AbstractShaderProgram.h

@ -361,6 +361,7 @@ class MAGNUM_EXPORT AbstractShaderProgram {
/* GL_FIXED not supported */ /* GL_FIXED not supported */
#ifndef MAGNUM_TARGET_GLES2
/** /**
* Unsigned 2.10.10.10 packed integer. Only for * Unsigned 2.10.10.10 packed integer. Only for
* four-component float vector attribute type. * four-component float vector attribute type.
@ -377,6 +378,7 @@ class MAGNUM_EXPORT AbstractShaderProgram {
* @requires_gles30 (no extension providing this functionality) * @requires_gles30 (no extension providing this functionality)
*/ */
Int2101010REV = GL_INT_2_10_10_10_REV Int2101010REV = GL_INT_2_10_10_10_REV
#endif
}; };
#else #else
typedef typename Implementation::Attribute<T>::DataType DataType; typedef typename Implementation::Attribute<T>::DataType DataType;
@ -465,6 +467,7 @@ class MAGNUM_EXPORT AbstractShaderProgram {
bool use(); bool use();
protected: protected:
#ifndef MAGNUM_TARGET_GLES2
/** /**
* @brief Allow retrieving program binary * @brief Allow retrieving program binary
* *
@ -478,6 +481,7 @@ class MAGNUM_EXPORT AbstractShaderProgram {
inline void setRetrievableBinary(bool enabled) { inline void setRetrievableBinary(bool enabled) {
glProgramParameteri(_id, GL_PROGRAM_BINARY_RETRIEVABLE_HINT, enabled ? GL_TRUE : GL_FALSE); glProgramParameteri(_id, GL_PROGRAM_BINARY_RETRIEVABLE_HINT, enabled ? GL_TRUE : GL_FALSE);
} }
#endif
/** /**
* @brief Allow the program to be bound to individual pipeline stages * @brief Allow the program to be bound to individual pipeline stages
@ -1101,12 +1105,16 @@ template<> struct Attribute<Math::Vector<4, GLfloat>> {
UnsignedInt = GL_UNSIGNED_INT, UnsignedInt = GL_UNSIGNED_INT,
Int = GL_INT, Int = GL_INT,
Half = GL_HALF_FLOAT, Half = GL_HALF_FLOAT,
Float = GL_FLOAT, Float = GL_FLOAT
#ifndef MAGNUM_TARGET_GLES #ifndef MAGNUM_TARGET_GLES
Double = GL_DOUBLE, ,
Double = GL_DOUBLE
#endif #endif
#ifndef MAGNUM_TARGET_GLES2
,
UnsignedAlpha2RGB10 = GL_UNSIGNED_INT_2_10_10_10_REV, UnsignedAlpha2RGB10 = GL_UNSIGNED_INT_2_10_10_10_REV,
Alpha2RGB10 = GL_INT_2_10_10_10_REV Alpha2RGB10 = GL_INT_2_10_10_10_REV
#endif
}; };
enum class DataOption: std::uint8_t { enum class DataOption: std::uint8_t {

2
src/AbstractTexture.cpp

@ -312,6 +312,7 @@ void AbstractTexture::subImageImplementationDSA(GLenum target, GLint mipLevel, c
} }
#endif #endif
#ifndef MAGNUM_TARGET_GLES2
AbstractTexture::InternalFormat::InternalFormat(AbstractTexture::Components components, AbstractTexture::ComponentType type) { AbstractTexture::InternalFormat::InternalFormat(AbstractTexture::Components components, AbstractTexture::ComponentType type) {
#ifndef MAGNUM_TARGET_GLES #ifndef MAGNUM_TARGET_GLES
#define internalFormatSwitch(c) switch(type) { \ #define internalFormatSwitch(c) switch(type) { \
@ -374,6 +375,7 @@ AbstractTexture::InternalFormat::InternalFormat(AbstractTexture::Components comp
internalFormatSwitch(RGBA) internalFormatSwitch(RGBA)
#undef internalFormatSwitch #undef internalFormatSwitch
} }
#endif
#ifndef DOXYGEN_GENERATING_OUTPUT #ifndef DOXYGEN_GENERATING_OUTPUT
void AbstractTexture::DataHelper<2>::setWrapping(AbstractTexture* texture, const Math::Vector2<Wrapping>& wrapping) { void AbstractTexture::DataHelper<2>::setWrapping(AbstractTexture* texture, const Math::Vector2<Wrapping>& wrapping) {

19
src/AbstractTexture.h

@ -141,6 +141,7 @@ class MAGNUM_EXPORT AbstractTexture {
/** @{ @name Internal texture formats */ /** @{ @name Internal texture formats */
#ifndef MAGNUM_TARGET_GLES2
/** /**
* @brief Color components * @brief Color components
* *
@ -253,6 +254,7 @@ class MAGNUM_EXPORT AbstractTexture {
NormalizedShort NormalizedShort
#endif #endif
}; };
#endif
/** /**
* @brief Internal format * @brief Internal format
@ -261,6 +263,7 @@ class MAGNUM_EXPORT AbstractTexture {
* normalization see enums Components and ComponentType. * normalization see enums Components and ComponentType.
*/ */
enum class Format: GLenum { enum class Format: GLenum {
#ifndef MAGNUM_TARGET_GLES2
/** /**
* One-component (red channel), unsigned normalized, probably * One-component (red channel), unsigned normalized, probably
* 8bit. * 8bit.
@ -276,6 +279,7 @@ class MAGNUM_EXPORT AbstractTexture {
* @requires_gles30 (no extension providing this functionality) * @requires_gles30 (no extension providing this functionality)
*/ */
RedGreen = GL_RG, RedGreen = GL_RG,
#endif
/** /**
* Three-component RGB, unsigned normalized, each component * Three-component RGB, unsigned normalized, each component
@ -311,6 +315,7 @@ class MAGNUM_EXPORT AbstractTexture {
BGRA = GL_BGRA, BGRA = GL_BGRA,
#endif #endif
#ifndef MAGNUM_TARGET_GLES2
/** /**
* Four-component sRGBA, unsigned normalized, each component * Four-component sRGBA, unsigned normalized, each component
* 8bit, 32bit total. * 8bit, 32bit total.
@ -339,6 +344,7 @@ class MAGNUM_EXPORT AbstractTexture {
* @requires_gles30 (no extension providing this functionality) * @requires_gles30 (no extension providing this functionality)
*/ */
RGB10Alpha2Unsigned = GL_RGB10_A2UI, RGB10Alpha2Unsigned = GL_RGB10_A2UI,
#endif
/** /**
* Four-component RGBA, unsigned normalized, each RGB component * Four-component RGBA, unsigned normalized, each RGB component
@ -352,6 +358,7 @@ class MAGNUM_EXPORT AbstractTexture {
*/ */
RGBA4 = GL_RGBA4, RGBA4 = GL_RGBA4,
#ifndef MAGNUM_TARGET_GLES2
/** /**
* Three-component RGB, float, red and green 11bit, blue 10bit, * Three-component RGB, float, red and green 11bit, blue 10bit,
* 32bit total. * 32bit total.
@ -359,6 +366,7 @@ class MAGNUM_EXPORT AbstractTexture {
* @requires_gles30 (no extension providing this functionality) * @requires_gles30 (no extension providing this functionality)
*/ */
RG11B10Float = GL_R11F_G11F_B10F, RG11B10Float = GL_R11F_G11F_B10F,
#endif
/* 1.5.6 <= GLEW < 1.8.0 doesn't have this, even if there is /* 1.5.6 <= GLEW < 1.8.0 doesn't have this, even if there is
GL_ARB_ES2_compatibility */ GL_ARB_ES2_compatibility */
@ -367,9 +375,11 @@ class MAGNUM_EXPORT AbstractTexture {
* Three-component RGB, unsigned normalized, red and blue 5bit, * Three-component RGB, unsigned normalized, red and blue 5bit,
* green 6bit, 16bit total. * green 6bit, 16bit total.
*/ */
RGB565 = GL_RGB565, RGB565 = GL_RGB565
#endif #endif
#ifndef MAGNUM_TARGET_GLES2
,
/** /**
* Three-component RGB, unsigned with exponent, each component * Three-component RGB, unsigned with exponent, each component
* 9bit, exponent 5bit, 32bit total. * 9bit, exponent 5bit, 32bit total.
@ -377,6 +387,7 @@ class MAGNUM_EXPORT AbstractTexture {
* @requires_gles30 (no extension providing this functionality) * @requires_gles30 (no extension providing this functionality)
*/ */
RGB9Exponent5 = GL_RGB9_E5, RGB9Exponent5 = GL_RGB9_E5,
#endif
#ifndef MAGNUM_TARGET_GLES #ifndef MAGNUM_TARGET_GLES
/** /**
@ -487,6 +498,7 @@ class MAGNUM_EXPORT AbstractTexture {
DepthStencil = GL_DEPTH_STENCIL, DepthStencil = GL_DEPTH_STENCIL,
#endif #endif
#ifndef MAGNUM_TARGET_GLES2
/** /**
* 16bit depth component. * 16bit depth component.
* @requires_gles30 (no extension providing this functionality) * @requires_gles30 (no extension providing this functionality)
@ -519,6 +531,7 @@ class MAGNUM_EXPORT AbstractTexture {
* @requires_gles30 (no extension providing this functionality) * @requires_gles30 (no extension providing this functionality)
*/ */
Depth32FloatStencil8 = GL_DEPTH32F_STENCIL8 Depth32FloatStencil8 = GL_DEPTH32F_STENCIL8
#endif
}; };
/** /**
@ -539,12 +552,14 @@ class MAGNUM_EXPORT AbstractTexture {
*/ */
class MAGNUM_EXPORT InternalFormat { class MAGNUM_EXPORT InternalFormat {
public: public:
#ifndef MAGNUM_TARGET_GLES2
/** /**
* @brief Constructor from component count and data type per component * @brief Constructor from component count and data type per component
* *
* @requires_gles30 (no extension providing this functionality) * @requires_gles30 (no extension providing this functionality)
*/ */
InternalFormat(Components components, ComponentType type); InternalFormat(Components components, ComponentType type);
#endif
/** @brief Constructor from named internal format */ /** @brief Constructor from named internal format */
inline constexpr InternalFormat(Format format): internalFormat(static_cast<GLint>(format)) {} inline constexpr InternalFormat(Format format): internalFormat(static_cast<GLint>(format)) {}
@ -791,6 +806,7 @@ class MAGNUM_EXPORT AbstractTexture {
GLuint _id; GLuint _id;
}; };
#ifndef MAGNUM_TARGET_GLES2
/** @relates AbstractTexture /** @relates AbstractTexture
@brief Convertor of component count and data type to InternalFormat @brief Convertor of component count and data type to InternalFormat
@ -806,6 +822,7 @@ inline AbstractTexture::InternalFormat operator|(AbstractTexture::Components com
inline AbstractTexture::InternalFormat operator|(AbstractTexture::ComponentType type, AbstractTexture::Components components) { inline AbstractTexture::InternalFormat operator|(AbstractTexture::ComponentType type, AbstractTexture::Components components) {
return AbstractTexture::InternalFormat(components, type); return AbstractTexture::InternalFormat(components, type);
} }
#endif
#ifndef DOXYGEN_GENERATING_OUTPUT #ifndef DOXYGEN_GENERATING_OUTPUT
#ifndef MAGNUM_TARGET_GLES #ifndef MAGNUM_TARGET_GLES

20
src/Buffer.h

@ -105,6 +105,7 @@ class MAGNUM_EXPORT Buffer {
AtomicCounter = GL_ATOMIC_COUNTER_BUFFER, AtomicCounter = GL_ATOMIC_COUNTER_BUFFER,
#endif #endif
#ifndef MAGNUM_TARGET_GLES2
/** /**
* Source for copies. See copy(). * Source for copies. See copy().
* @requires_gl31 Extension @extension{ARB,copy_buffer} * @requires_gl31 Extension @extension{ARB,copy_buffer}
@ -120,6 +121,7 @@ class MAGNUM_EXPORT Buffer {
* 2.0. * 2.0.
*/ */
CopyWrite = GL_COPY_WRITE_BUFFER, CopyWrite = GL_COPY_WRITE_BUFFER,
#endif
#ifndef MAGNUM_TARGET_GLES #ifndef MAGNUM_TARGET_GLES
/** /**
@ -138,7 +140,10 @@ class MAGNUM_EXPORT Buffer {
#endif #endif
/** Used for storing vertex indices. */ /** Used for storing vertex indices. */
ElementArray = GL_ELEMENT_ARRAY_BUFFER, ElementArray = GL_ELEMENT_ARRAY_BUFFER
#ifndef MAGNUM_TARGET_GLES2
,
/** /**
* Target for pixel pack operations. * Target for pixel pack operations.
@ -153,6 +158,7 @@ class MAGNUM_EXPORT Buffer {
* OpenGL ES 2.0. * OpenGL ES 2.0.
*/ */
PixelUnpack = GL_PIXEL_UNPACK_BUFFER, PixelUnpack = GL_PIXEL_UNPACK_BUFFER,
#endif
#ifndef MAGNUM_TARGET_GLES #ifndef MAGNUM_TARGET_GLES
/** /**
@ -170,6 +176,7 @@ class MAGNUM_EXPORT Buffer {
Texture = GL_TEXTURE_BUFFER, Texture = GL_TEXTURE_BUFFER,
#endif #endif
#ifndef MAGNUM_TARGET_GLES2
/** /**
* Target for transform feedback. * Target for transform feedback.
* @requires_gl30 Extension @extension{EXT,transform_feedback} * @requires_gl30 Extension @extension{EXT,transform_feedback}
@ -185,6 +192,7 @@ class MAGNUM_EXPORT Buffer {
* 2.0. * 2.0.
*/ */
Uniform = GL_UNIFORM_BUFFER Uniform = GL_UNIFORM_BUFFER
#endif
}; };
/** /**
@ -198,6 +206,7 @@ class MAGNUM_EXPORT Buffer {
*/ */
StreamDraw = GL_STREAM_DRAW, StreamDraw = GL_STREAM_DRAW,
#ifndef MAGNUM_TARGET_GLES2
/** /**
* Set once as output from an OpenGL command and used infequently * Set once as output from an OpenGL command and used infequently
* for drawing. * for drawing.
@ -213,12 +222,14 @@ class MAGNUM_EXPORT Buffer {
* is available in OpenGL ES 2.0. * is available in OpenGL ES 2.0.
*/ */
StreamCopy = GL_STREAM_COPY, StreamCopy = GL_STREAM_COPY,
#endif
/** /**
* Set once by the application and used frequently for drawing. * Set once by the application and used frequently for drawing.
*/ */
StaticDraw = GL_STATIC_DRAW, StaticDraw = GL_STATIC_DRAW,
#ifndef MAGNUM_TARGET_GLES2
/** /**
* Set once as output from an OpenGL command and queried many * Set once as output from an OpenGL command and queried many
* times by the application. * times by the application.
@ -234,12 +245,16 @@ class MAGNUM_EXPORT Buffer {
* is available in OpenGL ES 2.0. * is available in OpenGL ES 2.0.
*/ */
StaticCopy = GL_STATIC_COPY, StaticCopy = GL_STATIC_COPY,
#endif
/** /**
* Updated frequently by the application and used frequently * Updated frequently by the application and used frequently
* for drawing or copying to other images. * for drawing or copying to other images.
*/ */
DynamicDraw = GL_DYNAMIC_DRAW, DynamicDraw = GL_DYNAMIC_DRAW
#ifndef MAGNUM_TARGET_GLES2
,
/** /**
* Updated frequently as output from OpenGL command and queried * Updated frequently as output from OpenGL command and queried
@ -256,6 +271,7 @@ class MAGNUM_EXPORT Buffer {
* is available in OpenGL ES 2.0. * is available in OpenGL ES 2.0.
*/ */
DynamicCopy = GL_DYNAMIC_COPY DynamicCopy = GL_DYNAMIC_COPY
#endif
}; };
/** /**

2
src/BufferedImage.cpp

@ -17,6 +17,7 @@
namespace Magnum { namespace Magnum {
#ifndef MAGNUM_TARGET_GLES2
template<std::uint8_t dimensions> void BufferedImage<dimensions>::setData(const typename DimensionTraits<Dimensions, GLsizei>::VectorType& size, Components components, ComponentType type, const GLvoid* data, Buffer::Usage usage) { template<std::uint8_t dimensions> void BufferedImage<dimensions>::setData(const typename DimensionTraits<Dimensions, GLsizei>::VectorType& size, Components components, ComponentType type, const GLvoid* data, Buffer::Usage usage) {
_components = components; _components = components;
_type = type; _type = type;
@ -27,5 +28,6 @@ template<std::uint8_t dimensions> void BufferedImage<dimensions>::setData(const
template class BufferedImage<1>; template class BufferedImage<1>;
template class BufferedImage<2>; template class BufferedImage<2>;
template class BufferedImage<3>; template class BufferedImage<3>;
#endif
} }

4
src/BufferedImage.h

@ -15,9 +15,11 @@
GNU Lesser General Public License version 3 for more details. GNU Lesser General Public License version 3 for more details.
*/ */
#ifndef MAGNUM_TARGET_GLES2
/** @file /** @file
* @brief Class Magnum::BufferedImage, typedef Magnum::BufferedImage1D, Magnum::BufferedImage2D, Magnum::BufferedImage3D * @brief Class Magnum::BufferedImage, typedef Magnum::BufferedImage1D, Magnum::BufferedImage2D, Magnum::BufferedImage3D
*/ */
#endif
#include "Math/Vector3.h" #include "Math/Vector3.h"
#include "AbstractImage.h" #include "AbstractImage.h"
@ -27,6 +29,7 @@
namespace Magnum { namespace Magnum {
#ifndef MAGNUM_TARGET_GLES2
/** /**
@brief %Buffered image @brief %Buffered image
@ -117,6 +120,7 @@ typedef BufferedImage<2> BufferedImage2D;
/** @brief Three-dimensional buffered image */ /** @brief Three-dimensional buffered image */
typedef BufferedImage<3> BufferedImage3D; typedef BufferedImage<3> BufferedImage3D;
#endif
} }

5
src/Context.cpp

@ -160,8 +160,13 @@ Context* Context::_current = nullptr;
Context::Context() { Context::Context() {
/* Version */ /* Version */
#ifndef MAGNUM_TARGET_GLES2
glGetIntegerv(GL_MAJOR_VERSION, &_majorVersion); glGetIntegerv(GL_MAJOR_VERSION, &_majorVersion);
glGetIntegerv(GL_MINOR_VERSION, &_minorVersion); glGetIntegerv(GL_MINOR_VERSION, &_minorVersion);
#else
_majorVersion = 2;
_minorVersion = 0;
#endif
_version = static_cast<Version>(_majorVersion*100+_minorVersion*10); _version = static_cast<Version>(_majorVersion*100+_minorVersion*10);
/* Get first future (not supported) version */ /* Get first future (not supported) version */

2
src/Framebuffer.cpp

@ -51,6 +51,7 @@ void Framebuffer::read(const Math::Vector2<GLint>& offset, const Math::Vector2<G
image->setData(size, components, type, data); image->setData(size, components, type, data);
} }
#ifndef MAGNUM_TARGET_GLES2
void Framebuffer::read(const Math::Vector2<GLint>& offset, const Math::Vector2<GLsizei>& size, AbstractImage::Components components, AbstractImage::ComponentType type, BufferedImage2D* image, Buffer::Usage usage) { void Framebuffer::read(const Math::Vector2<GLint>& offset, const Math::Vector2<GLsizei>& size, AbstractImage::Components components, AbstractImage::ComponentType type, BufferedImage2D* image, Buffer::Usage usage) {
/* If the buffer doesn't have sufficient size, resize it */ /* If the buffer doesn't have sufficient size, resize it */
/** @todo Explicitly reset also when buffer usage changes */ /** @todo Explicitly reset also when buffer usage changes */
@ -60,5 +61,6 @@ void Framebuffer::read(const Math::Vector2<GLint>& offset, const Math::Vector2<G
image->buffer()->bind(Buffer::Target::PixelPack); image->buffer()->bind(Buffer::Target::PixelPack);
glReadPixels(offset.x(), offset.y(), size.x(), size.y(), static_cast<GLenum>(components), static_cast<GLenum>(type), nullptr); glReadPixels(offset.x(), offset.y(), size.x(), size.y(), static_cast<GLenum>(components), static_cast<GLenum>(type), nullptr);
} }
#endif
} }

11
src/Framebuffer.h

@ -29,12 +29,16 @@
namespace Magnum { namespace Magnum {
#ifndef MAGNUM_TARGET_GLES2
template<std::uint8_t> class BufferedImage; template<std::uint8_t> class BufferedImage;
#endif
template<std::uint8_t> class Image; template<std::uint8_t> class Image;
#ifndef MAGNUM_TARGET_GLES2
typedef BufferedImage<1> BufferedImage1D; typedef BufferedImage<1> BufferedImage1D;
typedef BufferedImage<2> BufferedImage2D; typedef BufferedImage<2> BufferedImage2D;
typedef BufferedImage<3> BufferedImage3D; typedef BufferedImage<3> BufferedImage3D;
#endif
typedef Image<1> Image1D; typedef Image<1> Image1D;
typedef Image<2> Image2D; typedef Image<2> Image2D;
typedef Image<3> Image3D; typedef Image<3> Image3D;
@ -433,8 +437,10 @@ class MAGNUM_EXPORT Framebuffer {
enum class BlendEquation: GLenum { enum class BlendEquation: GLenum {
Add = GL_FUNC_ADD, /**< `source + destination` */ Add = GL_FUNC_ADD, /**< `source + destination` */
Subtract = GL_FUNC_SUBTRACT, /**< `source - destination` */ Subtract = GL_FUNC_SUBTRACT, /**< `source - destination` */
ReverseSubtract = GL_FUNC_REVERSE_SUBTRACT, /**< `destination - source` */ ReverseSubtract = GL_FUNC_REVERSE_SUBTRACT /**< `destination - source` */
#ifndef MAGNUM_TARGET_GLES2
,
/** /**
* `min(source, destination)` * `min(source, destination)`
* @requires_gles30 %Extension @es_extension2{EXT,blend_minmax,blend_minmax} * @requires_gles30 %Extension @es_extension2{EXT,blend_minmax,blend_minmax}
@ -446,6 +452,7 @@ class MAGNUM_EXPORT Framebuffer {
* @requires_gles30 %Extension @es_extension2{EXT,blend_minmax,blend_minmax} * @requires_gles30 %Extension @es_extension2{EXT,blend_minmax,blend_minmax}
*/ */
Max = GL_MAX Max = GL_MAX
#endif
}; };
/** /**
@ -1262,6 +1269,7 @@ class MAGNUM_EXPORT Framebuffer {
*/ */
static void read(const Math::Vector2<GLint>& offset, const Math::Vector2<GLsizei>& size, AbstractImage::Components components, AbstractImage::ComponentType type, Image2D* image); static void read(const Math::Vector2<GLint>& offset, const Math::Vector2<GLsizei>& size, AbstractImage::Components components, AbstractImage::ComponentType type, Image2D* image);
#ifndef MAGNUM_TARGET_GLES2
/** /**
* @brief Read block of pixels from framebuffer to buffered image * @brief Read block of pixels from framebuffer to buffered image
* @param offset Offset in the framebuffer * @param offset Offset in the framebuffer
@ -1276,6 +1284,7 @@ class MAGNUM_EXPORT Framebuffer {
* @requires_gles30 Pixel buffer objects are not available in OpenGL ES 2.0. * @requires_gles30 Pixel buffer objects are not available in OpenGL ES 2.0.
*/ */
static void read(const Math::Vector2<GLint>& offset, const Math::Vector2<GLsizei>& size, AbstractImage::Components components, AbstractImage::ComponentType type, BufferedImage2D* image, Buffer::Usage usage); static void read(const Math::Vector2<GLint>& offset, const Math::Vector2<GLsizei>& size, AbstractImage::Components components, AbstractImage::ComponentType type, BufferedImage2D* image, Buffer::Usage usage);
#endif
/*@}*/ /*@}*/

16
src/Implementation/BufferState.cpp

@ -21,14 +21,18 @@ namespace Magnum { namespace Implementation {
const Buffer::Target BufferState::targetForIndex[] = { const Buffer::Target BufferState::targetForIndex[] = {
Buffer::Target::Array, Buffer::Target::Array,
Buffer::Target::ElementArray
#ifndef MAGNUM_TARGET_GLES2
,
Buffer::Target::CopyRead, Buffer::Target::CopyRead,
Buffer::Target::CopyWrite, Buffer::Target::CopyWrite,
Buffer::Target::ElementArray,
Buffer::Target::PixelPack, Buffer::Target::PixelPack,
Buffer::Target::PixelUnpack, Buffer::Target::PixelUnpack,
Buffer::Target::TransformFeedback, Buffer::Target::TransformFeedback,
Buffer::Target::Uniform, Buffer::Target::Uniform
#endif
#ifndef MAGNUM_TARGET_GLES #ifndef MAGNUM_TARGET_GLES
,
Buffer::Target::AtomicCounter, Buffer::Target::AtomicCounter,
Buffer::Target::DispatchIndirect, Buffer::Target::DispatchIndirect,
Buffer::Target::DrawIndirect, Buffer::Target::DrawIndirect,
@ -40,13 +44,15 @@ const Buffer::Target BufferState::targetForIndex[] = {
std::size_t BufferState::indexForTarget(Buffer::Target target) { std::size_t BufferState::indexForTarget(Buffer::Target target) {
switch(target) { switch(target) {
case Buffer::Target::Array: return 1; case Buffer::Target::Array: return 1;
case Buffer::Target::CopyRead: return 2; case Buffer::Target::ElementArray: return 2;
case Buffer::Target::CopyWrite: return 3; #ifndef MAGNUM_TARGET_GLES2
case Buffer::Target::ElementArray: return 4; case Buffer::Target::CopyRead: return 3;
case Buffer::Target::CopyWrite: return 4;
case Buffer::Target::PixelPack: return 5; case Buffer::Target::PixelPack: return 5;
case Buffer::Target::PixelUnpack: return 6; case Buffer::Target::PixelUnpack: return 6;
case Buffer::Target::TransformFeedback: return 7; case Buffer::Target::TransformFeedback: return 7;
case Buffer::Target::Uniform: return 8; case Buffer::Target::Uniform: return 8;
#endif
#ifndef MAGNUM_TARGET_GLES #ifndef MAGNUM_TARGET_GLES
case Buffer::Target::AtomicCounter: return 9; case Buffer::Target::AtomicCounter: return 9;
case Buffer::Target::DispatchIndirect: return 10; case Buffer::Target::DispatchIndirect: return 10;

4
src/Implementation/BufferState.h

@ -25,7 +25,11 @@ struct BufferState {
#ifndef MAGNUM_TARGET_GLES #ifndef MAGNUM_TARGET_GLES
static const std::size_t TargetCount = 13+1; static const std::size_t TargetCount = 13+1;
#else #else
#ifndef MAGNUM_TARGET_GLES2
static const std::size_t TargetCount = 8+1; static const std::size_t TargetCount = 8+1;
#else
static const std::size_t TargetCount = 2+1;
#endif
#endif #endif
/* Target <-> index mapping */ /* Target <-> index mapping */

2
src/Renderbuffer.cpp

@ -17,6 +17,7 @@
namespace Magnum { namespace Magnum {
#ifndef MAGNUM_TARGET_GLES2
Renderbuffer::InternalFormat::InternalFormat(Components components, ComponentType type) { Renderbuffer::InternalFormat::InternalFormat(Components components, ComponentType type) {
#ifndef MAGNUM_TARGET_GLES #ifndef MAGNUM_TARGET_GLES
#define internalFormatSwitch(c) switch(type) { \ #define internalFormatSwitch(c) switch(type) { \
@ -71,5 +72,6 @@ Renderbuffer::InternalFormat::InternalFormat(Components components, ComponentTyp
internalFormatSwitch(RGBA) internalFormatSwitch(RGBA)
#undef internalFormatSwitch #undef internalFormatSwitch
} }
#endif
} }

24
src/Renderbuffer.h

@ -42,6 +42,7 @@ class Renderbuffer {
public: public:
/** @{ @name Internal renderbuffer formats */ /** @{ @name Internal renderbuffer formats */
#ifndef MAGNUM_TARGET_GLES2
/** /**
* @copybrief AbstractTexture::Components * @copybrief AbstractTexture::Components
* *
@ -67,6 +68,7 @@ class Renderbuffer {
, NormalizedUnsignedShort , NormalizedUnsignedShort
#endif #endif
}; };
#endif
/** /**
* @copybrief AbstractTexture::Format * @copybrief AbstractTexture::Format
@ -76,15 +78,27 @@ class Renderbuffer {
* compressed formats, but with added separate stencil index. * compressed formats, but with added separate stencil index.
*/ */
enum class Format: GLenum { enum class Format: GLenum {
Red = GL_RED, RedGreen = GL_RG, RGBA = GL_RGBA, #ifndef MAGNUM_TARGET_GLES2
Red = GL_RED, RedGreen = GL_RG,
#endif
RGBA = GL_RGBA,
#ifndef MAGNUM_TARGET_GLES #ifndef MAGNUM_TARGET_GLES
BGRA = GL_BGRA, BGRA = GL_BGRA,
#endif #endif
#ifndef MAGNUM_TARGET_GLES2
SRGBA = GL_SRGB8_ALPHA8, RGB10Alpha2 = GL_RGB10_A2, SRGBA = GL_SRGB8_ALPHA8, RGB10Alpha2 = GL_RGB10_A2,
RGB10AlphaUnsigned2 = GL_RGB10_A2UI, RGB5Alpha1 = GL_RGB5_A1, RGB10AlphaUnsigned2 = GL_RGB10_A2UI,
RGBA4 = GL_RGBA4, RFloat11GFloat11BFloat10 = GL_R11F_G11F_B10F, #endif
RGB5Alpha1 = GL_RGB5_A1,
RGBA4 = GL_RGBA4,
#ifndef MAGNUM_TARGET_GLES2
RFloat11GFloat11BFloat10 = GL_R11F_G11F_B10F,
#endif
/* 1.5.6 <= GLEW < 1.8.0 doesn't have this, even if there is /* 1.5.6 <= GLEW < 1.8.0 doesn't have this, even if there is
GL_ARB_ES2_compatibility */ GL_ARB_ES2_compatibility */
@ -156,8 +170,10 @@ class Renderbuffer {
/** @copydoc AbstractTexture::InternalFormat */ /** @copydoc AbstractTexture::InternalFormat */
class MAGNUM_EXPORT InternalFormat { class MAGNUM_EXPORT InternalFormat {
public: public:
#ifndef MAGNUM_TARGET_GLES2
/** @copydoc AbstractTexture::InternalFormat::InternalFormat(AbstractTexture::Components, AbstractTexture::ComponentType) */ /** @copydoc AbstractTexture::InternalFormat::InternalFormat(AbstractTexture::Components, AbstractTexture::ComponentType) */
InternalFormat(Components components, ComponentType type); InternalFormat(Components components, ComponentType type);
#endif
/** @copydoc AbstractTexture::InternalFormat::InternalFormat(AbstractTexture::Format) */ /** @copydoc AbstractTexture::InternalFormat::InternalFormat(AbstractTexture::Format) */
inline constexpr InternalFormat(Format format): internalFormat(static_cast<GLenum>(format)) {} inline constexpr InternalFormat(Format format): internalFormat(static_cast<GLenum>(format)) {}
@ -223,6 +239,7 @@ class Renderbuffer {
GLuint renderbuffer; GLuint renderbuffer;
}; };
#ifndef MAGNUM_TARGET_GLES2
/** @relates Renderbuffer /** @relates Renderbuffer
@brief Convertor of component count and data type to InternalFormat @brief Convertor of component count and data type to InternalFormat
@ -237,6 +254,7 @@ inline Renderbuffer::InternalFormat operator|(Renderbuffer::Components component
inline Renderbuffer::InternalFormat operator|(Renderbuffer::ComponentType type, Renderbuffer::Components components) { inline Renderbuffer::InternalFormat operator|(Renderbuffer::ComponentType type, Renderbuffer::Components components) {
return Renderbuffer::InternalFormat(components, type); return Renderbuffer::InternalFormat(components, type);
} }
#endif
} }

Loading…
Cancel
Save