Use a shorter/simpler license convention, stops the header taking so much space. Follow the SPDX license specification: https://spdx.org/licenses - C/C++/objc/objc++ - Python - Shell Scripts - CMake, GNUmakefile While most of the source tree has been included - `./extern/` was left out. - `./intern/cycles` & `./intern/atomic` are also excluded because they use different header conventions. doc/license/SPDX-license-identifiers.txt has been added to list SPDX all used identifiers. See P2788 for the script that automated these edits. Reviewed By: brecht, mont29, sergey Ref D14069
129 lines
3.1 KiB
C++
129 lines
3.1 KiB
C++
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
|
|
|
#pragma once
|
|
|
|
/** \file
|
|
* \ingroup freestyle
|
|
* \brief Classes to render a stroke with OpenGL
|
|
*/
|
|
|
|
#include <algorithm>
|
|
#include <map>
|
|
#include <string.h>
|
|
#include <utility>
|
|
#include <vector>
|
|
|
|
#include "Stroke.h"
|
|
#include "StrokeRep.h"
|
|
|
|
#include "../system/FreestyleConfig.h"
|
|
|
|
#ifdef WITH_CXX_GUARDEDALLOC
|
|
# include "MEM_guardedalloc.h"
|
|
#endif
|
|
|
|
namespace Freestyle {
|
|
|
|
/**********************************/
|
|
/* */
|
|
/* */
|
|
/* TextureManager */
|
|
/* */
|
|
/* */
|
|
/**********************************/
|
|
|
|
/** Class to load textures */
|
|
class TextureManager {
|
|
public:
|
|
TextureManager();
|
|
virtual ~TextureManager();
|
|
|
|
static TextureManager *getInstance()
|
|
{
|
|
return _pInstance;
|
|
}
|
|
|
|
void load();
|
|
unsigned getBrushTextureIndex(string name, Stroke::MediumType iType = Stroke::OPAQUE_MEDIUM);
|
|
|
|
inline bool hasLoaded() const
|
|
{
|
|
return _hasLoadedTextures;
|
|
}
|
|
|
|
inline unsigned int getDefaultTextureId() const
|
|
{
|
|
return _defaultTextureId;
|
|
}
|
|
|
|
struct Options {
|
|
static void setPatternsPath(const string &path);
|
|
static string getPatternsPath();
|
|
|
|
static void setBrushesPath(const string &path);
|
|
static string getBrushesPath();
|
|
};
|
|
|
|
protected:
|
|
virtual void loadStandardBrushes() = 0;
|
|
virtual unsigned loadBrush(string fileName, Stroke::MediumType = Stroke::OPAQUE_MEDIUM) = 0;
|
|
|
|
typedef std::pair<string, Stroke::MediumType> BrushTexture;
|
|
struct cmpBrushTexture {
|
|
bool operator()(const BrushTexture &bt1, const BrushTexture &bt2) const
|
|
{
|
|
int r = strcmp(bt1.first.c_str(), bt2.first.c_str());
|
|
if (r != 0) {
|
|
return (r < 0);
|
|
}
|
|
else {
|
|
return (bt1.second < bt2.second);
|
|
}
|
|
}
|
|
};
|
|
typedef std::map<BrushTexture, unsigned, cmpBrushTexture> brushesMap;
|
|
|
|
static TextureManager *_pInstance;
|
|
bool _hasLoadedTextures;
|
|
brushesMap _brushesMap;
|
|
static string _patterns_path;
|
|
static string _brushes_path;
|
|
unsigned int _defaultTextureId;
|
|
|
|
#ifdef WITH_CXX_GUARDEDALLOC
|
|
MEM_CXX_CLASS_ALLOC_FUNCS("Freestyle:TextureManager")
|
|
#endif
|
|
};
|
|
|
|
/**********************************/
|
|
/* */
|
|
/* */
|
|
/* StrokeRenderer */
|
|
/* */
|
|
/* */
|
|
/**********************************/
|
|
|
|
/** Class to render a stroke. Creates a triangle strip and stores it strip is lazily created at the
|
|
* first rendering */
|
|
class StrokeRenderer {
|
|
public:
|
|
virtual ~StrokeRenderer();
|
|
|
|
/** Renders a stroke rep */
|
|
virtual void RenderStrokeRep(StrokeRep *iStrokeRep) const = 0;
|
|
virtual void RenderStrokeRepBasic(StrokeRep *iStrokeRep) const = 0;
|
|
|
|
// initializes the texture manager
|
|
// lazy, checks if it has already been done
|
|
static bool loadTextures();
|
|
|
|
// static unsigned int getTextureIndex(unsigned int index);
|
|
static TextureManager *_textureManager;
|
|
|
|
#ifdef WITH_CXX_GUARDEDALLOC
|
|
MEM_CXX_CLASS_ALLOC_FUNCS("Freestyle:StrokeRenderer")
|
|
#endif
|
|
};
|
|
|
|
} /* namespace Freestyle */
|