Files
biomed/texture.cpp
2026-02-12 10:51:02 +01:00

71 lines
1.8 KiB
C++

#include "texture.h"
#define STB_IMAGE_IMPLEMENTATION
#define STBI_NO_FAILURE_STRINGS
#include "stb_image.h"
#include <SDL2/SDL_opengl.h>
namespace Texture
{
unsigned texture = 0;
unsigned Create(const int w, const int h)
{
unsigned texture;
glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_2D, texture);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
if (w != -1) glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, nullptr);
return texture;
}
const bool Load(const unsigned& texture, const char* filename)
{
int x,y,n;
char name[400]; strcpy(name, filename);
if (strrchr(filename, '.') == nullptr) strcat(name, ".png");
unsigned char *data = stbi_load(name, &x, &y, &n, 4);
if (data == nullptr) return false;
glBindTexture(GL_TEXTURE_2D, texture);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, x, y, 0, GL_RGBA, GL_UNSIGNED_BYTE, data);
stbi_image_free(data);
return true;
}
uint8_t* Load(const char* filename)
{
int x,y,n;
char name[400]; strcpy(name, filename);
if (strrchr(filename, '.') == nullptr) strcat(name, ".png");
unsigned char *data = stbi_load(name, &x, &y, &n, 4);
return data;
}
void Update(const unsigned& texture, const int w, const int h, const uint8_t* data)
{
glBindTexture(GL_TEXTURE_2D, texture);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, data);
}
}
namespace Bitmap
{
void PutPixel(uint8_t* data, const int x, const int y, const Color& color)
{
memcpy(&data[x+y*128], &color, 4);
}
const Color GetPixel(uint8_t* data, const int x, const int y)
{
Color color;
data += (x+y*128);
color.r = *(data++);
color.g = *(data++);
color.b = *(data++);
color.a = *(data++);
return color;
}
}