gl.useProgram(active_shader.program);
}
- push_scissor :: (use ir: ^Immediate_Renderer, x: f32, y: f32, w: f32, h: f32, intersect_previous := true) {
+ push_scissor :: (use ir: ^Immediate_Renderer, x: f32, y: f32, w: f32, h: f32) {
if vertex_count > 0 do ir->flush();
if !gl.isEnabled(gl.SCISSOR_TEST) {
array.push(^scissor_stack, .{ new_x0, new_y0, new_w, new_h });
- gl.scissor(~~new_x0, window_height - ~~new_y0 - ~~new_h, ~~new_w, ~~new_h);
+ gl.scissor(~~new_x0, window_height - ~~new_y1, ~~new_w, ~~new_h);
}
pop_scissor :: (use ir: ^Immediate_Renderer) {
if scissor_stack.count > 0 {
s := scissor_stack[scissor_stack.count - 1];
- gl.scissor(~~s.x, ~~s.y, ~~s.w, ~~s.h);
+ gl.scissor(~~s.x, window_height - ~~s.y - ~~s.h, ~~s.w, ~~s.h);
} else {
ir->scissor_disable();
return 0;
}
- assert(idx < bh_arr_length(args->values));
+ // assert(idx < bh_arr_length(args->values));
+ if (idx >= bh_arr_length(args->values)) {
+ token_toggle_end(named_value->token);
+ return 0;
+ }
if (args->values[idx] != NULL && args->values[idx] != named_value->value) {
if (err_msg) *err_msg = bh_aprintf(global_scratch_allocator, "Multiple values given for parameter named '%s'.", named_value->token->text);