Browse Source

Added Texture.cpp with explicit specialization for all texture dimensions.

Non-inline functions which don't depend on another template moved to
Texture.cpp, inlined the rest.
pull/279/head
Vladimír Vondruš 15 years ago
parent
commit
4a58fc9f0c
  1. 1
      src/CMakeLists.txt
  2. 41
      src/Texture.cpp
  3. 20
      src/Texture.h

1
src/CMakeLists.txt

@ -15,6 +15,7 @@ set(Magnum_SRCS
Mesh.cpp
Scene.cpp
Shader.cpp
Texture.cpp
)
add_library(Magnum SHARED ${Magnum_SRCS})

41
src/Texture.cpp

@ -0,0 +1,41 @@
/*
Copyright © 2010, 2011 Vladimír Vondruš <mosra@centrum.cz>
This file is part of Magnum.
Magnum is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License version 3
only, as published by the Free Software Foundation.
Magnum is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License version 3 for more details.
*/
#include "Texture.h"
namespace Magnum {
template<size_t dimensions> void Texture<dimensions>::setWrapping(const Math::Vector<Wrapping, dimensions>& wrapping) {
bind();
for(int i = 0; i != dimensions; ++i) switch(i) {
case 0:
glTexParameteri(target, GL_TEXTURE_WRAP_S, wrapping.at(i));
break;
case 1:
glTexParameteri(target, GL_TEXTURE_WRAP_T, wrapping.at(i));
break;
case 2:
glTexParameteri(target, GL_TEXTURE_WRAP_R, wrapping.at(i));
break;
}
unbind();
}
/* Instantiate all textures */
template class Texture<1>;
template class Texture<2>;
template class Texture<3>;
}

20
src/Texture.h

@ -188,28 +188,14 @@ template<size_t dimensions> class Texture {
*
* Sets wrapping type for coordinates out of range (-1, 1).
*/
void setWrapping(const Math::Vector<Wrapping, dimensions>& wrapping) {
bind();
for(int i = 0; i != dimensions; ++i) switch(i) {
case 0:
glTexParameteri(target, GL_TEXTURE_WRAP_S, wrapping.at(i));
break;
case 1:
glTexParameteri(target, GL_TEXTURE_WRAP_T, wrapping.at(i));
break;
case 2:
glTexParameteri(target, GL_TEXTURE_WRAP_R, wrapping.at(i));
break;
}
unbind();
}
void setWrapping(const Math::Vector<Wrapping, dimensions>& wrapping);
/**
* @brief Set border color
*
* Border color when wrapping is set to ClampToBorder.
*/
void setBorderColor(const Vector4& color) {
inline void setBorderColor(const Vector4& color) {
bind();
glTexParameterfv(target, GL_TEXTURE_BORDER_COLOR, color.data());
unbind();
@ -220,7 +206,7 @@ template<size_t dimensions> class Texture {
*
* @see setMinificationFilter()
*/
void generateMipmap() {
inline void generateMipmap() {
bind();
glGenerateMipmap(target);
unbind();

Loading…
Cancel
Save