From 007e6d2586ca2cbc33d079d6285b34a65e69fb6d Mon Sep 17 00:00:00 2001 From: Lauri Gustafsson Date: Sun, 6 Aug 2023 21:26:51 +0300 Subject: [PATCH] Add rocket tab separator at uniform name underscore --- README.md | 4 +-- doc/rocketcam.png | Bin 3165 -> 4527 bytes shaders/bloom_pre.frag | 4 +-- shaders/post.frag | 4 +-- shaders/shader.frag | 14 +++++----- src/demo.c | 61 ++++++++++++++++++++++++----------------- 6 files changed, 49 insertions(+), 38 deletions(-) diff --git a/README.md b/README.md index 8596071..d6ef5f8 100644 --- a/README.md +++ b/README.md @@ -78,8 +78,8 @@ tracks, and before you set reasonable values to them, nothing will render. ![Camera controls in Rocket](doc/rocketcam.png) -A good starting point is to set CamFov to some value between 45 and 90, -CamPos.z to 3, leave CamTarget as all zeroes (the origin). +A good starting point is to set Fov to some value between 45 and 90, +Pos.z to 3, leave Target as all zeroes (the origin). Also try and see what other rocket tracks do. ## Releasing diff --git a/doc/rocketcam.png b/doc/rocketcam.png index 41e9b3a51cca15a8792db3a7d10a2e4b7ce15196..5d8781ba8c88e617bab9c1779994dc25a4d5478b 100644 GIT binary patch literal 4527 zcmdUz`8(9z|Ht2`RBlNMnL;CJk?!o<3~KCI(jsK(wil)_BgWRs5ECjTOCge&+cXB* zZYpCPjbSkMEyiGMGm|mQcXZ$1>+`+7*XQ#Ge9jN&I_JEv_j$d}jy(3cWm4MO^aj{H?5ToBH{9 znpDE}s%?{dTD=qGYPLDMpdq7I^1en>EBr6OYz)++BfCB~#8MipPyE9i00e`*2q1-1+U8^%P zGUVjsGP5l%+_-VW#H8W-+w)o3I{}o}9oPb`ylrCXLWX7w9UZzzyM;wJFA)`(t1zI? zSYQmrp7R&9pde&~dQofVRvW30iShR@qJ&uH5(voAzwQMc_s83R`}U1wE7I&%2SKs% z1j3$!>M)9?4J9+%ZaUPp7ZEj57bPw({<+iul66$z3op8ULRo8fc^Grpdt^RGjFITt!18bUb9!eo(H2Y7rl)+l=X#aaVd$;xaG zNIhWOskbzyxFyLv9H_KQS5mLJ#mc;66wZzxA8@a`=mfpfj-D>*CueXaG9ldA!g^^k zh!FUGO>yv1%S=|{T+H0E1~%N&Y)Xu|z$30R;nhr3b$VyjVgqDszx;qr5tPyJMP z29MiKXqD$`*RHHPIkH`mwO4`94L`1U-E|)-2rC>co3eAv9Azv&kf^VT?n%?;)8fL0 zV;E@@LDigu7Lgk8`032Z{@R%6(OLTTjCg!NJ*SbbtYjvxp#OQUsnCdG+Gr4zqrcqM z>fV{7cL#Q7>0zRLB%&>WztdLsqM_e-W8A!LKCl1OEynEZtXss?D}%>yZp#^Yv3GTq zHs&S3%Y4}s?!DS3y#RP83FEvPSKGmW_r$^4dc7{Tl+hnFYZt##hG)XBm2 z@tRQZAuZgG*)`7L>JRJ=4uK!>v*0;n_yWRv(A2r%*)p!Nx5CVExMV%MZsWcarC`Sc z%6(r~1fLNXN|vbo>_a|CDImQ(i{Kti>Kr=ug`9na54jqCZe zT0Y<~OEB^A$A*hmND9%<{5HuGb@N$~q?)(kx!Y}Jjoyz@MCgfmiz&BrYM|hK{VU(g zdut8p6|XCLdU^t{2X~7&meOd;{;Urp+GqMIS?|&b(C~@oiV8gM?xT%zVUHJGXI@4x zCiQZXAbFv0%(=-qQLT#D_;~pbD0bG;Gzk>_%wnW$I(wt!bH~60+x{l;`r>yNkQ$Vv zlAXItO7!s0Nez`fDR+4yyBkH>DkJwdmK8uRUf6-Oa=ljjs>14fX#}aWSonycq~y{X zH!_c@6IC_#R+8l$}}G zq+kqLKUCtxY^$Q@ab3csNg;LcJILddf&w2qe)LE;>?;KuQ-`#Nf#c*PqMX78GDqPs z*d*gja{Et1Ridl}_hxTi#W0@0{&ME)0PUwG<6!b372aZeSQ*@08G87ncbvag49bai<=il3>=O_Lr8YdaBT+L$B? zs=e1p@Wv92-ndhS&u?@(vu(< ze@mY%p|FV~7WJ=b$^K^TrJx^T)Wai0oZDyp6DQRp%kT<8%Z#&Iq1x2oiAj zuaL>KLiv6?b8++s_7BngJpQF2g3adK^YY@(c82bV@mr(dKgXV`nP$Yp&WY|}DeV2O z$$z-k#>}bbF=A>XIuFRW)+4#K8>##Y0Kv-tybDM-Xpju=t-EdC``WEIybh`g&Rz4( z)JCqm7aIu#xU2SVZw$X+VTH~6UVk$vdB6CqZT~SY^#`JeBm){jOeKa4fG1*4# zp!7(#fOLb~M6>fZR9kl_Q&J2PFig#w=j*{$2qi;{5oVpVS4bT?%W#ZlVg1_ zdzNsb~Ua;DGI|j#_88q^TG{Bo$BHY267NmrMcPbhETgbjnzO25@v4ZJ~Pz*^>Mz)5P-L z;NHY$Dpj*wf#dLOf3rALvcD>%kV2W+gCV{%aKJ#heihF(Bk0b6>pO4eLQPXsQ_ZhN zVrDqWV~FKT;%}@YUuy>jN9+Mc9iWmYPMr#gkh6GR;QzU9knU8OUU0>W`S{`vKWAyU zu1{1E;}&EFjB@HC71s62@QDLLGo()T=?SCEowDa*_;R{RUq@`QWs zJEFF%jQswIwNjVr-kmTwZ2B<2Ygs)peyK$!C;M^!S=!PUbz+|O*oKr5H~};1#*)v2 zo>WV+5H7PG?@c8S6n#`fbvktOHpg7|V^OTL3oiz~h5Eymm#=AH4@$u7=cW&@uwYSisw((<6hZlGGRR7$- zRApcwlJz2ce0H(U5+*Y<>~?q&PvX+y(umd?ry+V-#{2!u7xV4R99xX(QNxoJ2rRTo zSh+&xRM3;=857RKhWs%Cz%R~*Di3q)x6)ivMvsh z#G5pNJz>IX4Fs`x3uCkwOj@B-C^mEj-Q1J}%E~qq6_ZhWvW^nBX#6SY5;z#GS&b6FUoKz~00C=-*0$!GvS?N$vuyVE>g1sdg}Fwd*sh znzSodt{gaUKo24Y>_wa9$7^b9>l z&TBBQwdE;6gas!R`|{H@t_Wi>@D@a32|Wc3_T|lgIHfK;(=kKd0VreQXM)BQm=D zDE0kT+K%ees?b|j1k(nRe4zF_p-EZ625D|iAOI(`btV`_8#qqR69=qT{RCGZRd8Ed zTb|B`;$oEgAIHy}!IqXLZ|a@&HRhQR&?-N(XlpNVWhNLFirjm z+bDylc48u4JoeCpR0@qo>+0&7=_S8R96`L~?gS=f{~Zl%Ue=-`QA!OY1~?H(3_r1$ zfJ4SXWh?qL%R5Cofc~~00!Dv2)(j2)q<7mEmU){|}XW48Q4P{~Lja57Wn6^~a54rrtC~2|4sn9*S&1+i!pv z^!pPXt^O68i&7T`oH~*qw2)~MLQp6a&j}b@yX}b~j4;Et=HmkKZdH=ANH_BV!$t&N wNRWb90iwVCymMHPB35k({KVF%pTQRzDbqbYTR9pnc!&WkO>JSN=REHJ56On{_5c6? literal 3165 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 #include #include +#include #include #define NOISE_SIZE 256 @@ -221,14 +222,29 @@ demo_t *demo_init(int width, int height) { return demo; } -static char *rocket_component(const char *name, size_t name_len, char c) { - static char components[UFM_NAME_MAX + 2]; - assert(name_len < UFM_NAME_MAX); - memcpy(components, name, name_len); - components[name_len] = '.'; - components[name_len + 1] = c; - components[name_len + 2] = 0; - return components; +static const char *rocket_track_name(uniform_t *ufm, char c) { + static char trackname[UFM_NAME_MAX]; + + // Adjust for r_ -prefix + const char *name = ufm->name + 2; + size_t name_len = ufm->name_len - 2; + + memcpy(trackname, name, name_len + 1); + + // Replace second underscore with colon (tab) when possible + char *underscore = memchr(trackname, '_', name_len); + if (underscore) { + *underscore = ':'; + } + + // Add component suffix when required + if (c) { + trackname[name_len] = '.'; + trackname[name_len + 1] = c; + trackname[name_len + 2] = 0; + } + + return trackname; } static void set_rocket_uniforms(const program_t *program, @@ -236,38 +252,33 @@ static void set_rocket_uniforms(const program_t *program, for (size_t i = 0; i < program->uniform_count; i++) { uniform_t *ufm = program->uniforms + i; - // Check and adjust for r_ -prefix + // Check for r_ -prefix if (ufm->name_len < 3 || ufm->name[0] != 'r' || ufm->name[1] != '_') { continue; } - const char *name = ufm->name + 2; - size_t name_len = ufm->name_len - 2; GLuint location = glGetUniformLocation(program->handle, ufm->name); switch (ufm->type) { case UFM_FLOAT: - glUniform1f(location, GET_VALUE(name)); + glUniform1f(location, GET_VALUE(rocket_track_name(ufm, 0))); break; case UFM_VEC2: - glUniform2f(location, - GET_VALUE(rocket_component(name, name_len, 'x')), - GET_VALUE(rocket_component(name, name_len, 'y'))); + glUniform2f(location, GET_VALUE(rocket_track_name(ufm, 'x')), + GET_VALUE(rocket_track_name(ufm, 'y'))); break; case UFM_VEC3: - glUniform3f(location, - GET_VALUE(rocket_component(name, name_len, 'x')), - GET_VALUE(rocket_component(name, name_len, 'y')), - GET_VALUE(rocket_component(name, name_len, 'z'))); + glUniform3f(location, GET_VALUE(rocket_track_name(ufm, 'x')), + GET_VALUE(rocket_track_name(ufm, 'y')), + GET_VALUE(rocket_track_name(ufm, 'z'))); break; case UFM_VEC4: - glUniform4f(location, - GET_VALUE(rocket_component(name, name_len, 'x')), - GET_VALUE(rocket_component(name, name_len, 'y')), - GET_VALUE(rocket_component(name, name_len, 'z')), - GET_VALUE(rocket_component(name, name_len, 'w'))); + glUniform4f(location, GET_VALUE(rocket_track_name(ufm, 'x')), + GET_VALUE(rocket_track_name(ufm, 'y')), + GET_VALUE(rocket_track_name(ufm, 'z')), + GET_VALUE(rocket_track_name(ufm, 'w'))); break; case UFM_INT: - glUniform1i(location, (GLint)GET_VALUE(name)); + glUniform1i(location, (GLint)GET_VALUE(rocket_track_name(ufm, 0))); break; case UFM_UNKNOWN:; }