X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fbackends%2Fopengl%2Ftexture_backend.cpp;h=ebfeb0255b2083d8a04b8b49ff0503302e361333;hb=8a8cce8ef4ee28b3572a72958b8b407759f9f826;hp=fe4679f63d4fe0815a7b808a2f13f02d32a1d32b;hpb=160e9eea29bd10034733d59507fa1bcca36be401;p=libs%2Fgl.git diff --git a/source/backends/opengl/texture_backend.cpp b/source/backends/opengl/texture_backend.cpp index fe4679f6..ebfeb025 100644 --- a/source/backends/opengl/texture_backend.cpp +++ b/source/backends/opengl/texture_backend.cpp @@ -12,23 +12,11 @@ using namespace std; 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) { @@ -37,6 +25,14 @@ OpenGLTexture::OpenGLTexture(unsigned t, bool create): } } +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) @@ -45,10 +41,10 @@ OpenGLTexture::~OpenGLTexture() 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 @@ -67,23 +63,24 @@ void OpenGLTexture::require_swizzle() void OpenGLTexture::apply_swizzle() { - Texture::FormatSwizzle swizzle = static_cast(this)->swizzle; - if(swizzle==Texture::NO_SWIZZLE) + ComponentSwizzle swizzle = static_cast(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); } }