namespace Msp {
namespace GL {
-int OpenGLTexture::swizzle_orders[] =
-{
- GL_RED, GL_GREEN, GL_BLUE, GL_ALPHA,
- GL_RED, GL_RED, GL_RED, GL_ONE,
- GL_RED, GL_RED, GL_RED, GL_GREEN,
- GL_BLUE, GL_GREEN, GL_RED, GL_ALPHA
-};
-
OpenGLTexture *OpenGLTexture::scratch_binding = 0;
OpenGLTexture::OpenGLTexture(unsigned t):
}
}
+OpenGLTexture::OpenGLTexture(OpenGLTexture &&other):
+ id(other.id),
+ target(other.target),
+ debug_name(move(other.debug_name))
+{
+ other.id = 0;
+}
+
OpenGLTexture::~OpenGLTexture()
{
if(this==scratch_binding)
void OpenGLTexture::apply_swizzle()
{
- Texture::FormatSwizzle swizzle = static_cast<const Texture *>(this)->swizzle;
- if(swizzle==Texture::NO_SWIZZLE)
+ ComponentSwizzle swizzle = static_cast<const Texture *>(this)->swizzle;
+ if(swizzle==NO_SWIZZLE)
return;
+ const int *swizzle_order = get_gl_swizzle(swizzle);
if(get_backend_api()==OPENGL_ES)
{
- set_parameter_i(GL_TEXTURE_SWIZZLE_R, swizzle_orders[swizzle*4]);
- set_parameter_i(GL_TEXTURE_SWIZZLE_G, swizzle_orders[swizzle*4+1]);
- set_parameter_i(GL_TEXTURE_SWIZZLE_B, swizzle_orders[swizzle*4+2]);
- set_parameter_i(GL_TEXTURE_SWIZZLE_A, swizzle_orders[swizzle*4+3]);
+ set_parameter_i(GL_TEXTURE_SWIZZLE_R, swizzle_order[0]);
+ set_parameter_i(GL_TEXTURE_SWIZZLE_G, swizzle_order[1]);
+ set_parameter_i(GL_TEXTURE_SWIZZLE_B, swizzle_order[2]);
+ set_parameter_i(GL_TEXTURE_SWIZZLE_A, swizzle_order[3]);
}
else
{
if(ARB_direct_state_access)
- glTextureParameteriv(id, GL_TEXTURE_SWIZZLE_RGBA, swizzle_orders+swizzle*4);
+ glTextureParameteriv(id, GL_TEXTURE_SWIZZLE_RGBA, swizzle_order);
else
- glTexParameteriv(target, GL_TEXTURE_SWIZZLE_RGBA, swizzle_orders+swizzle*4);
+ glTexParameteriv(target, GL_TEXTURE_SWIZZLE_RGBA, swizzle_order);
}
}