flatten state
This commit is contained in:
+6
-3
@@ -51,11 +51,12 @@ static void compute_fps() {
|
||||
}
|
||||
}
|
||||
|
||||
// TODO put in state file
|
||||
static void randomize_context_state() {
|
||||
unsigned int i;
|
||||
|
||||
for (i = 0; i < program.frag_count * program.sub_type_count; i++) {
|
||||
context->sub_state[i] = rand_uint(program.sub_variant_count);
|
||||
for (i = 0; i < program.frag_count; i++) {
|
||||
context->state[i] = rand_uint(program.sub_variant_count);
|
||||
}
|
||||
}
|
||||
static void init_context(Parameters params) {
|
||||
@@ -65,7 +66,7 @@ static void init_context(Parameters params) {
|
||||
context->demo = params.demo;
|
||||
context->monitor = params.monitor;
|
||||
|
||||
memset(context->sub_state, 0, sizeof(context->sub_state));
|
||||
memset(context->state, 0, sizeof(context->state));
|
||||
|
||||
if (params.demo) {
|
||||
randomize_context_state();
|
||||
@@ -215,6 +216,7 @@ static void key_callback(Window *window, int key,
|
||||
static void midi_callback(unsigned char code, float value) {
|
||||
log_debug("midi: %d %.2f", code, value);
|
||||
midi_write(midi, code, value);
|
||||
// TODO treat in state file
|
||||
}
|
||||
|
||||
static void loop(bool hr) {
|
||||
@@ -307,6 +309,7 @@ void forge_run(Parameters params) {
|
||||
init_context(params);
|
||||
|
||||
if (program.error) {
|
||||
context->stop = true;
|
||||
window_terminate();
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
+9
-15
@@ -300,13 +300,9 @@ static void init_single_program(ShaderProgram *program, unsigned int i,
|
||||
|
||||
prefix = config_file_get_str(config, "UNIFORM_STATE_PREFIX", "state");
|
||||
for (j = 0; j < program->frag_count; j++) {
|
||||
for (k = 0; k < program->sub_type_count; k++) {
|
||||
sprintf(name, "%s%d_%d", prefix, j + 1, k + 1);
|
||||
program
|
||||
->istate_locations[i * program->frag_count * program->sub_type_count +
|
||||
j * program->sub_type_count + k] =
|
||||
glGetUniformLocation(program->programs[i], name);
|
||||
}
|
||||
sprintf(name, "%s%d", prefix, j + 1);
|
||||
program->istate_locations[i * program->frag_count + j] =
|
||||
glGetUniformLocation(program->programs[i], name);
|
||||
}
|
||||
|
||||
for (j = 0; j < program->sub_type_count; j++) {
|
||||
@@ -510,18 +506,16 @@ static void use_program(ShaderProgram program, int i, bool output,
|
||||
}
|
||||
|
||||
// set subroutines for fragment and update state uniforms
|
||||
k = context->state[i];
|
||||
for (j = 0; j < program.sub_type_count; j++) {
|
||||
k = context->sub_state[i * program.sub_type_count + j];
|
||||
subroutines[j] = program.sub_locations[i * program.sub_type_count *
|
||||
program.sub_variant_count +
|
||||
j * program.sub_variant_count + k];
|
||||
for (k = 0; k < program.frag_count; k++) {
|
||||
glUniform1i(
|
||||
program.istate_locations[i * program.frag_count *
|
||||
program.sub_type_count +
|
||||
k * program.sub_type_count + j],
|
||||
(const GLint)context->sub_state[k * program.sub_type_count + j]);
|
||||
}
|
||||
}
|
||||
|
||||
for (j = 0; j < program.frag_count; j++) {
|
||||
glUniform1i(program.istate_locations[i * program.frag_count + j],
|
||||
(const GLint)context->state[j]);
|
||||
}
|
||||
|
||||
glUniformSubroutinesuiv(GL_FRAGMENT_SHADER, program.sub_type_count,
|
||||
|
||||
+1
-1
@@ -125,7 +125,7 @@ typedef struct SharedContext {
|
||||
double time;
|
||||
unsigned int fps;
|
||||
float tempo;
|
||||
unsigned int sub_state[MAX_FRAG * MAX_FRAG];
|
||||
unsigned int state[MAX_FRAG];
|
||||
bool demo;
|
||||
unsigned int seeds[MAX_FRAG];
|
||||
bool monitor;
|
||||
|
||||
Reference in New Issue
Block a user