1
0
mirror of https://github.com/zenorogue/hyperrogue.git synced 2025-11-12 03:33:00 +00:00

fixed projections not implemented in shaders disabling their 3D features

This commit is contained in:
Zeno Rogue
2025-09-07 22:41:00 +02:00
parent 0bf46acbf2
commit e0b82be00f
3 changed files with 6 additions and 5 deletions

View File

@@ -35,7 +35,7 @@ EX bool non_spatial_model() {
if(pmodel == mdSpiral && euclid)
return true;
#if CAP_GL
return pmodel && vid.consider_shader_projection && (get_shader_flags() & SF_DIRECT);
return pmodel && vid.consider_shader_projection && (get_shader_flags() & SF_DIRECT) && (get_shader_flags() & SF_NONSPATIAL);
#else
return false;
#endif

View File

@@ -698,7 +698,7 @@ EX namespace models {
bool shaderside_projection = get_shader_flags() & SF_DIRECT;
if(vid.consider_shader_projection && !shaderside_projection)
dialog::lastItem().value = XLAT("N/A");
if(vid.consider_shader_projection && shaderside_projection && vpmodel)
if(vid.consider_shader_projection && shaderside_projection && (get_shader_flags() & SF_NONSPATIAL))
dialog::lastItem().value += XLAT(" (2D only)");
dialog::add_action([] { vid.consider_shader_projection = !vid.consider_shader_projection; });
#endif

View File

@@ -34,6 +34,7 @@ constexpr flagtype SF_ZFOG = 65536;
constexpr flagtype SF_ODSBOX = (1<<17);
constexpr flagtype SF_SEMIDIRECT = (1<<18);
constexpr flagtype SF_NONSPATIAL = (1<<19);
#endif
EX bool solv_all;
@@ -296,12 +297,12 @@ shared_ptr<glhr::GLprogram> write_shader(flagtype shader_flags) {
treset = true;
}
else if(pmodel == mdConformalSquare && pconf.model_transition == 1) {
shader_flags |= SF_ORIENT | SF_DIRECT;
shader_flags |= SF_ORIENT | SF_DIRECT | SF_NONSPATIAL;
coordinator += "t = uPP * t;", vsh += "uniform mediump mat4 uPP;";
coordinator += "t = to_square(t);";
}
else if(pmodel == mdBand && hyperbolic) {
shader_flags |= SF_BAND | SF_ORIENT | SF_BOX | SF_DIRECT;
shader_flags |= SF_BAND | SF_ORIENT | SF_BOX | SF_DIRECT | SF_NONSPATIAL;
coordinator += "t = uPP * t;", vsh += "uniform mediump mat4 uPP;";
if(dim2) coordinator += "mediump float zlev = zlevel(t); t /= zlev;\n";
if(dim3) coordinator += "mediump float r = sqrt(t.y*t.y+t.z*t.z); float ty = asinh(r);\n";
@@ -312,7 +313,7 @@ shared_ptr<glhr::GLprogram> write_shader(flagtype shader_flags) {
if(dim3) shader_flags |= SF_ZFOG;
}
else if(pmodel == mdHalfplane && hyperbolic) {
shader_flags |= SF_HALFPLANE | SF_ORIENT | SF_BOX | SF_DIRECT;
shader_flags |= SF_HALFPLANE | SF_ORIENT | SF_BOX | SF_DIRECT | SF_NONSPATIAL;
if(dim2) shader_flags |= SF_USE_ALPHA;
coordinator += "t = uPP * t;", vsh += "uniform mediump mat4 uPP;";
if(dim2) coordinator +=