source/Graphics/Texture.cpp: cleaning up pixel store/format code abit.
This commit is contained in:
parent
151baaa8ff
commit
1a39c4bede
1 changed files with 22 additions and 18 deletions
|
|
@ -39,7 +39,9 @@ Texture::~Texture()
|
||||||
|
|
||||||
void Texture::create(unsigned width, unsigned heigth, PixelFormat format)
|
void Texture::create(unsigned width, unsigned heigth, PixelFormat format)
|
||||||
{
|
{
|
||||||
std::vector<unsigned char> empty_pixels(width * heigth);
|
// TODO: Should have getBpp() in PixelFormat instead.
|
||||||
|
// Always allocate 32 bit (4 byte) pixel buffer for now.
|
||||||
|
std::vector<unsigned char> empty_pixels(width * heigth * 4);
|
||||||
|
|
||||||
if (!m_id) {
|
if (!m_id) {
|
||||||
glGenTextures(1, &m_id);
|
glGenTextures(1, &m_id);
|
||||||
|
|
@ -50,9 +52,15 @@ void Texture::create(unsigned width, unsigned heigth, PixelFormat format)
|
||||||
m_size = vec2u(width, heigth);
|
m_size = vec2u(width, heigth);
|
||||||
m_format = format;
|
m_format = format;
|
||||||
|
|
||||||
|
if (format == PixelFormat::PF_RGBA) {
|
||||||
|
glPixelStorei(GL_UNPACK_ALIGNMENT, 4);
|
||||||
|
} else {
|
||||||
|
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
|
||||||
|
}
|
||||||
|
|
||||||
glTexImage2D(GL_TEXTURE_2D, 0,
|
glTexImage2D(GL_TEXTURE_2D, 0,
|
||||||
pixelFormatToInternal(format), width, heigth, 0,
|
pixelFormatToInternal(format), width, heigth, 0,
|
||||||
GL_RED, GL_UNSIGNED_BYTE, &empty_pixels[0]);
|
pixelFormatToGL(format), GL_UNSIGNED_BYTE, &empty_pixels[0]);
|
||||||
|
|
||||||
setSmooth(true);
|
setSmooth(true);
|
||||||
setRepeat(false);
|
setRepeat(false);
|
||||||
|
|
@ -79,16 +87,15 @@ void Texture::create(const Image& image)
|
||||||
|
|
||||||
enable();
|
enable();
|
||||||
|
|
||||||
if (image.getFormat() == PixelFormat::PF_Alpha) {
|
if (image.getBpp() == 32) {
|
||||||
glFormat = GL_R8;
|
|
||||||
srcFormat = GL_RED;
|
|
||||||
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
|
|
||||||
} else {
|
|
||||||
glFormat = GL_RGBA;
|
|
||||||
srcFormat = GL_RGBA;
|
|
||||||
glPixelStorei(GL_UNPACK_ALIGNMENT, 4);
|
glPixelStorei(GL_UNPACK_ALIGNMENT, 4);
|
||||||
|
} else {
|
||||||
|
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
srcFormat = pixelFormatToGL(image.getFormat());
|
||||||
|
glFormat = pixelFormatToInternal(image.getFormat());
|
||||||
|
|
||||||
glTexImage2D(GL_TEXTURE_2D, 0, glFormat, m_size.x, m_size.y,
|
glTexImage2D(GL_TEXTURE_2D, 0, glFormat, m_size.x, m_size.y,
|
||||||
0, srcFormat, GL_UNSIGNED_BYTE, image.getPixels());
|
0, srcFormat, GL_UNSIGNED_BYTE, image.getPixels());
|
||||||
|
|
||||||
|
|
@ -140,14 +147,14 @@ void Texture::update(vec2u pos, const Image& image)
|
||||||
|
|
||||||
enable();
|
enable();
|
||||||
|
|
||||||
if (image.getFormat() == PixelFormat::PF_Alpha) {
|
if (image.getFormat() == PixelFormat::PF_RGBA) {
|
||||||
format = GL_RED;
|
|
||||||
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
|
|
||||||
} else {
|
|
||||||
format = GL_RGBA;
|
|
||||||
glPixelStorei(GL_UNPACK_ALIGNMENT, 4);
|
glPixelStorei(GL_UNPACK_ALIGNMENT, 4);
|
||||||
|
} else {
|
||||||
|
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
format = pixelFormatToGL(image.getFormat());
|
||||||
|
|
||||||
glTexSubImage2D(GL_TEXTURE_2D, 0, pos.x, pos.y,
|
glTexSubImage2D(GL_TEXTURE_2D, 0, pos.x, pos.y,
|
||||||
image.getWidth(), image.getHeight(),
|
image.getWidth(), image.getHeight(),
|
||||||
format, GL_UNSIGNED_BYTE, image.getPixels());
|
format, GL_UNSIGNED_BYTE, image.getPixels());
|
||||||
|
|
@ -169,10 +176,7 @@ Image Texture::copyToImage() const
|
||||||
|
|
||||||
enable();
|
enable();
|
||||||
|
|
||||||
//glPixelStorei(GL_PACK_ALIGNMENT, 1);
|
//glPixelStorei(GL_PACK_ALIGNMENT, 4);
|
||||||
|
|
||||||
//glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
|
|
||||||
//glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
|
|
||||||
|
|
||||||
glGetTexImage(GL_TEXTURE_2D, 0,
|
glGetTexImage(GL_TEXTURE_2D, 0,
|
||||||
pixelFormatToGL(m_format),
|
pixelFormatToGL(m_format),
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue