File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1- #version 300 es
2-
3- precision highp float ;
4-
5- const int LIMB_SIZE = 32 ;
6- const int FRACTIONAL_SIZE = LIMB_SIZE / 2 ;
7-
8- struct number {
9- uint limb [ LIMB_SIZE ] ;
10- int sign ;
11- bool is_infinite ;
12- } ;
13-
14- struct hp_vec2 {
15- number x ;
16- number y ;
17- } ;
18-
19- hp_vec2 initialize_hp_vec2 ( number x , number y ) {
20- hp_vec2 res ;
21- res . x = x ;
22- res . y = y ;
23- return res ;
24- }
25-
26- number null_number ( ) {
27- number res ;
28- for ( int i = 0 ; i < LIMB_SIZE ; ++ i ) {
29- res . limb [ i ] = 0 u ;
30- }
31- res . sign = 1 ;
32- return res ;
33- }
34-
35- number infinite_number ( ) {
36- number res ;
37- for ( int i = 0 ; i < LIMB_SIZE ; ++ i ) {
38- res . limb [ i ] = ( 1 u << 31 u ) - 1 u ;
39- }
40- res . sign = 1 ;
41- res . is_infinite = true ;
42- return res ;
43- }
44-
45- number number_one ( ) {
46- number res = null_number ( ) ;
47- res . limb [ FRACTIONAL_SIZE ] = 1 u ;
48- return res ;
49- }
50-
511number hp_neg ( number a ) {
522 a . sign *= - 1 ;
533 return a ;
Original file line number Diff line number Diff line change 1+ #version 300 es
2+
3+ precision highp float ;
4+
5+ const int LIMB_SIZE = 32 ;
6+ const int FRACTIONAL_SIZE = LIMB_SIZE / 2 ;
7+
8+ struct number {
9+ uint limb [ LIMB_SIZE ] ;
10+ int sign ;
11+ bool is_infinite ;
12+ } ;
13+
14+ struct hp_vec2 {
15+ number x ;
16+ number y ;
17+ } ;
18+
19+ hp_vec2 initialize_hp_vec2 ( number x , number y ) {
20+ hp_vec2 res ;
21+ res . x = x ;
22+ res . y = y ;
23+ return res ;
24+ }
25+
26+ number initialize_number ( uint limb [ LIMB_SIZE ] , int sign , bool is_infinite ) {
27+ number res ;
28+ res . limb = limb ;
29+ res . sign = sign ;
30+ res . is_infinite = is_infinite ;
31+ }
32+
33+ number null_number ( ) {
34+ number res ;
35+ for ( int i = 0 ; i < LIMB_SIZE ; ++ i ) {
36+ res . limb [ i ] = 0 u ;
37+ }
38+ res . sign = 1 ;
39+ return res ;
40+ }
41+
42+ number infinite_number ( ) {
43+ number res ;
44+ for ( int i = 0 ; i < LIMB_SIZE ; ++ i ) {
45+ res . limb [ i ] = ( 1 u << 31 u ) - 1 u ;
46+ }
47+ res . sign = 1 ;
48+ res . is_infinite = true ;
49+ return res ;
50+ }
51+
52+ number number_one ( ) {
53+ number res = null_number ( ) ;
54+ res . limb [ FRACTIONAL_SIZE ] = 1 u ;
55+ return res ;
56+ }
Original file line number Diff line number Diff line change @@ -42,3 +42,16 @@ string stack_to_glsl_string(const vector<TokenOperator>& stack) {
4242 if (str_stack.empty ()) return " " ;
4343 return str_stack.top ();
4444}
45+
46+ string vector_to_glsl_array (const vector<unsigned int >& limbs){
47+ string out = " uint[](" ;
48+ for (const unsigned int & limb : limbs){
49+ out += std::to_string (limb) + " u," ;
50+ }
51+ out.pop_back ();
52+ out += " );" ;
53+ }
54+
55+ string big_number_to_glsl_string (const vector<unsigned int >& limbs, const int sign, const bool is_infinite = false ){
56+ return " initialize_number(" + vector_to_glsl_array (limbs) + " ," + std::to_string (sign) + " ," + std::to_string (is_infinite) + " )" ;
57+ }
Original file line number Diff line number Diff line change 66/// <summary>/// Get an operator (unsigned char) and constant stack (glm::vec2) from a TokenOperator stack/// </summary>/// <param name="stack">The RPN TokenOperator stack</param>/// <param name="operator_stack">A queue of opcodes in RPN. Always send an empty vector here.</param>/// <param name="constant_stack">A queue of constants. Always send an empty vector here.</param>
77void get_stacks (const vector < TokenOperator > & stack , vector < unsigned char > & operator_stack , vector < glm ::vec2 > & constant_stack );
88
9- string stack_to_glsl_string (const vector < TokenOperator > & stack );
9+ string stack_to_glsl_string (const vector < TokenOperator > & stack );
10+
11+ string vector_to_glsl_array (const vector < unsigned int > & limbs );
12+
13+ string big_number_to_glsl_string (const vector < unsigned int > & limbs , const int sign , const bool is_infinite = false);
14+
You can’t perform that action at this time.
0 commit comments