Last active
September 1, 2024 12:52
-
-
Save sortofsleepy/41cab3f324184bddb3ebde932487394e to your computer and use it in GitHub Desktop.
Grid position helper functions
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// some general helpers on how to sample a 1D grid. | |
// returns the x/y coordinate of value inside of an 1D array/grid. | |
// pass in the desired index. size refers to the "width" of the grid. | |
// note that you may have to round/floor the value depending on your needs, ivec2 is only available in glsl. | |
ivec2 get_coord(int index, int size){ | |
return ivec2(index % size, index / size); | |
} | |
// gets the index of a value inside of an 1D array/grid. | |
// pass in the desired x/y coords. size refers to the "width" of the grid. | |
int get_index(int x, int y, int size){ | |
return x + size * y; | |
} | |
ivec4 get_neighbor_indices(int index, int size){ | |
// get coord of current index | |
ivec2 coord = get_coord(index, size); | |
// get coordinates of neighbors | |
ivec2 left = ivec2(coord.x - 1, coord.y); | |
int left_index = get_index(left.x, left.y, size); | |
ivec2 right = ivec2(coord.x + 1, coord.y); | |
int right_index = get_index(right.x, right.y, size); | |
ivec2 top = ivec2(coord.x, coord.y - 1); | |
int top_index = get_index(top.x, top.y, size); | |
ivec2 bottom = ivec2(coord.x, coord.y + 1); | |
int bottom_index = get_index(bottom.x, bottom.y, size); | |
return ivec4(top_index, left_index, bottom_index, right_index); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
An idea of how to possibly sample the neighbors of a storage buffer value. "size" refers to the "width" of the buffer, as such it's probably best to make buffers an even number to make figuring things out a bit simpler.
Have not tested fully.
Based on this
https://softwareengineering.stackexchange.com/questions/212808/treating-a-1d-data-structure-as-2d-grid