4#define STB_IMAGE_IMPLEMENTATION
5#include <stb/stb_image.h>
7#define STB_IMAGE_WRITE_IMPLEMENTATION
8#include "stb/stb_image_write.h"
12Texture2D::Texture2D(uint32_t width, uint32_t height)
13 : m_Width(width), m_Height(height)
15 m_InternalFormat = GL_RGB8;
16 m_DataFormat = GL_RGB;
17 m_Data =
new unsigned char[width * height * 3];
18 glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
19 glGenTextures(1, &m_RendererID);
20 glBindTexture(GL_TEXTURE_2D, m_RendererID);
21 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
22 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
23 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
24 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
25 glGenerateMipmap(GL_TEXTURE_2D);
28Texture2D::Texture2D(
const std::string path,
bool preserveData,
bool readAlpha)
31 int width, height, channels;
32 stbi_set_flip_vertically_on_load(0);
33 unsigned char *data =
nullptr;
37 data = stbi_load(path.c_str(), &width, &height, &channels, 0);
42 data = stbi_load(path.c_str(), &width, &height, &channels, 3);
50 glGenTextures(1, &m_RendererID);
51 glBindTexture(GL_TEXTURE_2D, m_RendererID);
52 glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
56 glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB8, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, data);
61 glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB8, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, data);
64 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
65 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
66 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
67 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
68 glGenerateMipmap(GL_TEXTURE_2D);
77 stbi_image_free(data);
83 std::cout <<
"Failed to load texture : " << path << std::endl;
87Texture2D::~Texture2D()
91 glDeleteTextures(1, &m_RendererID);
95void Texture2D::SetData(
void *data, uint32_t size,
bool alpha)
97 glBindTexture(GL_TEXTURE_2D, m_RendererID);
101 glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB8, m_Width, m_Height, 0, GL_RGBA, GL_UNSIGNED_BYTE, data);
106 glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB8, m_Width, m_Height, 0, GL_RGB, GL_UNSIGNED_BYTE, data);
109 glGenerateMipmap(GL_TEXTURE_2D);
112void Texture2D::DeleteData()
116 stbi_image_free(m_Data);
120void Texture2D::Bind(uint32_t slot)
const
122 glActiveTexture(GL_TEXTURE0 + slot);
123 glBindTexture(GL_TEXTURE_2D, m_RendererID);
126void Texture2D::Resize(
int width,
int height,
bool resetOpenGL)
128 if (m_Width == width && m_Height == height)
138 unsigned char *data = (
unsigned char *)malloc(width * height * 3 *
sizeof(
unsigned char));
139 memset(data, 0, width * height * 3 *
sizeof(
unsigned char));
140 avir::CImageResizer<> ImageResizer(8);
141 ImageResizer.resizeImage(m_Data, m_Width, m_Height, 0, data, width, height, 3, 0);
156 glBindTexture(GL_TEXTURE_2D, m_RendererID);
157 glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB8, m_Width, m_Height, 0, GL_RGB, GL_UNSIGNED_BYTE, data);
158 glGenerateMipmap(GL_TEXTURE_2D);
163unsigned char *Texture2D::GetData()