@@ -445,35 +445,37 @@ static void drawOpenGLImage(const OpenGLImage& image, const Point<int>& pos, con
445445
446446OpenGLImage::OpenGLImage ()
447447 : ImageBase(),
448- textureId(0 ),
449- setupCalled(false )
448+ setupCalled(false ),
449+ textureInit(false ),
450+ textureId(0 )
450451{
451- glGenTextures (1 , &textureId);
452- DISTRHO_SAFE_ASSERT (textureId != 0 );
453452}
454453
455454OpenGLImage::OpenGLImage (const char * const rdata, const uint w, const uint h, const ImageFormat fmt)
456455 : ImageBase(rdata, w, h, fmt),
457- textureId(0 ),
458- setupCalled(false )
456+ setupCalled(false ),
457+ textureInit(true ),
458+ textureId(0 )
459459{
460460 glGenTextures (1 , &textureId);
461461 DISTRHO_SAFE_ASSERT (textureId != 0 );
462462}
463463
464464OpenGLImage::OpenGLImage (const char * const rdata, const Size<uint>& s, const ImageFormat fmt)
465465 : ImageBase(rdata, s, fmt),
466- textureId(0 ),
467- setupCalled(false )
466+ setupCalled(false ),
467+ textureInit(true ),
468+ textureId(0 )
468469{
469470 glGenTextures (1 , &textureId);
470471 DISTRHO_SAFE_ASSERT (textureId != 0 );
471472}
472473
473474OpenGLImage::OpenGLImage (const OpenGLImage& image)
474475 : ImageBase(image),
475- textureId(0 ),
476- setupCalled(false )
476+ setupCalled(false ),
477+ textureInit(true ),
478+ textureId(0 )
477479{
478480 glGenTextures (1 , &textureId);
479481 DISTRHO_SAFE_ASSERT (textureId != 0 );
@@ -487,6 +489,12 @@ OpenGLImage::~OpenGLImage()
487489
488490void OpenGLImage::loadFromMemory (const char * const rdata, const Size<uint>& s, const ImageFormat fmt) noexcept
489491{
492+ if (!textureInit)
493+ {
494+ textureInit = true ;
495+ glGenTextures (1 , &textureId);
496+ DISTRHO_SAFE_ASSERT (textureId != 0 );
497+ }
490498 setupCalled = false ;
491499 ImageBase::loadFromMemory (rdata, s, fmt);
492500}
@@ -502,23 +510,33 @@ OpenGLImage& OpenGLImage::operator=(const OpenGLImage& image) noexcept
502510 size = image.size ;
503511 format = image.format ;
504512 setupCalled = false ;
513+
514+ if (image.isValid () && !textureInit)
515+ {
516+ textureInit = true ;
517+ glGenTextures (1 , &textureId);
518+ DISTRHO_SAFE_ASSERT (textureId != 0 );
519+ }
520+
505521 return *this ;
506522}
507523
508524// deprecated calls
509525OpenGLImage::OpenGLImage (const char * const rdata, const uint w, const uint h, const GLenum fmt)
510526 : ImageBase(rdata, w, h, asDISTRHOImageFormat(fmt)),
511- textureId(0 ),
512- setupCalled(false )
527+ setupCalled(false ),
528+ textureInit(true ),
529+ textureId(0 )
513530{
514531 glGenTextures (1 , &textureId);
515532 DISTRHO_SAFE_ASSERT (textureId != 0 );
516533}
517534
518535OpenGLImage::OpenGLImage (const char * const rdata, const Size<uint>& s, const GLenum fmt)
519536 : ImageBase(rdata, s, asDISTRHOImageFormat(fmt)),
520- textureId(0 ),
521- setupCalled(false )
537+ setupCalled(false ),
538+ textureInit(true ),
539+ textureId(0 )
522540{
523541 glGenTextures (1 , &textureId);
524542 DISTRHO_SAFE_ASSERT (textureId != 0 );
0 commit comments