Skip to content

Commit 6407b7c

Browse files
committed
Allow setting shader base dir via cmd line
1 parent 26239b9 commit 6407b7c

File tree

3 files changed

+60
-32
lines changed

3 files changed

+60
-32
lines changed

servers/rendering/renderer_rd/effects/ss_effects.h

Lines changed: 45 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,10 @@
3838
class SsEffectsDownsampleShaderRD : public ShaderRD {
3939
public:
4040
SsEffectsDownsampleShaderRD() {
41-
ShaderLoaderRD::ShaderLoadResult res = ShaderLoaderRD::get_singleton()->load_shader_file("./shaders/effects/ss_effects_downsample.glsl");
41+
String shader_path = _get_shader_base_dir() + "/effects/ss_effects_downsample.glsl";
42+
ShaderLoaderRD::ShaderLoadResult res = ShaderLoaderRD::get_singleton()->load_shader_file(shader_path);
4243
if (res.error) {
43-
CRASH_NOW_MSG("Failed to load shader file: ./shaders/effects/ss_effects_downsample.glsl");
44+
CRASH_NOW_MSG(vformat("Failed to load shader file: %s", shader_path));
4445
}
4546

4647
setup(res.vertex_code, res.fragment_code, res.compute_code, "SsEffectsDownsampleShaderRD");
@@ -50,9 +51,10 @@ class SsEffectsDownsampleShaderRD : public ShaderRD {
5051
class SsaoShaderRD : public ShaderRD {
5152
public:
5253
SsaoShaderRD() {
53-
ShaderLoaderRD::ShaderLoadResult res = ShaderLoaderRD::get_singleton()->load_shader_file("./shaders/effects/ssao.glsl");
54+
String shader_path = _get_shader_base_dir() + "/effects/ssao.glsl";
55+
ShaderLoaderRD::ShaderLoadResult res = ShaderLoaderRD::get_singleton()->load_shader_file(shader_path);
5456
if (res.error) {
55-
CRASH_NOW_MSG("Failed to load shader file: ./shaders/effects/ssao.glsl");
57+
CRASH_NOW_MSG(vformat("Failed to load shader file: %s", shader_path));
5658
}
5759

5860
setup(res.vertex_code, res.fragment_code, res.compute_code, "SsaoShaderRD");
@@ -62,9 +64,10 @@ class SsaoShaderRD : public ShaderRD {
6264
class SsaoBlurShaderRD : public ShaderRD {
6365
public:
6466
SsaoBlurShaderRD() {
65-
ShaderLoaderRD::ShaderLoadResult res = ShaderLoaderRD::get_singleton()->load_shader_file("./shaders/effects/ssao_blur.glsl");
67+
String shader_path = _get_shader_base_dir() + "/effects/ssao_blur.glsl";
68+
ShaderLoaderRD::ShaderLoadResult res = ShaderLoaderRD::get_singleton()->load_shader_file(shader_path);
6669
if (res.error) {
67-
CRASH_NOW_MSG("Failed to load shader file: ./shaders/effects/ssao_blur.glsl");
70+
CRASH_NOW_MSG(vformat("Failed to load shader file: %s", shader_path));
6871
}
6972

7073
setup(res.vertex_code, res.fragment_code, res.compute_code, "SsaoBlurShaderRD");
@@ -74,9 +77,10 @@ class SsaoBlurShaderRD : public ShaderRD {
7477
class SsaoImportanceMapShaderRD : public ShaderRD {
7578
public:
7679
SsaoImportanceMapShaderRD() {
77-
ShaderLoaderRD::ShaderLoadResult res = ShaderLoaderRD::get_singleton()->load_shader_file("./shaders/effects/ssao_importance_map.glsl");
80+
String shader_path = _get_shader_base_dir() + "/effects/ssao_importance_map.glsl";
81+
ShaderLoaderRD::ShaderLoadResult res = ShaderLoaderRD::get_singleton()->load_shader_file(shader_path);
7882
if (res.error) {
79-
CRASH_NOW_MSG("Failed to load shader file: ./shaders/effects/ssao_importance_map.glsl");
83+
CRASH_NOW_MSG(vformat("Failed to load shader file: %s", shader_path));
8084
}
8185

8286
setup(res.vertex_code, res.fragment_code, res.compute_code, "SsaoImportanceMapShaderRD");
@@ -86,9 +90,10 @@ class SsaoImportanceMapShaderRD : public ShaderRD {
8690
class SsaoInterleaveShaderRD : public ShaderRD {
8791
public:
8892
SsaoInterleaveShaderRD() {
89-
ShaderLoaderRD::ShaderLoadResult res = ShaderLoaderRD::get_singleton()->load_shader_file("./shaders/effects/ssao_interleave.glsl");
93+
String shader_path = _get_shader_base_dir() + "/effects/ssao_interleave.glsl";
94+
ShaderLoaderRD::ShaderLoadResult res = ShaderLoaderRD::get_singleton()->load_shader_file(shader_path);
9095
if (res.error) {
91-
CRASH_NOW_MSG("Failed to load shader file: ./shaders/effects/ssao_interleave.glsl");
96+
CRASH_NOW_MSG(vformat("Failed to load shader file: %s", shader_path));
9297
}
9398

9499
setup(res.vertex_code, res.fragment_code, res.compute_code, "SsaoInterleaveShaderRD");
@@ -98,9 +103,10 @@ class SsaoInterleaveShaderRD : public ShaderRD {
98103
class SsilShaderRD : public ShaderRD {
99104
public:
100105
SsilShaderRD() {
101-
ShaderLoaderRD::ShaderLoadResult res = ShaderLoaderRD::get_singleton()->load_shader_file("./shaders/effects/ssil.glsl");
106+
String shader_path = _get_shader_base_dir() + "/effects/ssil.glsl";
107+
ShaderLoaderRD::ShaderLoadResult res = ShaderLoaderRD::get_singleton()->load_shader_file(shader_path);
102108
if (res.error) {
103-
CRASH_NOW_MSG("Failed to load shader file: ./shaders/effects/ssil.glsl");
109+
CRASH_NOW_MSG(vformat("Failed to load shader file: %s", shader_path));
104110
}
105111

106112
setup(res.vertex_code, res.fragment_code, res.compute_code, "SsilShaderRD");
@@ -110,9 +116,10 @@ class SsilShaderRD : public ShaderRD {
110116
class SsilBlurShaderRD : public ShaderRD {
111117
public:
112118
SsilBlurShaderRD() {
113-
ShaderLoaderRD::ShaderLoadResult res = ShaderLoaderRD::get_singleton()->load_shader_file("./shaders/effects/ssil_blur.glsl");
119+
String shader_path = _get_shader_base_dir() + "/effects/ssil_blur.glsl";
120+
ShaderLoaderRD::ShaderLoadResult res = ShaderLoaderRD::get_singleton()->load_shader_file(shader_path);
114121
if (res.error) {
115-
CRASH_NOW_MSG("Failed to load shader file: ./shaders/effects/ssil_blur.glsl");
122+
CRASH_NOW_MSG(vformat("Failed to load shader file: %s", shader_path));
116123
}
117124

118125
setup(res.vertex_code, res.fragment_code, res.compute_code, "SsilBlurShaderRD");
@@ -122,9 +129,10 @@ class SsilBlurShaderRD : public ShaderRD {
122129
class SsilImportanceMapShaderRD : public ShaderRD {
123130
public:
124131
SsilImportanceMapShaderRD() {
125-
ShaderLoaderRD::ShaderLoadResult res = ShaderLoaderRD::get_singleton()->load_shader_file("./shaders/effects/ssil_importance_map.glsl");
132+
String shader_path = _get_shader_base_dir() + "/effects/ssil_importance_map.glsl";
133+
ShaderLoaderRD::ShaderLoadResult res = ShaderLoaderRD::get_singleton()->load_shader_file(shader_path);
126134
if (res.error) {
127-
CRASH_NOW_MSG("Failed to load shader file: ./shaders/effects/ssil_importance_map.glsl");
135+
CRASH_NOW_MSG(vformat("Failed to load shader file: %s", shader_path));
128136
}
129137

130138
setup(res.vertex_code, res.fragment_code, res.compute_code, "SsilImportanceMapShaderRD");
@@ -134,9 +142,10 @@ class SsilImportanceMapShaderRD : public ShaderRD {
134142
class SsilInterleaveShaderRD : public ShaderRD {
135143
public:
136144
SsilInterleaveShaderRD() {
137-
ShaderLoaderRD::ShaderLoadResult res = ShaderLoaderRD::get_singleton()->load_shader_file("./shaders/effects/ssil_interleave.glsl");
145+
String shader_path = _get_shader_base_dir() + "/effects/ssil_interleave.glsl";
146+
ShaderLoaderRD::ShaderLoadResult res = ShaderLoaderRD::get_singleton()->load_shader_file(shader_path);
138147
if (res.error) {
139-
CRASH_NOW_MSG("Failed to load shader file: ./shaders/effects/ssil_interleave.glsl");
148+
CRASH_NOW_MSG(vformat("Failed to load shader file: %s", shader_path));
140149
}
141150

142151
setup(res.vertex_code, res.fragment_code, res.compute_code, "SsilInterleaveShaderRD");
@@ -146,9 +155,10 @@ class SsilInterleaveShaderRD : public ShaderRD {
146155
class SubsurfaceScatteringShaderRD : public ShaderRD {
147156
public:
148157
SubsurfaceScatteringShaderRD() {
149-
ShaderLoaderRD::ShaderLoadResult res = ShaderLoaderRD::get_singleton()->load_shader_file("./shaders/effects/subsurface_scattering.glsl");
158+
String shader_path = _get_shader_base_dir() + "/effects/subsurface_scattering.glsl";
159+
ShaderLoaderRD::ShaderLoadResult res = ShaderLoaderRD::get_singleton()->load_shader_file(shader_path);
150160
if (res.error) {
151-
CRASH_NOW_MSG("Failed to load shader file: ./shaders/effects/subsurface_scattering.glsl");
161+
CRASH_NOW_MSG(vformat("Failed to load shader file: %s", shader_path));
152162
}
153163

154164
setup(res.vertex_code, res.fragment_code, res.compute_code, "SubsurfaceScatteringShaderRD");
@@ -158,9 +168,10 @@ class SubsurfaceScatteringShaderRD : public ShaderRD {
158168
class ScreenSpaceReflectionDownsampleShaderRD : public ShaderRD {
159169
public:
160170
ScreenSpaceReflectionDownsampleShaderRD() {
161-
ShaderLoaderRD::ShaderLoadResult res = ShaderLoaderRD::get_singleton()->load_shader_file("./shaders/effects/screen_space_reflection_downsample.glsl");
171+
String shader_path = _get_shader_base_dir() + "/effects/screen_space_reflection_downsample.glsl";
172+
ShaderLoaderRD::ShaderLoadResult res = ShaderLoaderRD::get_singleton()->load_shader_file(shader_path);
162173
if (res.error) {
163-
CRASH_NOW_MSG("Failed to load shader file: ./shaders/effects/screen_space_reflection_downsample.glsl");
174+
CRASH_NOW_MSG(vformat("Failed to load shader file: %s", shader_path));
164175
}
165176

166177
setup(res.vertex_code, res.fragment_code, res.compute_code, "ScreenSpaceReflectionDownsampleShaderRD");
@@ -170,9 +181,10 @@ class ScreenSpaceReflectionDownsampleShaderRD : public ShaderRD {
170181
class ScreenSpaceReflectionHizShaderRD : public ShaderRD {
171182
public:
172183
ScreenSpaceReflectionHizShaderRD() {
173-
ShaderLoaderRD::ShaderLoadResult res = ShaderLoaderRD::get_singleton()->load_shader_file("./shaders/effects/screen_space_reflection_hiz.glsl");
184+
String shader_path = _get_shader_base_dir() + "/effects/screen_space_reflection_hiz.glsl";
185+
ShaderLoaderRD::ShaderLoadResult res = ShaderLoaderRD::get_singleton()->load_shader_file(shader_path);
174186
if (res.error) {
175-
CRASH_NOW_MSG("Failed to load shader file: ./shaders/effects/screen_space_reflection_hiz.glsl");
187+
CRASH_NOW_MSG(vformat("Failed to load shader file: %s", shader_path));
176188
}
177189

178190
setup(res.vertex_code, res.fragment_code, res.compute_code, "ScreenSpaceReflectionHizShaderRD");
@@ -182,9 +194,10 @@ class ScreenSpaceReflectionHizShaderRD : public ShaderRD {
182194
class ScreenSpaceReflectionShaderRD : public ShaderRD {
183195
public:
184196
ScreenSpaceReflectionShaderRD() {
185-
ShaderLoaderRD::ShaderLoadResult res = ShaderLoaderRD::get_singleton()->load_shader_file("./shaders/effects/screen_space_reflection.glsl");
197+
String shader_path = _get_shader_base_dir() + "/effects/screen_space_reflection.glsl";
198+
ShaderLoaderRD::ShaderLoadResult res = ShaderLoaderRD::get_singleton()->load_shader_file(shader_path);
186199
if (res.error) {
187-
CRASH_NOW_MSG("Failed to load shader file: ./shaders/effects/screen_space_reflection.glsl");
200+
CRASH_NOW_MSG(vformat("Failed to load shader file: %s", shader_path));
188201
}
189202

190203
setup(res.vertex_code, res.fragment_code, res.compute_code, "ScreenSpaceReflectionShaderRD");
@@ -194,9 +207,10 @@ class ScreenSpaceReflectionShaderRD : public ShaderRD {
194207
class ScreenSpaceReflectionFilterShaderRD : public ShaderRD {
195208
public:
196209
ScreenSpaceReflectionFilterShaderRD() {
197-
ShaderLoaderRD::ShaderLoadResult res = ShaderLoaderRD::get_singleton()->load_shader_file("./shaders/effects/screen_space_reflection_filter.glsl");
210+
String shader_path = _get_shader_base_dir() + "/effects/screen_space_reflection_filter.glsl";
211+
ShaderLoaderRD::ShaderLoadResult res = ShaderLoaderRD::get_singleton()->load_shader_file(shader_path);
198212
if (res.error) {
199-
CRASH_NOW_MSG("Failed to load shader file: ./shaders/effects/screen_space_reflection_filter.glsl");
213+
CRASH_NOW_MSG(vformat("Failed to load shader file: %s", shader_path));
200214
}
201215

202216
setup(res.vertex_code, res.fragment_code, res.compute_code, "ScreenSpaceReflectionFilterShaderRD");
@@ -206,9 +220,10 @@ class ScreenSpaceReflectionFilterShaderRD : public ShaderRD {
206220
class ScreenSpaceReflectionResolveShaderRD : public ShaderRD {
207221
public:
208222
ScreenSpaceReflectionResolveShaderRD() {
209-
ShaderLoaderRD::ShaderLoadResult res = ShaderLoaderRD::get_singleton()->load_shader_file("./shaders/effects/screen_space_reflection_resolve.glsl");
223+
String shader_path = _get_shader_base_dir() + "/effects/screen_space_reflection_resolve.glsl";
224+
ShaderLoaderRD::ShaderLoadResult res = ShaderLoaderRD::get_singleton()->load_shader_file(shader_path);
210225
if (res.error) {
211-
CRASH_NOW_MSG("Failed to load shader file: ./shaders/effects/screen_space_reflection_resolve.glsl");
226+
CRASH_NOW_MSG(vformat("Failed to load shader file: %s", shader_path));
212227
}
213228

214229
setup(res.vertex_code, res.fragment_code, res.compute_code, "ScreenSpaceReflectionResolveShaderRD");

servers/rendering/renderer_rd/forward_clustered/scene_shader_forward_clustered.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
#pragma once
3232

3333
#include "../storage_rd/material_storage.h"
34+
#include "core/os/os.h"
3435
#include "core/string/ustring.h"
3536
#include "servers/rendering/renderer_rd/pipeline_hash_map_rd.h"
3637
#include "servers/rendering/renderer_rd/shader_loader_rd.h"
@@ -39,9 +40,10 @@
3940
class SceneForwardClusteredShaderRD : public ShaderRD {
4041
public:
4142
SceneForwardClusteredShaderRD() {
42-
ShaderLoaderRD::ShaderLoadResult res = ShaderLoaderRD::get_singleton()->load_shader_file("./shaders/forward_clustered/scene_forward_clustered.glsl");
43+
String shader_path = _get_shader_base_dir() + "/forward_clustered/scene_forward_clustered.glsl";
44+
ShaderLoaderRD::ShaderLoadResult res = ShaderLoaderRD::get_singleton()->load_shader_file(shader_path);
4345
if (res.error) {
44-
CRASH_NOW_MSG("Failed to load shader file: ./shaders/forward_clustered/scene_forward_clustered.glsl");
46+
CRASH_NOW_MSG(vformat("Failed to load shader file: %s", shader_path));
4547
}
4648

4749
setup(res.vertex_code, res.fragment_code, res.compute_code, "SceneForwardClusteredShaderRD");

servers/rendering/renderer_rd/shader_loader_rd.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,17 @@
3131
#pragma once
3232

3333
#include "core/string/ustring.h"
34+
#include "core/os/os.h"
35+
36+
static String _get_shader_base_dir() {
37+
List<String> cmdargs = OS::get_singleton()->get_cmdline_args();
38+
for (const String &arg : cmdargs) {
39+
if (arg.begins_with("--shader-dir=")) {
40+
return arg.split("=")[1];
41+
}
42+
}
43+
return "./shaders";
44+
}
3445

3546
class ShaderLoaderRD {
3647
static ShaderLoaderRD *singleton;

0 commit comments

Comments
 (0)