1
0
mirror of https://github.com/zenorogue/hyperrogue.git synced 2025-11-13 20:27:10 +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) if(pmodel == mdSpiral && euclid)
return true; return true;
#if CAP_GL #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 #else
return false; return false;
#endif #endif

View File

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

View File

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