12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- #include "wrapper/Texture.h"
- Texture::Texture(const TextureFormat& format, int maxMipMaps) : format(format), texture(0), maxMipMaps(maxMipMaps) {
- glGenTextures(1, &texture);
- setNearestFilter();
- setRepeatWrap();
- }
- Texture::Texture(int maxMipMaps) : Texture(TextureFormat::unknown(), maxMipMaps) {
- }
- Texture::~Texture() {
- glDeleteTextures(1, &texture);
- }
- void Texture::setFormat(const TextureFormat& tf) {
- format = tf;
- }
- void Texture::setFilter(GLint minParam, GLint maxParam) {
- bind();
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, minParam);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, maxParam);
- }
- void Texture::setNearestFilter() {
- if(maxMipMaps > 0) {
- setFilter(GL_NEAREST_MIPMAP_LINEAR, GL_NEAREST);
- } else {
- setFilter(GL_NEAREST, GL_NEAREST);
- }
- }
- void Texture::setLinearFilter() {
- if(maxMipMaps > 0) {
- setFilter(GL_LINEAR_MIPMAP_LINEAR, GL_LINEAR);
- } else {
- setFilter(GL_LINEAR, GL_LINEAR);
- }
- }
- void Texture::setWrap(GLint param) {
- bind();
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, param);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, param);
- }
- void Texture::setRepeatWrap() {
- setWrap(GL_REPEAT);
- }
- void Texture::setClampWrap() {
- setWrap(GL_CLAMP_TO_EDGE);
- }
- void Texture::setData(int width, int height, const void* data) {
- bind();
- glTexImage2D(GL_TEXTURE_2D, 0, format.internalformat, width, height, 0, format.format, format.type, data);
- if(maxMipMaps > 0) {
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_BASE_LEVEL, 0);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, maxMipMaps);
- glGenerateMipmap(GL_TEXTURE_2D);
- }
- }
- void Texture::bind() const {
- glBindTexture(GL_TEXTURE_2D, texture);
- }
- void Texture::bindTo(int index) const {
- glActiveTexture(GL_TEXTURE0 + index);
- bind();
- }
|