mirror of
https://github.com/zenorogue/hyperrogue.git
synced 2024-12-20 15:40:26 +00:00
solv:: removed ILP for simplicity and better performance
This commit is contained in:
parent
5c42c2f8e5
commit
90aa7b5c02
@ -290,7 +290,6 @@ void display_data::set_projection(int ed) {
|
||||
|
||||
}
|
||||
|
||||
glUniformMatrix4fv(glhr::current->uILP, 1, 0, glhr::tmtogl_transpose(solv::ilocal_perspective).as_array());
|
||||
glUniform1i(glhr::current->tInvExpTable, glhr::INVERSE_EXP_BINDING);
|
||||
glActiveTexture(GL_TEXTURE0 + glhr::INVERSE_EXP_BINDING);
|
||||
glBindTexture(GL_TEXTURE_3D, invexpid);
|
||||
|
@ -64,6 +64,7 @@ movedir vectodir(const hyperpoint& P) {
|
||||
|
||||
transmatrix U = ggmatrix(cwt.at);
|
||||
if(GDIM == 3 && WDIM == 2) U = radar_transform * U;
|
||||
if(pmodel == mdSolPerspective) U = solv::local_perspective * U;
|
||||
|
||||
hyperpoint H = sphereflip * tC0(U);
|
||||
transmatrix Centered = sphereflip * rgpushxto0(H);
|
||||
|
2
hyper.h
2
hyper.h
@ -5629,7 +5629,7 @@ namespace kite {
|
||||
#endif
|
||||
|
||||
namespace solv {
|
||||
extern transmatrix local_perspective, ilocal_perspective;
|
||||
extern transmatrix local_perspective;
|
||||
hrmap *new_map();
|
||||
hyperpoint inverse_exp(hyperpoint h);
|
||||
|
||||
|
@ -906,7 +906,7 @@ bool invalid_point(const transmatrix T) {
|
||||
|
||||
bool in_smart_range(const transmatrix& T) {
|
||||
if(invalid_point(T)) return false;
|
||||
if(pmodel == mdSolPerspective) return solv::in_table_range(solv::ilocal_perspective * tC0(T));
|
||||
if(pmodel == mdSolPerspective) return solv::in_table_range(tC0(T));
|
||||
hyperpoint h1;
|
||||
applymodel(tC0(T), h1);
|
||||
for(int i=0; i<DIM; i++)
|
||||
@ -1261,6 +1261,7 @@ void centerpc(ld aspd) {
|
||||
|
||||
transmatrix T = cwtV;
|
||||
#if MAXMDIM >= 4
|
||||
if(pmodel == mdSolPerspective) T = solv::local_perspective * T;
|
||||
if(GDIM == 3 && WDIM == 2) {
|
||||
geom3::do_auto_eye();
|
||||
int sl = snakelevel(cwt.at);
|
||||
@ -1877,7 +1878,7 @@ bool do_draw(cell *c, const transmatrix& T) {
|
||||
if(WDIM == 3) {
|
||||
if(cells_drawn > vid.cells_drawn_limit) return false;
|
||||
if(pmodel == mdSolPerspective) {
|
||||
if(!solv::in_table_range(solv::ilocal_perspective * tC0(T))) return false;
|
||||
if(!solv::in_table_range(tC0(T))) return false;
|
||||
if(!limited_generation(c)) return false;
|
||||
}
|
||||
else if(vid.use_smart_range) {
|
||||
|
@ -218,7 +218,7 @@ struct GLprogram {
|
||||
GLuint _program;
|
||||
GLuint vertShader, fragShader;
|
||||
|
||||
GLint uMVP, uFog, uFogColor, uColor, tTexture, tInvExpTable, uMV, uProjection, uAlpha, uFogBase, uILP, uPRECX, uPRECY, uPRECZ;
|
||||
GLint uMVP, uFog, uFogColor, uColor, tTexture, tInvExpTable, uMV, uProjection, uAlpha, uFogBase, uPRECX, uPRECY, uPRECZ;
|
||||
|
||||
GLprogram(string vsh, string fsh) {
|
||||
_program = glCreateProgram();
|
||||
@ -273,7 +273,6 @@ struct GLprogram {
|
||||
uFogBase = glGetUniformLocation(_program, "uFogBase");
|
||||
uAlpha = glGetUniformLocation(_program, "uAlpha");
|
||||
uColor = glGetUniformLocation(_program, "uColor");
|
||||
uILP = glGetUniformLocation(_program, "uILP");
|
||||
tTexture = glGetUniformLocation(_program, "tTexture");
|
||||
tInvExpTable = glGetUniformLocation(_program, "tInvExpTable");
|
||||
|
||||
@ -656,7 +655,7 @@ void init() {
|
||||
hp && dim3, "t.x /= -rads; t.y /= -rads; t.z /= -rads; t[3] = 1.0;",
|
||||
|
||||
s3, "vec4 t = uMV * aPosition;",
|
||||
ssol, "t = inverse_exp(uILP * t);",
|
||||
ssol, "t = inverse_exp(t);",
|
||||
ssol, "float d = sqrt(t[0] * t[0] + t[1] * t[1] + t[2] * t[2]);",
|
||||
ssol, "float ad = (d == 0.) ? 0. : (d < 1.) ? min(atanh(d), 10.) : 10.; ",
|
||||
ssol, "float m = ad / d / 11.; t[0] *= m; t[1] *= m; t[2] *= m; ",
|
||||
|
6
sol.cpp
6
sol.cpp
@ -155,7 +155,7 @@ namespace solv {
|
||||
return res * atanh(r) / r; */
|
||||
}
|
||||
|
||||
transmatrix local_perspective, ilocal_perspective;
|
||||
transmatrix local_perspective;
|
||||
|
||||
bool geodesic_movement = true;
|
||||
|
||||
@ -274,9 +274,8 @@ namespace solv {
|
||||
|
||||
transmatrix T = eupush( tC0(inverse(View)) );
|
||||
local_perspective = View * T;
|
||||
ilocal_perspective = inverse(local_perspective);
|
||||
|
||||
dq::enqueue(viewctr.at, cview());
|
||||
dq::enqueue(viewctr.at, inverse(local_perspective) * cview());
|
||||
|
||||
while(!dq::drawqueue.empty()) {
|
||||
auto& p = dq::drawqueue.front();
|
||||
@ -378,7 +377,6 @@ namespace solv {
|
||||
|
||||
string solshader =
|
||||
"uniform mediump sampler3D tInvExpTable;"
|
||||
"uniform mediump mat4 uILP;"
|
||||
"uniform mediump float PRECX, PRECY, PRECZ;"
|
||||
|
||||
"float x_to_ix(float u) {"
|
||||
|
Loading…
Reference in New Issue
Block a user