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 Mesh.cpp
Scene.cpp Scene.cpp
Shader.cpp Shader.cpp
Texture.cpp
) )
add_library(Magnum SHARED ${Magnum_SRCS}) 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). * Sets wrapping type for coordinates out of range (-1, 1).
*/ */
void setWrapping(const Math::Vector<Wrapping, dimensions>& wrapping) { 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();
}
/** /**
* @brief Set border color * @brief Set border color
* *
* Border color when wrapping is set to ClampToBorder. * Border color when wrapping is set to ClampToBorder.
*/ */
void setBorderColor(const Vector4& color) { inline void setBorderColor(const Vector4& color) {
bind(); bind();
glTexParameterfv(target, GL_TEXTURE_BORDER_COLOR, color.data()); glTexParameterfv(target, GL_TEXTURE_BORDER_COLOR, color.data());
unbind(); unbind();
@ -220,7 +206,7 @@ template<size_t dimensions> class Texture {
* *
* @see setMinificationFilter() * @see setMinificationFilter()
*/ */
void generateMipmap() { inline void generateMipmap() {
bind(); bind();
glGenerateMipmap(target); glGenerateMipmap(target);
unbind(); unbind();

Loading…
Cancel
Save