载入中...
搜索中...
未找到
Stylize.cpp
浏览该文件的文档.
1#include "stylize/Stylize.h"
2
5
6#include "common/Exception.h"
7#include "graphics/Graphics.h"
8#include "graphics/Shader.h"
9#include "image/ImageData.h"
10
11#include <simplesquirrel/simplesquirrel.hpp>
12
13namespace eve::stylize {
14
16
17int Stylize::getStyleCount() const { return styleCount(); }
18
19std::string Stylize::getStyleId(int index) const { return styleIdAt(index); }
20
21bool Stylize::hasStyle(const std::string &style) const { return isKnownStyle(style); }
22
23bool Stylize::hasMeshStyle(const std::string &style) const {
24 return styleSupports(style, "mesh");
25}
26
27bool Stylize::supports(const std::string &style, const std::string &feature) const {
28 return styleSupports(style, feature);
29}
30
31int Stylize::getStyleParamCount(const std::string &style) const {
32 return styleParamCount(style);
33}
34
35std::string Stylize::getStyleParamName(const std::string &style, int index) const {
36 return styleParamName(style, index);
37}
38
39StylePass *Stylize::newPass(graphics::Graphics *gfx, const std::string &style) {
40 graphics::Shader *sh = createPostShader(gfx, style);
41 return new StylePass(style, sh);
42}
43
45 if (!shader) throw eve::Exception("Stylize.newPassFromShader: null shader");
46 return new StylePass(styleId, shader);
47}
48
50
52 return createPostShader(gfx, style);
53}
54
56 return createMeshShader(gfx, style);
57}
58
60 if (!hasStyle(style)) throw eve::Exception("Stylize.processImage: unknown style '%s'", style.c_str());
61 return processImageCpu(src, style);
62}
63
64void Stylize::expose(ssq::Table &table) {
65 auto cls = table.addClass(name, Stylize::create, false);
66 expose(cls);
67
68 auto pass = table.addClass<StylePass>(
69 "StylePass", std::function<StylePass *()>([]() -> StylePass * { return nullptr; }), true);
70 pass.addFunc("getStyle", &StylePass::getStyle);
71 pass.addFunc("hasParam", &StylePass::hasParam);
72 pass.addFunc("setFloat", &StylePass::setFloat);
73 pass.addFunc("getFloat", &StylePass::getFloat);
74 pass.addFunc("setTime", &StylePass::setTime);
75 pass.addFunc("getTime", &StylePass::getTime);
76 pass.addFunc("apply", &StylePass::apply);
77 pass.addFunc("applyCanvas", &StylePass::applyCanvas);
78 pass.addFunc("applyTo", &StylePass::applyTo);
79 pass.addFunc("applyCanvasTo", &StylePass::applyCanvasTo);
80 pass.addFunc("getShader", &StylePass::getShader);
81
82 auto chain = table.addClass<StyleChain>(
83 "StyleChain", std::function<StyleChain *()>([]() -> StyleChain * { return nullptr; }), true);
84 chain.addFunc("clear", &StyleChain::clear);
85 chain.addFunc("add", &StyleChain::add);
86 chain.addFunc("getPassCount", &StyleChain::getPassCount);
87 chain.addFunc("getPass", &StyleChain::getPass);
88 chain.addFunc("apply", &StyleChain::apply);
89 chain.addFunc("applyCanvas", &StyleChain::applyCanvas);
90}
91
92void Stylize::expose(ssq::Class &cls) {
93 cls.addFunc("getName", &Stylize::getName);
94 cls.addFunc("getStyleCount", &Stylize::getStyleCount);
95 cls.addFunc("getStyleId", &Stylize::getStyleId);
96 cls.addFunc("hasStyle", &Stylize::hasStyle);
97 cls.addFunc("hasMeshStyle", &Stylize::hasMeshStyle);
98 cls.addFunc("supports", &Stylize::supports);
99 cls.addFunc("getStyleParamCount", &Stylize::getStyleParamCount);
100 cls.addFunc("getStyleParamName", &Stylize::getStyleParamName);
101 cls.addFunc("newPass", &Stylize::newPass);
102 cls.addFunc("newPassFromShader", &Stylize::newPassFromShader);
103 cls.addFunc("newChain", &Stylize::newChain);
104 cls.addFunc("newPostShader", &Stylize::newPostShader);
105 cls.addFunc("newMeshShader", &Stylize::newMeshShader);
106 cls.addFunc("processImage", &Stylize::processImage);
107}
108
109} // namespace eve::stylize
HSQOBJECT cls
Definition ECS.cpp:21
#define Module_IMPL(ModuleName, newExpr)
Definition Module.h:24
Shader * shader
const char * name
Definition RockMesh.cpp:21
virtual std::string getName() const =0
Custom GPU program.
Definition Shader.h:30
Represents raw pixel data.
Definition ImageData.h:26
Ordered multi-pass stylize pipeline (extension point).
Definition StyleChain.h:27
void applyCanvas(graphics::Graphics *gfx, graphics::Canvas *source, graphics::Canvas *dest, graphics::Canvas *temp=nullptr)
void apply(graphics::Graphics *gfx, graphics::Texture *source, graphics::Canvas *dest, graphics::Canvas *temp=nullptr)
Run passes in order into dest. When more than one pass is present, temp is required for ping-pong (sa...
StylePass * getPass(int index) const
void add(StylePass *pass)
One stylized post-process pass bound to a style id (built-in or custom label). Draws a full-quad of t...
Definition StylePass.h:22
void applyCanvasTo(graphics::Graphics *gfx, graphics::Canvas *source, graphics::Canvas *dest)
Definition StylePass.cpp:95
bool hasParam(const std::string &name) const
Definition StylePass.cpp:18
float getFloat(const std::string &name) const
Definition StylePass.cpp:27
void setFloat(const std::string &name, float value)
Definition StylePass.cpp:22
void applyTo(graphics::Graphics *gfx, graphics::Texture *source, graphics::Canvas *dest)
Apply into an explicit destination canvas (restores previous canvas bind). Preferred hook for chains ...
Definition StylePass.cpp:85
std::string getStyle() const
Definition StylePass.h:30
void applyCanvas(graphics::Graphics *gfx, graphics::Canvas *source)
Definition StylePass.cpp:78
graphics::Shader * getShader() const
Definition StylePass.h:31
void apply(graphics::Graphics *gfx, graphics::Texture *source)
Apply style into the currently bound canvas / screen. Automatically uploads texel size + screen size ...
Definition StylePass.cpp:53
void setTime(float seconds)
Advance time-driven knobs (watercolor warp / ink jitter).
Definition StylePass.cpp:35
float getTime() const
Definition StylePass.cpp:39
Stylized / NPR rendering module — stable public surface for future expansion.
Definition Stylize.h:39
bool hasStyle(const std::string &style) const
Definition Stylize.cpp:21
int getStyleCount() const
Definition Stylize.cpp:17
int getStyleParamCount(const std::string &style) const
Introspect built-in post param names (empty for unknown / custom-only ids).
Definition Stylize.cpp:31
StylePass * newPass(graphics::Graphics *gfx, const std::string &style)
Post-process StylePass (shader owned by Graphics).
Definition Stylize.cpp:39
StylePass * newPassFromShader(const std::string &styleId, graphics::Shader *shader)
Wrap an already-created post Shader (custom SPIR-V / future registered styles). styleId is a label on...
Definition Stylize.cpp:44
graphics::Shader * newPostShader(graphics::Graphics *gfx, const std::string &style)
Raw post Shader with defaults (owned by Graphics).
Definition Stylize.cpp:51
graphics::Shader * newMeshShader(graphics::Graphics *gfx, const std::string &style)
Mesh3D Shader for cartoon/ink (owned by Graphics).
Definition Stylize.cpp:55
bool hasMeshStyle(const std::string &style) const
Definition Stylize.cpp:23
bool supports(const std::string &style, const std::string &feature) const
Feature query. Known features: "post" — StylePass / newPostShader "mesh" — newMeshShader "cpu" — proc...
Definition Stylize.cpp:27
std::string getStyleId(int index) const
Definition Stylize.cpp:19
std::string getStyleParamName(const std::string &style, int index) const
Definition Stylize.cpp:35
image::ImageData * processImage(image::ImageData *src, const std::string &style)
CPU fallback stylization for ImageData (RGBA8). Caller owns returned ImageData*.
Definition Stylize.cpp:59
StyleChain * newChain()
Definition Stylize.cpp:49
std::string styleIdAt(int index)
graphics::Shader * createPostShader(graphics::Graphics *gfx, const std::string &style)
graphics::Shader * createMeshShader(graphics::Graphics *gfx, const std::string &style)
std::string styleParamName(const std::string &style, int index)
image::ImageData * processImageCpu(image::ImageData *src, const std::string &style)
CPU NPR helpers — returns a new RGBA8 ImageData (caller owns).
bool isKnownStyle(const std::string &style)
bool styleSupports(const std::string &style, const std::string &feature)
int styleParamCount(const std::string &style)