velage/engine/texture.cpp
2023-08-16 23:06:00 +02:00

63 lines
2.3 KiB
C++

#include "texture.hpp"
#include "shader.hpp"
#include <iostream>
void texture::genTexureGpu(GLfloat pixels[], int width, int height, GLenum texUnit) {
glActiveTexture(texUnit);
glGenTextures(1, &ref);
glBindTexture(GL_TEXTURE_2D, ref);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 4, 3, 0, GL_RGB, GL_FLOAT, pixels);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, settings.s_wraping);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, settings.t_wraping);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, settings.mag_min);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, settings.mag_max);
}
void texture::genTexureGpu(GLfloat pixels[], int width, int height, textureSettings settings, GLenum texUnit) {
this->settings=settings;
genTexureGpu(pixels,width,height,texUnit);
}
void texture::loadFromPath(std::string path, GLenum texUnit) {
glActiveTexture(texUnit);
glGenTextures(1, &ref);
glBindTexture(GL_TEXTURE_2D, ref);
unsigned char *image =
SOIL_load_image(path.c_str(), &width, &height, 0, SOIL_LOAD_RGB);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB,
GL_UNSIGNED_BYTE, image);
SOIL_free_image_data(image);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, settings.s_wraping);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, settings.t_wraping);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, settings.mag_min);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, settings.mag_max);
}
void texture::loadFromPath(std::string path, textureSettings settings, GLenum texUnit) {
this->settings=settings;
loadFromPath(path,texUnit);
}
textureSettings VELAGE_generateTextureSettings(GLenum s_wraping, GLenum t_wraping, GLenum mag_min, GLenum mag_max){
textureSettings settings;
settings.s_wraping=s_wraping;
settings.t_wraping=t_wraping;
settings.mag_min=mag_min;
settings.mag_max=mag_max;
return settings;
}
textureSettings VELAGE_generateTextureSettings(GLenum wraping, GLenum mag){
textureSettings settings;
settings.s_wraping=wraping;
settings.t_wraping=wraping;
settings.mag_min=mag;
settings.mag_max=mag;
return settings;
}
void texture::setTexUniformLocation(std::string name, GLint id, shader *program){
// std::cout<<program->getUniformId(name);
glUniform1i(program->getUniformId(name), id);
}