Pipeline stack;

This commit is contained in:
bjorn 2022-05-31 21:57:55 -07:00
parent a09773a5c8
commit ac3801902b
1 changed files with 24 additions and 7 deletions

View File

@ -1424,17 +1424,34 @@ void lovrPassSetProjection(Pass* pass, uint32_t index, float* projection) {
}
void lovrPassPush(Pass* pass, StackType stack) {
if (stack == STACK_TRANSFORM) {
pass->transform = pass->transforms[++pass->transformIndex];
lovrCheck(pass->transformIndex < COUNTOF(pass->transforms), "Transform stack overflow (more pushes than pops?)");
mat4_init(pass->transforms[pass->transformIndex], pass->transforms[pass->transformIndex - 1]);
switch (stack) {
case STACK_TRANSFORM:
pass->transform = pass->transforms[++pass->transformIndex];
lovrCheck(pass->transformIndex < COUNTOF(pass->transforms), "%s stack overflow (more pushes than pops?)", "Transform");
mat4_init(pass->transforms[pass->transformIndex], pass->transforms[pass->transformIndex - 1]);
break;
case STACK_PIPELINE:
pass->pipeline = &pass->pipelines[++pass->pipelineIndex];
lovrCheck(pass->pipelineIndex < COUNTOF(pass->pipelines), "%s stack overflow (more pushes than pops?)", "Pipeline");
memcpy(pass->pipeline, &pass->pipelines[pass->pipelineIndex - 1], sizeof(Pipeline));
lovrRetain(pass->pipeline->shader);
break;
default: break;
}
}
void lovrPassPop(Pass* pass, StackType stack) {
if (stack == STACK_TRANSFORM) {
pass->transform = pass->transforms[--pass->transformIndex];
lovrCheck(pass->transformIndex < COUNTOF(pass->transforms), "Transform stack underflow (more pops than pushes?)");
switch (stack) {
case STACK_TRANSFORM:
pass->transform = pass->transforms[--pass->transformIndex];
lovrCheck(pass->transformIndex < COUNTOF(pass->transforms), "%s stack underflow (more pops than pushes?)", "Transform");
break;
case STACK_PIPELINE:
lovrRelease(pass->pipeline->shader, lovrShaderDestroy);
pass->pipeline = &pass->pipelines[--pass->pipelineIndex];
lovrCheck(pass->pipelineIndex < COUNTOF(pass->pipelines), "%s stack underflow (more pops than pushes?)", "Pipeline");
break;
default: break;
}
}