mirror of
https://github.com/edubart/otclient.git
synced 2025-10-19 14:03:26 +02:00
major UIWidget rewrite with new features
This commit is contained in:
@@ -1,201 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2010-2012 OTClient <https://github.com/edubart/otclient>
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
* THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#include "borderimage.h"
|
||||
#include "graphics.h"
|
||||
#include "texture.h"
|
||||
#include "texturemanager.h"
|
||||
|
||||
#include <framework/otml/otml.h>
|
||||
|
||||
BorderImage::BorderImage(TexturePtr texture,
|
||||
const Rect& left,
|
||||
const Rect& right,
|
||||
const Rect& top,
|
||||
const Rect& bottom,
|
||||
const Rect& topLeft,
|
||||
const Rect& topRight,
|
||||
const Rect& bottomLeft,
|
||||
const Rect& bottomRight,
|
||||
const Rect& center)
|
||||
{
|
||||
m_texture = texture;
|
||||
m_leftBorderTexCoords = left;
|
||||
m_rightBorderTexCoords = right;
|
||||
m_topBorderTexCoords = top;
|
||||
m_bottomBorderTexCoords = bottom;
|
||||
m_topLeftCornerTexCoords = topLeft;
|
||||
m_topRightCornerTexCoords = topRight;
|
||||
m_bottomLeftCornerTexCoords = bottomLeft;
|
||||
m_bottomRightCornerTexCoords = bottomRight;
|
||||
m_centerTexCoords = center;
|
||||
|
||||
m_bordersSize = Size(left.width() + right.width(),
|
||||
top.height() + bottom.height());
|
||||
|
||||
m_defaultSize = Size(std::max(std::max(topLeft.width(), bottomLeft.width()), left.width()) +
|
||||
std::max(std::max(topRight.width(), bottomRight.width()), right.width()) +
|
||||
center.width(),
|
||||
std::max(std::max(topLeft.height(), topRight.height()), top.height()) +
|
||||
std::max(std::max(bottomLeft.height(), bottomRight.height()), bottom.height()) +
|
||||
center.height());
|
||||
}
|
||||
|
||||
BorderImagePtr BorderImage::loadFromOTML(const OTMLNodePtr& borderImageNode)
|
||||
{
|
||||
Rect leftBorder;
|
||||
Rect rightBorder;
|
||||
Rect topBorder;
|
||||
Rect bottomBorder;
|
||||
Rect topLeftCorner;
|
||||
Rect topRightCorner;
|
||||
Rect bottomLeftCorner;
|
||||
Rect bottomRightCorner;
|
||||
Rect center;
|
||||
Rect clipRect;
|
||||
int top, bottom, left, right, border;
|
||||
Size size;
|
||||
Point offset;
|
||||
|
||||
// load texture
|
||||
std::string source = borderImageNode->at("source")->value();
|
||||
TexturePtr texture = g_textures.getTexture(source);
|
||||
|
||||
// load basic border confs
|
||||
border = borderImageNode->valueAt("border", 0);
|
||||
clipRect = borderImageNode->valueAt("clip", Rect(0, 0, texture->getSize()));
|
||||
|
||||
// load border margins
|
||||
top = bottom = left = right = border;
|
||||
top = borderImageNode->valueAt("border.top", top);
|
||||
bottom = borderImageNode->valueAt("border.bottom", bottom);
|
||||
left = borderImageNode->valueAt("border.left", left);
|
||||
right = borderImageNode->valueAt("border.right", right);
|
||||
|
||||
// calculates border coords
|
||||
leftBorder = Rect(clipRect.left(), clipRect.top() + top, left, clipRect.height() - top - bottom);
|
||||
rightBorder = Rect(clipRect.right() - right + 1, clipRect.top() + top, right, clipRect.height() - top - bottom);
|
||||
topBorder = Rect(clipRect.left() + left, clipRect.top(), clipRect.width() - right - left, top);
|
||||
bottomBorder = Rect(clipRect.left() + left, clipRect.bottom() - bottom + 1, clipRect.width() - right - left, bottom);
|
||||
topLeftCorner = Rect(clipRect.left(), clipRect.top(), left, top);
|
||||
topRightCorner = Rect(clipRect.right() - right + 1, clipRect.top(), right, top);
|
||||
bottomLeftCorner = Rect(clipRect.left(), clipRect.bottom() - bottom + 1, left, bottom);
|
||||
bottomRightCorner = Rect(clipRect.right() - right + 1, clipRect.bottom() - bottom + 1, right, bottom);
|
||||
center = Rect(clipRect.left() + left, clipRect.top() + top, clipRect.width() - right - left, clipRect.height() - top - bottom);
|
||||
|
||||
// load individual border conf if supplied
|
||||
/*
|
||||
leftBorder = borderImageNode->valueAt("left border", leftBorder);
|
||||
rightBorder = borderImageNode->valueAt("right border", rightBorder);
|
||||
topBorder = borderImageNode->valueAt("top border", topBorder);
|
||||
bottomBorder = borderImageNode->valueAt("bottom border", bottomBorder);
|
||||
topLeftCorner = borderImageNode->valueAt("top left corner", topLeftCorner);
|
||||
topRightCorner = borderImageNode->valueAt("top right corner", topRightCorner);
|
||||
bottomLeftCorner = borderImageNode->valueAt("bottom left corner", bottomLeftCorner);
|
||||
bottomRightCorner = borderImageNode->valueAt("bottom right corner", bottomRightCorner);
|
||||
center = borderImageNode->valueAt("center", center);
|
||||
*/
|
||||
|
||||
return BorderImagePtr(new BorderImage(texture,
|
||||
leftBorder,
|
||||
rightBorder,
|
||||
topBorder,
|
||||
bottomBorder,
|
||||
topLeftCorner,
|
||||
topRightCorner,
|
||||
bottomLeftCorner,
|
||||
bottomRightCorner,
|
||||
center));
|
||||
}
|
||||
|
||||
void BorderImage::draw(const Rect& screenCoords)
|
||||
{
|
||||
//TODO: borderimage drawing could be optimized by caching the render into a texture
|
||||
if(screenCoords != m_cachedScreenCoords) {
|
||||
m_cachedScreenCoords = screenCoords;
|
||||
m_coordsBuffer.clear();
|
||||
|
||||
Rect rectCoords;
|
||||
Size centerSize = screenCoords.size() - m_bordersSize;
|
||||
|
||||
// first the center
|
||||
if(centerSize.area() > 0) {
|
||||
rectCoords = Rect(screenCoords.left() + m_leftBorderTexCoords.width(),
|
||||
screenCoords.top() + m_topBorderTexCoords.height(),
|
||||
centerSize);
|
||||
m_coordsBuffer.addRepeatedRects(rectCoords, m_centerTexCoords);
|
||||
}
|
||||
|
||||
// top left corner
|
||||
rectCoords = Rect(screenCoords.topLeft(),
|
||||
m_topLeftCornerTexCoords.size());
|
||||
m_coordsBuffer.addRepeatedRects(rectCoords, m_topLeftCornerTexCoords);
|
||||
|
||||
// top
|
||||
rectCoords = Rect(screenCoords.left() + m_topLeftCornerTexCoords.width(),
|
||||
screenCoords.topLeft().y,
|
||||
centerSize.width(),
|
||||
m_topBorderTexCoords.height());
|
||||
m_coordsBuffer.addRepeatedRects(rectCoords, m_topBorderTexCoords);
|
||||
|
||||
|
||||
// top right corner
|
||||
rectCoords = Rect(screenCoords.left() + m_topLeftCornerTexCoords.width() + centerSize.width(),
|
||||
screenCoords.top(),
|
||||
m_topRightCornerTexCoords.size());
|
||||
m_coordsBuffer.addRepeatedRects(rectCoords, m_topRightCornerTexCoords);
|
||||
|
||||
// left
|
||||
rectCoords = Rect(screenCoords.left(),
|
||||
screenCoords.top() + m_topLeftCornerTexCoords.height(),
|
||||
m_leftBorderTexCoords.width(),
|
||||
centerSize.height());
|
||||
m_coordsBuffer.addRepeatedRects(rectCoords, m_leftBorderTexCoords);
|
||||
|
||||
// right
|
||||
rectCoords = Rect(screenCoords.left() + m_leftBorderTexCoords.width() + centerSize.width(),
|
||||
screenCoords.top() + m_topRightCornerTexCoords.height(),
|
||||
m_rightBorderTexCoords.width(),
|
||||
centerSize.height());
|
||||
m_coordsBuffer.addRepeatedRects(rectCoords, m_rightBorderTexCoords);
|
||||
|
||||
// bottom left corner
|
||||
rectCoords = Rect(screenCoords.left(),
|
||||
screenCoords.top() + m_topLeftCornerTexCoords.height() + centerSize.height(),
|
||||
m_bottomLeftCornerTexCoords.size());
|
||||
m_coordsBuffer.addRepeatedRects(rectCoords, m_bottomLeftCornerTexCoords);
|
||||
|
||||
// bottom
|
||||
rectCoords = Rect(screenCoords.left() + m_bottomLeftCornerTexCoords.width(),
|
||||
screenCoords.top() + m_topBorderTexCoords.height() + centerSize.height(),
|
||||
centerSize.width(),
|
||||
m_bottomBorderTexCoords.height());
|
||||
m_coordsBuffer.addRepeatedRects(rectCoords, m_bottomBorderTexCoords);
|
||||
|
||||
// bottom right corner
|
||||
rectCoords = Rect(screenCoords.left() + m_bottomLeftCornerTexCoords.width() + centerSize.width(),
|
||||
screenCoords.top() + m_topRightCornerTexCoords.height() + centerSize.height(),
|
||||
m_bottomRightCornerTexCoords.size());
|
||||
m_coordsBuffer.addRepeatedRects(rectCoords, m_bottomRightCornerTexCoords);
|
||||
}
|
||||
g_painter.drawTextureCoords(m_coordsBuffer, m_texture);
|
||||
}
|
@@ -1,65 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2010-2012 OTClient <https://github.com/edubart/otclient>
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
* THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#ifndef BORDERIMAGE_H
|
||||
#define BORDERIMAGE_H
|
||||
|
||||
#include "image.h"
|
||||
|
||||
class BorderImage : public Image
|
||||
{
|
||||
public:
|
||||
BorderImage(TexturePtr texture,
|
||||
const Rect& left,
|
||||
const Rect& right,
|
||||
const Rect& top,
|
||||
const Rect& bottom,
|
||||
const Rect& topLeft,
|
||||
const Rect& topRight,
|
||||
const Rect& bottomLeft,
|
||||
const Rect& bottomRight,
|
||||
const Rect& center);
|
||||
|
||||
static BorderImagePtr loadFromOTML(const OTMLNodePtr& borderImageNode);
|
||||
|
||||
void draw(const Rect& screenCoords);
|
||||
|
||||
Size getDefaultSize() const { return m_defaultSize; }
|
||||
|
||||
private:
|
||||
Rect m_leftBorderTexCoords;
|
||||
Rect m_rightBorderTexCoords;
|
||||
Rect m_topBorderTexCoords;
|
||||
Rect m_bottomBorderTexCoords;
|
||||
|
||||
Rect m_topLeftCornerTexCoords;
|
||||
Rect m_topRightCornerTexCoords;
|
||||
Rect m_bottomLeftCornerTexCoords;
|
||||
Rect m_bottomRightCornerTexCoords;
|
||||
|
||||
Rect m_centerTexCoords;
|
||||
|
||||
Size m_bordersSize;
|
||||
Size m_defaultSize;
|
||||
};
|
||||
|
||||
#endif
|
@@ -29,8 +29,6 @@
|
||||
class Texture;
|
||||
class AnimatedTexture;
|
||||
class Font;
|
||||
class Image;
|
||||
class BorderImage;
|
||||
class FrameBuffer;
|
||||
class Shader;
|
||||
class ShaderProgram;
|
||||
@@ -46,8 +44,6 @@ typedef std::weak_ptr<ParticleSystem> ParticleSystemWeakPtr;
|
||||
typedef std::shared_ptr<Texture> TexturePtr;
|
||||
typedef std::shared_ptr<AnimatedTexture> AnimatedTexturePtr;
|
||||
typedef std::shared_ptr<Font> FontPtr;
|
||||
typedef std::shared_ptr<Image> ImagePtr;
|
||||
typedef std::shared_ptr<BorderImage> BorderImagePtr;
|
||||
typedef std::shared_ptr<FrameBuffer> FrameBufferPtr;
|
||||
typedef std::shared_ptr<Shader> ShaderPtr;
|
||||
typedef std::shared_ptr<ShaderProgram> ShaderProgramPtr;
|
||||
|
@@ -44,7 +44,7 @@ void FrameBuffer::resize(const Size& size)
|
||||
{
|
||||
internalBind();
|
||||
m_texture = TexturePtr(new Texture(size.width(), size.height(), 4));
|
||||
m_texture->enableBilinearFilter();
|
||||
m_texture->setSmooth(true);
|
||||
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, m_texture->getId(), 0);
|
||||
|
||||
GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER);
|
||||
|
@@ -1,82 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2010-2012 OTClient <https://github.com/edubart/otclient>
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
* THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#include "image.h"
|
||||
#include "texture.h"
|
||||
#include "graphics.h"
|
||||
#include "texturemanager.h"
|
||||
|
||||
#include <framework/otml/otml.h>
|
||||
|
||||
Image::Image()
|
||||
{
|
||||
m_fixedRatio = false;
|
||||
m_repeated = false;
|
||||
}
|
||||
|
||||
void Image::loadFromOTML(const OTMLNodePtr& imageNode)
|
||||
{
|
||||
// load configs from otml node
|
||||
std::string source = imageNode->hasValue() ? imageNode->value() : imageNode->valueAt("source");
|
||||
bool smooth = imageNode->valueAt("smooth", false);
|
||||
m_fixedRatio = imageNode->valueAt("fixed ratio", false);
|
||||
m_repeated = imageNode->valueAt("repeated", false);
|
||||
|
||||
// load texture
|
||||
m_texture = g_textures.getTexture(source);
|
||||
m_textureCoords = imageNode->valueAt("clip", Rect(0, 0, m_texture->getSize()));
|
||||
|
||||
// enable texture bilinear filter
|
||||
if(smooth)
|
||||
m_texture->enableBilinearFilter();
|
||||
}
|
||||
|
||||
void Image::draw(const Rect& screenCoords)
|
||||
{
|
||||
if(!m_texture)
|
||||
return;
|
||||
|
||||
if(m_cachedScreenCoords != screenCoords) {
|
||||
m_cachedScreenCoords = screenCoords;
|
||||
m_coordsBuffer.clear();
|
||||
|
||||
if(m_fixedRatio) {
|
||||
const Size& texSize = m_texture->getSize();
|
||||
Size texCoordsSize = screenCoords.size();
|
||||
texCoordsSize.scale(texSize, Fw::KeepAspectRatio);
|
||||
Point texCoordsOffset;
|
||||
if(texSize.height() > texCoordsSize.height())
|
||||
texCoordsOffset.y = (texSize.height() - texCoordsSize.height())/2;
|
||||
else if(texSize.width() > texCoordsSize.width())
|
||||
texCoordsOffset.x = (texSize.width() - texCoordsSize.width())/2;
|
||||
|
||||
m_coordsBuffer.addRect(screenCoords, Rect(texCoordsOffset, texCoordsSize));
|
||||
} else {
|
||||
if(m_repeated)
|
||||
m_coordsBuffer.addRepeatedRects(screenCoords, m_textureCoords);
|
||||
else
|
||||
m_coordsBuffer.addRect(screenCoords, m_textureCoords);
|
||||
}
|
||||
}
|
||||
|
||||
g_painter.drawTextureCoords(m_coordsBuffer, m_texture);
|
||||
}
|
@@ -1,50 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2010-2012 OTClient <https://github.com/edubart/otclient>
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
* THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#ifndef IMAGE_H
|
||||
#define IMAGE_H
|
||||
|
||||
#include "declarations.h"
|
||||
#include "coordsbuffer.h"
|
||||
|
||||
#include <framework/otml/declarations.h>
|
||||
|
||||
class Image
|
||||
{
|
||||
public:
|
||||
Image();
|
||||
|
||||
void loadFromOTML(const OTMLNodePtr& imageNode);
|
||||
|
||||
virtual void draw(const Rect& screenCoords);
|
||||
|
||||
protected:
|
||||
TexturePtr m_texture;
|
||||
Rect m_textureCoords;
|
||||
bool m_fixedRatio;
|
||||
bool m_repeated;
|
||||
|
||||
Rect m_cachedScreenCoords;
|
||||
CoordsBuffer m_coordsBuffer;
|
||||
};
|
||||
|
||||
#endif
|
@@ -51,13 +51,13 @@ public:
|
||||
void setColor(const Color& color) { m_currentColor = color; }
|
||||
Color getColor() { return m_currentColor; }
|
||||
|
||||
void setOpacity(int opacity) { m_currentOpacity = opacity / 255.0f; }
|
||||
int getOpacity() { return m_currentOpacity * 255.0f; }
|
||||
void setOpacity(float opacity) { m_currentOpacity = opacity; }
|
||||
float getOpacity() { return m_currentOpacity; }
|
||||
|
||||
void setCustomProgram(PainterShaderProgramPtr program);
|
||||
void releaseCustomProgram() { m_customProgram = nullptr; }
|
||||
void setCompositionMode(CompositionMode compositionMode);
|
||||
|
||||
|
||||
void setProjectionMatrix(const Matrix3& projectionMatrix) { m_projectionMatrix = projectionMatrix; }
|
||||
Matrix3 getProjectionMatrix() { return m_projectionMatrix; }
|
||||
|
||||
|
@@ -91,7 +91,7 @@ void Particle::updatePosition(double elapsedTime)
|
||||
m_velocity += m_acceleration * elapsedTime;
|
||||
}
|
||||
|
||||
m_rect.moveTo((int)m_position.x - m_size.width() / 2, (int)m_position.y - m_size.height() / 2);
|
||||
m_rect.move((int)m_position.x - m_size.width() / 2, (int)m_position.y - m_size.height() / 2);
|
||||
}
|
||||
|
||||
void Particle::updateSize()
|
||||
|
@@ -95,12 +95,23 @@ uint Texture::internalLoadGLTexture(uchar *pixels, int channels, int width, int
|
||||
return id;
|
||||
}
|
||||
|
||||
void Texture::enableBilinearFilter()
|
||||
void Texture::setSmooth(bool smooth)
|
||||
{
|
||||
// enable smooth texture
|
||||
glBindTexture(GL_TEXTURE_2D, m_textureId);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
||||
if(smooth == m_smooth)
|
||||
return;
|
||||
|
||||
if(smooth) {
|
||||
// enable smooth texture
|
||||
glBindTexture(GL_TEXTURE_2D, m_textureId);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
||||
} else {
|
||||
// nearest filtering (non smooth)
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
|
||||
}
|
||||
|
||||
m_smooth = true;
|
||||
}
|
||||
|
||||
std::vector<uint8> Texture::getPixels()
|
||||
|
@@ -32,7 +32,7 @@ public:
|
||||
Texture(int width, int height, int channels, uchar* pixels = NULL);
|
||||
virtual ~Texture();
|
||||
|
||||
virtual void enableBilinearFilter();
|
||||
virtual void setSmooth(bool smooth);
|
||||
GLuint getId() { return m_textureId; }
|
||||
|
||||
std::vector<uint8> getPixels();
|
||||
@@ -48,6 +48,7 @@ protected:
|
||||
|
||||
GLuint m_textureId;
|
||||
Size m_size;
|
||||
Boolean<false> m_smooth;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
Reference in New Issue
Block a user