mirror of
https://github.com/ClassiCube/ClassiCube.git
synced 2025-01-22 17:12:25 -05:00
Try to fix rare download issues
This commit is contained in:
parent
ffa128c854
commit
b55dadf50e
4 changed files with 43 additions and 34 deletions
|
@ -132,7 +132,8 @@ enum CC_ERRORS {
|
|||
HTTP_ERR_RELATIVE = 0xCCDED069UL, /* Unsupported relative URL format */
|
||||
HTTP_ERR_INVALID_BODY= 0xCCDED06AUL, /* HTTP message doesn't have Content-Length or use Chunked transfer encoding */
|
||||
HTTP_ERR_CHUNK_SIZE = 0xCCDED06BUL, /* HTTP message chunk has negative size/length */
|
||||
HTTP_ERR_TRUNCATED = 0xCCDED06CUL, /* HTTP respone header was truncated due to being too long */
|
||||
HTTP_ERR_TRUNCATED = 0xCCDED06CUL, /* HTTP response header was truncated due to being too long */
|
||||
HTTP_ERR_NO_RESPONSE = 0xCCDED06DUL, /* First attempt to read response returned 0 bytes */
|
||||
|
||||
SSL_ERR_CONTEXT_DEAD = 0xCCDED070UL, /* Server shutdown the SSL context and it must be recreated */
|
||||
PNG_ERR_16BITSAMPLES = 0xCCDED071UL, /* Image uses 16 bit samples, which is unimplemented */
|
||||
|
|
|
@ -558,6 +558,7 @@ static cc_result ConnectionPool_Open(struct HttpConnection** conn, const struct
|
|||
*--------------------------------------------------------HttpClient-------------------------------------------------------*
|
||||
*#########################################################################################################################*/
|
||||
enum HTTP_RESPONSE_STATE {
|
||||
HTTP_RESPONSE_STATE_INITIAL,
|
||||
HTTP_RESPONSE_STATE_HEADER,
|
||||
HTTP_RESPONSE_STATE_DATA,
|
||||
HTTP_RESPONSE_STATE_CHUNK_HEADER,
|
||||
|
@ -583,7 +584,7 @@ struct HttpClientState {
|
|||
};
|
||||
|
||||
static void HttpClientState_Reset(struct HttpClientState* state) {
|
||||
state->state = HTTP_RESPONSE_STATE_HEADER;
|
||||
state->state = HTTP_RESPONSE_STATE_INITIAL;
|
||||
state->chunked = 0;
|
||||
state->dataLeft = 0;
|
||||
state->autoClose = false;
|
||||
|
@ -705,6 +706,9 @@ static cc_result HttpClient_Process(struct HttpClientState* state, char* buffer,
|
|||
|
||||
while (offset < total) {
|
||||
switch (state->state) {
|
||||
case HTTP_RESPONSE_STATE_INITIAL:
|
||||
state->state = HTTP_RESPONSE_STATE_HEADER;
|
||||
break;
|
||||
|
||||
case HTTP_RESPONSE_STATE_HEADER:
|
||||
{
|
||||
|
@ -836,8 +840,8 @@ static cc_result HttpClient_ParseResponse(struct HttpClientState* state) {
|
|||
if (res) return res;
|
||||
|
||||
if (total == 0) {
|
||||
Platform_LogConst("Http read unexpectedly returned 0");
|
||||
return ERR_END_OF_STREAM;
|
||||
Platform_Log1("Http read unexpectedly returned 0 in state %i", &state->state);
|
||||
return state->state == HTTP_RESPONSE_STATE_INITIAL ? HTTP_ERR_NO_RESPONSE : ERR_END_OF_STREAM;
|
||||
}
|
||||
|
||||
if (dst != buffer) {
|
||||
|
@ -915,6 +919,11 @@ static cc_result HttpBackend_Do(struct HttpRequest* req, cc_string* urlStr) {
|
|||
res = HttpBackend_PerformRequest(&state);
|
||||
retried = true;
|
||||
}
|
||||
if (res == HTTP_ERR_NO_RESPONSE && !retried) {
|
||||
Platform_LogConst("Resetting connection due to empty response..");
|
||||
res = HttpBackend_PerformRequest(&state);
|
||||
retried = true;
|
||||
}
|
||||
|
||||
if (res || !HttpClient_IsRedirect(req)) break;
|
||||
if (redirects >= 20) return HTTP_ERR_REDIRECTS;
|
||||
|
|
|
@ -210,36 +210,35 @@ cc_bool FrustumCulling_SphereInFrustum(float x, float y, float z, float radius)
|
|||
}
|
||||
|
||||
void FrustumCulling_CalcFrustumEquations(struct Matrix* projection, struct Matrix* modelView) {
|
||||
struct Matrix clipMatrix;
|
||||
float* clip = (float*)&clipMatrix;
|
||||
Matrix_Mul(&clipMatrix, modelView, projection);
|
||||
struct Matrix clip;
|
||||
Matrix_Mul(&clip, modelView, projection);
|
||||
|
||||
/* Extract the numbers for the RIGHT plane */
|
||||
frustum00 = clip[3] - clip[0];
|
||||
frustum01 = clip[7] - clip[4];
|
||||
frustum02 = clip[11] - clip[8];
|
||||
frustum03 = clip[15] - clip[12];
|
||||
/* Extract the RIGHT plane */
|
||||
frustum00 = clip.row1.w - clip.row1.x;
|
||||
frustum01 = clip.row2.w - clip.row2.x;
|
||||
frustum02 = clip.row3.w - clip.row3.x;
|
||||
frustum03 = clip.row4.w - clip.row4.x;
|
||||
FrustumCulling_Normalise(&frustum00, &frustum01, &frustum02, &frustum03);
|
||||
|
||||
/* Extract the numbers for the LEFT plane */
|
||||
frustum10 = clip[3] + clip[0];
|
||||
frustum11 = clip[7] + clip[4];
|
||||
frustum12 = clip[11] + clip[8];
|
||||
frustum13 = clip[15] + clip[12];
|
||||
/* Extract the LEFT plane */
|
||||
frustum10 = clip.row1.w + clip.row1.x;
|
||||
frustum11 = clip.row2.w + clip.row2.x;
|
||||
frustum12 = clip.row3.w + clip.row3.x;
|
||||
frustum13 = clip.row4.w + clip.row4.x;
|
||||
FrustumCulling_Normalise(&frustum10, &frustum11, &frustum12, &frustum13);
|
||||
|
||||
/* Extract the BOTTOM plane */
|
||||
frustum20 = clip[3] + clip[1];
|
||||
frustum21 = clip[7] + clip[5];
|
||||
frustum22 = clip[11] + clip[9];
|
||||
frustum23 = clip[15] + clip[13];
|
||||
frustum20 = clip.row1.w + clip.row1.y;
|
||||
frustum21 = clip.row2.w + clip.row2.y;
|
||||
frustum22 = clip.row3.w + clip.row3.y;
|
||||
frustum23 = clip.row4.w + clip.row4.y;
|
||||
FrustumCulling_Normalise(&frustum20, &frustum21, &frustum22, &frustum23);
|
||||
|
||||
/* Extract the TOP plane */
|
||||
frustum30 = clip[3] - clip[1];
|
||||
frustum31 = clip[7] - clip[5];
|
||||
frustum32 = clip[11] - clip[9];
|
||||
frustum33 = clip[15] - clip[13];
|
||||
frustum30 = clip.row1.w - clip.row1.y;
|
||||
frustum31 = clip.row2.w - clip.row2.y;
|
||||
frustum32 = clip.row3.w - clip.row3.y;
|
||||
frustum33 = clip.row4.w - clip.row4.y;
|
||||
FrustumCulling_Normalise(&frustum30, &frustum31, &frustum32, &frustum33);
|
||||
|
||||
/* Extract the FAR plane (Different for each graphics backend) */
|
||||
|
@ -247,15 +246,15 @@ void FrustumCulling_CalcFrustumEquations(struct Matrix* projection, struct Matri
|
|||
/* OpenGL and Direct3D require slightly different behaviour for NEAR clipping planes */
|
||||
/* https://www.gamedevs.org/uploads/fast-extraction-viewing-frustum-planes-from-world-view-projection-matrix.pdf */
|
||||
/* (and because reverse Z is used, 'NEAR' plane is actually the 'FAR' clipping plane) */
|
||||
frustum40 = clip[2];
|
||||
frustum41 = clip[6];
|
||||
frustum42 = clip[10];
|
||||
frustum43 = clip[14];
|
||||
frustum40 = clip.row1.z;
|
||||
frustum41 = clip.row2.z;
|
||||
frustum42 = clip.row3.z;
|
||||
frustum43 = clip.row4.z;
|
||||
#else
|
||||
frustum40 = clip[3] - clip[2];
|
||||
frustum41 = clip[7] - clip[6];
|
||||
frustum42 = clip[11] - clip[10];
|
||||
frustum43 = clip[15] - clip[14];
|
||||
frustum40 = clip.row1.w - clip.row1.z;
|
||||
frustum41 = clip.row2.w - clip.row2.z;
|
||||
frustum42 = clip.row3.w - clip.row3.z;
|
||||
frustum43 = clip.row4.w - clip.row4.z;
|
||||
#endif
|
||||
FrustumCulling_Normalise(&frustum40, &frustum41, &frustum42, &frustum43);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue