/****************************************************************************** * File - texture.h * Author - Joey Pollack * Date - 2022/07/14 (y/m/d) * Mod Date - 2022/07/14 (y/m/d) * Description - OpenGL texture 2D ******************************************************************************/ #include "texture.h" #include namespace lunarium { Texture::Texture() : mGLID(0), mWidth(0), mHeight(0), mFormat(TextureFormat::RGBA) { } Texture* Texture::Create(u8* data, u32 width, u32 height, TextureFormat format) { u32 formats[2] = { GL_RGB, GL_RGBA }; Texture* t = new Texture(); t->mFormat = format; t->mWidth = width; t->mHeight = height; glGenTextures(1, &t->mGLID); t->Bind(); glTexImage2D(GL_TEXTURE_2D, 0, formats[format], width, height, 0, formats[format], GL_UNSIGNED_BYTE, data); glGenerateMipmap(GL_TEXTURE_2D); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); t->Unbind(); return t; } void Texture::Destroy(Texture** ppTex) { (*ppTex)->Unbind(); glDeleteTextures(1, &(*ppTex)->mGLID); (*ppTex) = nullptr; } void Texture::Bind() const { glBindTexture(GL_TEXTURE_2D, mGLID); } void Texture::Unbind() const { glBindTexture(GL_TEXTURE_2D, 0); } u32 Texture::GetGLID() const { return mGLID; } u64 Texture::GetGLID64() const { return (u64) mGLID; } TextureFormat Texture::GetFormat() const { return mFormat; } u32 Texture::GetWidth() const { return mWidth; } u32 Texture::GetHeight() const { return mHeight; } u8* Texture::GetPixels() const { u32 format_size[2] = { 3, 4 }; u8* buffer = new u8[mWidth * mHeight * format_size[mFormat]]; Bind(); glGetTexImage(GL_TEXTURE_2D, 0, mFormat, GL_UNSIGNED_BYTE, (void*)buffer); Unbind(); return buffer; } }