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, bool create):
- id(0),
+OpenGLTexture::OpenGLTexture(unsigned t):
target(t)
{
- if(create)
- generate_id();
-
static bool alignment_init = false;
if(!alignment_init)
{
glDeleteTextures(1, &id);
}
-void OpenGLTexture::generate_id()
+void OpenGLTexture::create()
{
if(id)
- throw invalid_operation("OpenGLTexture::generate_id");
+ throw invalid_operation("OpenGLTexture::create");
if(ARB_direct_state_access)
glCreateTextures(target, 1, &id);
else
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);
}
}