Browse Source

Fix last commit

gh-pages
falkTX 11 years ago
parent
commit
a4ea9b423d
2 changed files with 42 additions and 57 deletions
  1. +4
    -5
      dgl/Image.hpp
  2. +38
    -52
      dgl/src/Image.cpp

+ 4
- 5
dgl/Image.hpp View File

@@ -69,13 +69,13 @@ public:
Load image data from memory. Load image data from memory.
@note @a rawData must remain valid for the lifetime of this Image. @note @a rawData must remain valid for the lifetime of this Image.
*/ */
void loadFromMemory(const char* rawData, int width, int height, GLenum format = GL_BGRA, GLenum type = GL_UNSIGNED_BYTE);
void loadFromMemory(const char* rawData, int width, int height, GLenum format = GL_BGRA, GLenum type = GL_UNSIGNED_BYTE) noexcept;


/** /**
Load image data from memory. Load image data from memory.
@note @a rawData must remain valid for the lifetime of this Image. @note @a rawData must remain valid for the lifetime of this Image.
*/ */
void loadFromMemory(const char* rawData, const Size<int>& size, GLenum format = GL_BGRA, GLenum type = GL_UNSIGNED_BYTE);
void loadFromMemory(const char* rawData, const Size<int>& size, GLenum format = GL_BGRA, GLenum type = GL_UNSIGNED_BYTE) noexcept;


/** /**
Check if this image is valid. Check if this image is valid.
@@ -127,7 +127,7 @@ public:
*/ */
void drawAt(const Point<int>& pos); void drawAt(const Point<int>& pos);


Image& operator=(const Image& image);
Image& operator=(const Image& image) noexcept;
bool operator==(const Image& image) const noexcept; bool operator==(const Image& image) const noexcept;
bool operator!=(const Image& image) const noexcept; bool operator!=(const Image& image) const noexcept;


@@ -137,8 +137,7 @@ private:
GLenum fFormat; GLenum fFormat;
GLenum fType; GLenum fType;
GLuint fTextureId; GLuint fTextureId;

void _setup();
bool fIsReady;
}; };


// ----------------------------------------------------------------------- // -----------------------------------------------------------------------


+ 38
- 52
dgl/src/Image.cpp View File

@@ -25,9 +25,10 @@ Image::Image()
fSize(0, 0), fSize(0, 0),
fFormat(0), fFormat(0),
fType(0), fType(0),
fTextureId(0)
fTextureId(0),
fIsReady(false)
{ {
_setup();
glGenTextures(1, &fTextureId);
} }


Image::Image(const char* rawData, int width, int height, GLenum format, GLenum type) Image::Image(const char* rawData, int width, int height, GLenum format, GLenum type)
@@ -35,9 +36,10 @@ Image::Image(const char* rawData, int width, int height, GLenum format, GLenum t
fSize(width, height), fSize(width, height),
fFormat(format), fFormat(format),
fType(type), fType(type),
fTextureId(0)
fTextureId(0),
fIsReady(false)
{ {
_setup();
glGenTextures(1, &fTextureId);
} }


Image::Image(const char* rawData, const Size<int>& size, GLenum format, GLenum type) Image::Image(const char* rawData, const Size<int>& size, GLenum format, GLenum type)
@@ -45,9 +47,10 @@ Image::Image(const char* rawData, const Size<int>& size, GLenum format, GLenum t
fSize(size), fSize(size),
fFormat(format), fFormat(format),
fType(type), fType(type),
fTextureId(0)
fTextureId(0),
fIsReady(false)
{ {
_setup();
glGenTextures(1, &fTextureId);
} }


Image::Image(const Image& image) Image::Image(const Image& image)
@@ -55,9 +58,10 @@ Image::Image(const Image& image)
fSize(image.fSize), fSize(image.fSize),
fFormat(image.fFormat), fFormat(image.fFormat),
fType(image.fType), fType(image.fType),
fTextureId(0)
fTextureId(0),
fIsReady(false)
{ {
_setup();
glGenTextures(1, &fTextureId);
} }


Image::~Image() Image::~Image()
@@ -69,27 +73,18 @@ Image::~Image()
} }
} }


void Image::loadFromMemory(const char* rawData, int width, int height, GLenum format, GLenum type)
void Image::loadFromMemory(const char* rawData, int width, int height, GLenum format, GLenum type) noexcept
{ {
loadFromMemory(rawData, Size<int>(width, height), format, type); loadFromMemory(rawData, Size<int>(width, height), format, type);
} }


void Image::loadFromMemory(const char* rawData, const Size<int>& size, GLenum format, GLenum type)
void Image::loadFromMemory(const char* rawData, const Size<int>& size, GLenum format, GLenum type) noexcept
{ {
fRawData = rawData; fRawData = rawData;
fSize = size; fSize = size;
fFormat = format; fFormat = format;
fType = type; fType = type;

glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, fTextureId);

glPixelStorei(GL_PACK_ALIGNMENT, 1);
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, size.getWidth(), size.getHeight(), 0, format, type, rawData);

glBindTexture(GL_TEXTURE_2D, 0);
glDisable(GL_TEXTURE_2D);
fIsReady = false;
} }


bool Image::isValid() const noexcept bool Image::isValid() const noexcept
@@ -145,6 +140,23 @@ void Image::drawAt(const Point<int>& pos)
glEnable(GL_TEXTURE_2D); glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, fTextureId); glBindTexture(GL_TEXTURE_2D, fTextureId);


if (! fIsReady)
{
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER);

static const float trans[] = { 0.0f, 0.0f, 0.0f, 0.0f };
glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_BORDER_COLOR, trans);

glPixelStorei(GL_PACK_ALIGNMENT, 1);
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, fSize.getWidth(), fSize.getHeight(), 0, fFormat, fType, fRawData);

fIsReady = true;
}

Rectangle<int>(pos, fSize).draw(); Rectangle<int>(pos, fSize).draw();


glBindTexture(GL_TEXTURE_2D, 0); glBindTexture(GL_TEXTURE_2D, 0);
@@ -153,9 +165,13 @@ void Image::drawAt(const Point<int>& pos)


// ----------------------------------------------------------------------- // -----------------------------------------------------------------------


Image& Image::operator=(const Image& image)
Image& Image::operator=(const Image& image) noexcept
{ {
loadFromMemory(image.fRawData, image.fSize, image.fFormat, image.fType);
fRawData = image.fRawData;
fSize = image.fSize;
fFormat = image.fFormat;
fType = image.fType;
fIsReady = false;
return *this; return *this;
} }


@@ -171,34 +187,4 @@ bool Image::operator!=(const Image& image) const noexcept


// ----------------------------------------------------------------------- // -----------------------------------------------------------------------


void Image::_setup()
{
glGenTextures(1, &fTextureId);

DISTRHO_SAFE_ASSERT_RETURN(fTextureId != 0,);

glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, fTextureId);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER);

static const float trans[] = { 0.0f, 0.0f, 0.0f, 0.0f };
glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_BORDER_COLOR, trans);

if (fRawData != nullptr)
{
glPixelStorei(GL_PACK_ALIGNMENT, 1);
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, fSize.getWidth(), fSize.getHeight(), 0, fFormat, fType, fRawData);
}

glBindTexture(GL_TEXTURE_2D, 0);
glDisable(GL_TEXTURE_2D);
}

// -----------------------------------------------------------------------

END_NAMESPACE_DGL END_NAMESPACE_DGL

Loading…
Cancel
Save