this repo has no description
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Fixed some cases for when the current context target needs to be set upon certain calls.

+75 -28
+64 -21
src/SDL_gpu.c
··· 22 22 #endif 23 23 24 24 #define CHECK_RENDERER (_gpu_current_renderer != NULL) 25 + #define MAKE_CURRENT_IF_NONE(target) do{ if(_gpu_current_renderer->current_context_target == NULL && target != NULL && target->context != NULL) GPU_MakeCurrent(target, target->context->windowID); } while(0) 25 26 #define CHECK_CONTEXT (_gpu_current_renderer->current_context_target != NULL) 26 27 #define RETURN_ERROR(code, details) do{ GPU_PushErrorCode(__func__, code, "%s", details); return; } while(0) 27 28 ··· 445 446 446 447 GPU_Target* GPU_CreateTargetFromWindow(Uint32 windowID) 447 448 { 448 - if(_gpu_current_renderer == NULL || _gpu_current_renderer->current_context_target == NULL) 449 + if(_gpu_current_renderer == NULL) 449 450 return NULL; 450 451 451 452 return _gpu_current_renderer->impl->CreateTargetFromWindow(_gpu_current_renderer, windowID, NULL); ··· 453 454 454 455 GPU_Target* GPU_CreateAliasTarget(GPU_Target* target) 455 456 { 456 - if(_gpu_current_renderer == NULL || _gpu_current_renderer->current_context_target == NULL) 457 - return NULL; 457 + if(!CHECK_RENDERER) 458 + return NULL; 459 + MAKE_CURRENT_IF_NONE(target); 460 + if(!CHECK_CONTEXT) 461 + return NULL; 458 462 459 463 return _gpu_current_renderer->impl->CreateAliasTarget(_gpu_current_renderer, target); 460 464 } 461 465 462 466 void GPU_MakeCurrent(GPU_Target* target, Uint32 windowID) 463 467 { 464 - if(_gpu_current_renderer == NULL || _gpu_current_renderer->current_context_target == NULL) 468 + if(_gpu_current_renderer == NULL) 465 469 return; 466 470 467 471 _gpu_current_renderer->impl->MakeCurrent(_gpu_current_renderer, target, windowID); ··· 502 506 503 507 void GPU_SetVirtualResolution(GPU_Target* target, Uint16 w, Uint16 h) 504 508 { 505 - if(_gpu_current_renderer == NULL || _gpu_current_renderer->current_context_target == NULL || w == 0 || h == 0) 509 + if(!CHECK_RENDERER) 510 + RETURN_ERROR(GPU_ERROR_USER_ERROR, "NULL renderer"); 511 + MAKE_CURRENT_IF_NONE(target); 512 + if(!CHECK_CONTEXT) 513 + RETURN_ERROR(GPU_ERROR_USER_ERROR, "NULL context"); 514 + if(w == 0 || h == 0) 506 515 return; 507 516 508 517 _gpu_current_renderer->impl->SetVirtualResolution(_gpu_current_renderer, target, w, h); ··· 510 519 511 520 void GPU_UnsetVirtualResolution(GPU_Target* target) 512 521 { 513 - if(_gpu_current_renderer == NULL || _gpu_current_renderer->current_context_target == NULL) 514 - return; 522 + if(!CHECK_RENDERER) 523 + RETURN_ERROR(GPU_ERROR_USER_ERROR, "NULL renderer"); 524 + MAKE_CURRENT_IF_NONE(target); 525 + if(!CHECK_CONTEXT) 526 + RETURN_ERROR(GPU_ERROR_USER_ERROR, "NULL context"); 515 527 516 528 _gpu_current_renderer->impl->UnsetVirtualResolution(_gpu_current_renderer, target); 517 529 } ··· 771 783 772 784 GPU_Camera GPU_SetCamera(GPU_Target* target, GPU_Camera* cam) 773 785 { 774 - if(_gpu_current_renderer == NULL || _gpu_current_renderer->current_context_target == NULL) 786 + if(_gpu_current_renderer == NULL) 787 + return GPU_GetDefaultCamera(); 788 + MAKE_CURRENT_IF_NONE(target); 789 + if(_gpu_current_renderer->current_context_target == NULL) 775 790 return GPU_GetDefaultCamera(); 776 791 777 792 return _gpu_current_renderer->impl->SetCamera(_gpu_current_renderer, target, cam); ··· 1018 1033 1019 1034 GPU_Image* GPU_CopyImageFromTarget(GPU_Target* target) 1020 1035 { 1021 - if(_gpu_current_renderer == NULL || _gpu_current_renderer->current_context_target == NULL) 1036 + if(_gpu_current_renderer == NULL) 1037 + return NULL; 1038 + MAKE_CURRENT_IF_NONE(target); 1039 + if(_gpu_current_renderer->current_context_target == NULL) 1022 1040 return NULL; 1023 1041 1024 1042 return _gpu_current_renderer->impl->CopyImageFromTarget(_gpu_current_renderer, target); ··· 1026 1044 1027 1045 SDL_Surface* GPU_CopySurfaceFromTarget(GPU_Target* target) 1028 1046 { 1029 - if(_gpu_current_renderer == NULL || _gpu_current_renderer->current_context_target == NULL) 1047 + if(_gpu_current_renderer == NULL) 1048 + return NULL; 1049 + MAKE_CURRENT_IF_NONE(target); 1050 + if(_gpu_current_renderer->current_context_target == NULL) 1030 1051 return NULL; 1031 1052 1032 1053 return _gpu_current_renderer->impl->CopySurfaceFromTarget(_gpu_current_renderer, target); ··· 1070 1091 1071 1092 void GPU_FreeTarget(GPU_Target* target) 1072 1093 { 1073 - if(_gpu_current_renderer == NULL || _gpu_current_renderer->current_context_target == NULL) 1094 + if(_gpu_current_renderer == NULL) 1074 1095 return; 1075 1096 1076 1097 _gpu_current_renderer->impl->FreeTarget(_gpu_current_renderer, target); ··· 1082 1103 { 1083 1104 if(!CHECK_RENDERER) 1084 1105 RETURN_ERROR(GPU_ERROR_USER_ERROR, "NULL renderer"); 1106 + MAKE_CURRENT_IF_NONE(target); 1085 1107 if(!CHECK_CONTEXT) 1086 1108 RETURN_ERROR(GPU_ERROR_USER_ERROR, "NULL context"); 1087 1109 ··· 1098 1120 { 1099 1121 if(!CHECK_RENDERER) 1100 1122 RETURN_ERROR(GPU_ERROR_USER_ERROR, "NULL renderer"); 1123 + MAKE_CURRENT_IF_NONE(target); 1101 1124 if(!CHECK_CONTEXT) 1102 1125 RETURN_ERROR(GPU_ERROR_USER_ERROR, "NULL context"); 1103 1126 ··· 1113 1136 { 1114 1137 if(!CHECK_RENDERER) 1115 1138 RETURN_ERROR(GPU_ERROR_USER_ERROR, "NULL renderer"); 1139 + MAKE_CURRENT_IF_NONE(target); 1116 1140 if(!CHECK_CONTEXT) 1117 1141 RETURN_ERROR(GPU_ERROR_USER_ERROR, "NULL context"); 1118 1142 ··· 1128 1152 { 1129 1153 if(!CHECK_RENDERER) 1130 1154 RETURN_ERROR(GPU_ERROR_USER_ERROR, "NULL renderer"); 1155 + MAKE_CURRENT_IF_NONE(target); 1131 1156 if(!CHECK_CONTEXT) 1132 1157 RETURN_ERROR(GPU_ERROR_USER_ERROR, "NULL context"); 1133 1158 ··· 1143 1168 { 1144 1169 if(!CHECK_RENDERER) 1145 1170 RETURN_ERROR(GPU_ERROR_USER_ERROR, "NULL renderer"); 1171 + MAKE_CURRENT_IF_NONE(target); 1146 1172 if(!CHECK_CONTEXT) 1147 1173 RETURN_ERROR(GPU_ERROR_USER_ERROR, "NULL context"); 1148 1174 ··· 1158 1184 { 1159 1185 if(!CHECK_RENDERER) 1160 1186 RETURN_ERROR(GPU_ERROR_USER_ERROR, "NULL renderer"); 1187 + MAKE_CURRENT_IF_NONE(target); 1161 1188 if(!CHECK_CONTEXT) 1162 1189 RETURN_ERROR(GPU_ERROR_USER_ERROR, "NULL context"); 1163 1190 ··· 1176 1203 { 1177 1204 if(!CHECK_RENDERER) 1178 1205 RETURN_ERROR(GPU_ERROR_USER_ERROR, "NULL renderer"); 1206 + MAKE_CURRENT_IF_NONE(target); 1179 1207 if(!CHECK_CONTEXT) 1180 1208 RETURN_ERROR(GPU_ERROR_USER_ERROR, "NULL context"); 1181 1209 ··· 1558 1586 1559 1587 void GPU_Clear(GPU_Target* target) 1560 1588 { 1561 - if(_gpu_current_renderer == NULL || _gpu_current_renderer->current_context_target == NULL) 1562 - return; 1589 + if(!CHECK_RENDERER) 1590 + RETURN_ERROR(GPU_ERROR_USER_ERROR, "NULL renderer"); 1591 + MAKE_CURRENT_IF_NONE(target); 1592 + if(!CHECK_CONTEXT) 1593 + RETURN_ERROR(GPU_ERROR_USER_ERROR, "NULL context"); 1563 1594 1564 1595 _gpu_current_renderer->impl->ClearRGBA(_gpu_current_renderer, target, 0, 0, 0, 0); 1565 1596 } 1566 1597 1567 1598 void GPU_ClearColor(GPU_Target* target, SDL_Color color) 1568 1599 { 1569 - if(_gpu_current_renderer == NULL || _gpu_current_renderer->current_context_target == NULL) 1570 - return; 1600 + if(!CHECK_RENDERER) 1601 + RETURN_ERROR(GPU_ERROR_USER_ERROR, "NULL renderer"); 1602 + MAKE_CURRENT_IF_NONE(target); 1603 + if(!CHECK_CONTEXT) 1604 + RETURN_ERROR(GPU_ERROR_USER_ERROR, "NULL context"); 1571 1605 1572 1606 _gpu_current_renderer->impl->ClearRGBA(_gpu_current_renderer, target, color.r, color.g, color.b, GET_ALPHA(color)); 1573 1607 } 1574 1608 1575 1609 void GPU_ClearRGB(GPU_Target* target, Uint8 r, Uint8 g, Uint8 b) 1576 1610 { 1577 - if(_gpu_current_renderer == NULL || _gpu_current_renderer->current_context_target == NULL) 1578 - return; 1611 + if(!CHECK_RENDERER) 1612 + RETURN_ERROR(GPU_ERROR_USER_ERROR, "NULL renderer"); 1613 + MAKE_CURRENT_IF_NONE(target); 1614 + if(!CHECK_CONTEXT) 1615 + RETURN_ERROR(GPU_ERROR_USER_ERROR, "NULL context"); 1579 1616 1580 1617 _gpu_current_renderer->impl->ClearRGBA(_gpu_current_renderer, target, r, g, b, 255); 1581 1618 } 1582 1619 1583 1620 void GPU_ClearRGBA(GPU_Target* target, Uint8 r, Uint8 g, Uint8 b, Uint8 a) 1584 1621 { 1585 - if(_gpu_current_renderer == NULL || _gpu_current_renderer->current_context_target == NULL) 1586 - return; 1622 + if(!CHECK_RENDERER) 1623 + RETURN_ERROR(GPU_ERROR_USER_ERROR, "NULL renderer"); 1624 + MAKE_CURRENT_IF_NONE(target); 1625 + if(!CHECK_CONTEXT) 1626 + RETURN_ERROR(GPU_ERROR_USER_ERROR, "NULL context"); 1587 1627 1588 1628 _gpu_current_renderer->impl->ClearRGBA(_gpu_current_renderer, target, r, g, b, a); 1589 1629 } ··· 1598 1638 1599 1639 void GPU_Flip(GPU_Target* target) 1600 1640 { 1601 - if(_gpu_current_renderer == NULL || _gpu_current_renderer->current_context_target == NULL) 1602 - return; 1641 + if(!CHECK_RENDERER) 1642 + RETURN_ERROR(GPU_ERROR_USER_ERROR, "NULL renderer"); 1643 + MAKE_CURRENT_IF_NONE(target); 1644 + if(!CHECK_CONTEXT) 1645 + RETURN_ERROR(GPU_ERROR_USER_ERROR, "NULL context"); 1603 1646 1604 1647 _gpu_current_renderer->impl->Flip(_gpu_current_renderer, target); 1605 1648 }
+11 -7
src/renderer_GL_common.inl
··· 459 459 460 460 #ifdef SDL_GPU_USE_SDL2 461 461 SDL_GL_MakeCurrent(SDL_GetWindowFromID(target->context->windowID), target->context->context); 462 - renderer->current_context_target = target; 463 462 #endif 463 + renderer->current_context_target = target; 464 464 } 465 465 466 466 static void setClipRect(GPU_Renderer* renderer, GPU_Target* target) ··· 3349 3349 free(cdata->blit_buffer); 3350 3350 free(cdata->index_buffer); 3351 3351 3352 - #ifdef SDL_GPU_USE_SDL2 3353 - if(target->context->context != 0) 3354 - SDL_GL_DeleteContext(target->context->context); 3355 - #endif 3356 - 3357 3352 #ifdef SDL_GPU_USE_BUFFER_PIPELINE 3358 3353 glDeleteBuffers(2, cdata->blit_VBO); 3359 3354 glDeleteBuffers(16, cdata->attribute_VBO); 3360 3355 #if !defined(SDL_GPU_NO_VAO) 3361 3356 glDeleteVertexArrays(1, &cdata->blit_VAO); 3362 3357 #endif 3358 + #endif 3359 + 3360 + #ifdef SDL_GPU_USE_SDL2 3361 + if(target->context->context != 0) 3362 + SDL_GL_DeleteContext(target->context->context); 3363 3363 #endif 3364 3364 3365 3365 // Remove all of the window mappings that refer to this target ··· 4846 4846 4847 4847 static void FlushBlitBuffer(GPU_Renderer* renderer) 4848 4848 { 4849 - GPU_CONTEXT_DATA* cdata = (GPU_CONTEXT_DATA*)renderer->current_context_target->context->data; 4849 + GPU_CONTEXT_DATA* cdata; 4850 + if(renderer->current_context_target == NULL) 4851 + return; 4852 + 4853 + cdata = (GPU_CONTEXT_DATA*)renderer->current_context_target->context->data; 4850 4854 if(cdata->blit_buffer_num_vertices > 0 && cdata->last_target != NULL) 4851 4855 { 4852 4856 GPU_Target* dest = cdata->last_target;