Added textures comp
This commit is contained in:
parent
1521d9f0b3
commit
960a4ce7ed
|
@ -0,0 +1,19 @@
|
||||||
|
#pragma once
|
||||||
|
#include <string>
|
||||||
|
#include <glad/glad.h>
|
||||||
|
|
||||||
|
class Texture
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
Texture() = default;
|
||||||
|
Texture(std::string path) { load(path); };
|
||||||
|
|
||||||
|
void bind(int slot);
|
||||||
|
void load(std::string path);
|
||||||
|
void clear();
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
GLuint id = 0;
|
||||||
|
|
||||||
|
};
|
|
@ -0,0 +1,62 @@
|
||||||
|
#include "texture.h"
|
||||||
|
#include "stb_image/stb_image.h"
|
||||||
|
#include <fstream>
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
void Texture::bind(int slot)
|
||||||
|
{
|
||||||
|
glBindTexture(GL_TEXTURE_2D, id);
|
||||||
|
glActiveTexture(GL_TEXTURE0 + slot);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Texture::load(std::string path)
|
||||||
|
{
|
||||||
|
std::ifstream f(path, std::ios::binary);
|
||||||
|
|
||||||
|
if (!f.is_open())
|
||||||
|
{
|
||||||
|
throw(std::string( "err loading ") + path + "\n");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//most vexing parse here yay love cpp
|
||||||
|
std::string ret{ std::istreambuf_iterator<char>(f), std::istreambuf_iterator<char>() };
|
||||||
|
|
||||||
|
|
||||||
|
stbi_set_flip_vertically_on_load(true);
|
||||||
|
|
||||||
|
int width = 0;
|
||||||
|
int height = 0;
|
||||||
|
int channels = 0;
|
||||||
|
|
||||||
|
const unsigned char *decodedImage = stbi_load_from_memory((unsigned char*)ret.c_str(),
|
||||||
|
ret.size(), &width, &height, &channels, 4);
|
||||||
|
|
||||||
|
|
||||||
|
glGenTextures(1, &id);
|
||||||
|
glBindTexture(GL_TEXTURE_2D, id);
|
||||||
|
glActiveTexture(GL_TEXTURE0);
|
||||||
|
|
||||||
|
//minecraft is a pixel game so free optimizations, no bilinear filtey yay
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
|
||||||
|
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
|
||||||
|
|
||||||
|
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, decodedImage);
|
||||||
|
glGenerateMipmap(GL_TEXTURE_2D);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LOD, 4);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
this->id = id;
|
||||||
|
|
||||||
|
stbi_image_free((void*)decodedImage);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Texture::clear()
|
||||||
|
{
|
||||||
|
glDeleteTextures(1, &id);
|
||||||
|
id = 0;
|
||||||
|
}
|
Loading…
Reference in New Issue