MCPcopy Create free account
hub / github.com/dfranx/ShaderDebugger / Swizzle

Function Swizzle

src/GLSLLibrary.cpp:46–91  ·  view source on GitHub ↗

swizzle */

Source from the content-addressed store, hash-verified

44
45 /* swizzle */
46 bv_variable Swizzle(bv_program* prog, bv_object* obj, const bv_string field)
47 {
48 const char* rgba = "rgba\0";
49 const char* xyzw = "xyzw\0";
50 const char* stpq = "stpq\0";
51
52 char name[4][2] = { 0 };
53 for (int j = 0; j < strlen(field); j++)
54 for (int i = 0; i < 4; i++) {
55 if (field[j] == rgba[i])
56 name[j][0] = xyzw[i];
57 else if (field[j] == stpq[i])
58 name[j][0] = xyzw[i];
59 else if (field[j] == xyzw[i])
60 name[j][0] = xyzw[i];
61 }
62
63 // printf("[DEBUG] swizzle: %s\n", field);
64
65 if (strlen(field) == 1)
66 return bv_variable_create_pointer(bv_object_get_property(obj, name[0]));
67 else if (strlen(field) == 2) {
68 bv_variable ret = Common::create_vec(prog, obj->prop[0].type, 2);
69 bv_object* vec = bv_variable_get_object(ret);
70 bv_object_set_property(vec, "x", bv_variable_create_pointer(bv_object_get_property(obj, name[0])));
71 bv_object_set_property(vec, "y", bv_variable_create_pointer(bv_object_get_property(obj, name[1])));
72 return ret;
73 }
74 else if (strlen(field) == 3) {
75 bv_variable ret = Common::create_vec(prog, obj->prop[0].type, 3);
76 bv_object* vec = bv_variable_get_object(ret);
77 bv_object_set_property(vec, "x", bv_variable_create_pointer(bv_object_get_property(obj, name[0])));
78 bv_object_set_property(vec, "y", bv_variable_create_pointer(bv_object_get_property(obj, name[1])));
79 bv_object_set_property(vec, "z", bv_variable_create_pointer(bv_object_get_property(obj, name[2])));
80 return ret;
81 }
82 else if (strlen(field) == 4) {
83 bv_variable ret = Common::create_vec(prog, obj->prop[0].type, 4);
84 bv_object* vec = bv_variable_get_object(ret);
85 bv_object_set_property(vec, "x", bv_variable_create_pointer(bv_object_get_property(obj, name[0])));
86 bv_object_set_property(vec, "y", bv_variable_create_pointer(bv_object_get_property(obj, name[1])));
87 bv_object_set_property(vec, "z", bv_variable_create_pointer(bv_object_get_property(obj, name[2])));
88 bv_object_set_property(vec, "w", bv_variable_create_pointer(bv_object_get_property(obj, name[3])));
89 return ret;
90 }
91 }
92
93 /* noise */
94 static FastNoise lib_glsl_noiseGenerator; // I know... this takes least time, i'll have to reimplement noise functions anyway

Callers

nothing calls this directly

Calls 1

create_vecFunction · 0.85

Tested by

no test coverage detected