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_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_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_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 */
|
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 */
|
PNG_ERR_16BITSAMPLES = 0xCCDED071UL, /* Image uses 16 bit samples, which is unimplemented */
|
||||||
|
|
|
@ -806,7 +806,7 @@ void Gfx_CalcOrthoMatrix(struct Matrix* matrix, float width, float height, float
|
||||||
matrix->row1.y = -2.0f / width;
|
matrix->row1.y = -2.0f / width;
|
||||||
matrix->row4.y = 1.0f;
|
matrix->row4.y = 1.0f;
|
||||||
|
|
||||||
matrix->row3.z = 1.0f / (zNear - zFar);
|
matrix->row3.z = 1.0f / (zNear - zFar);
|
||||||
matrix->row4.z = 0.5f * (zNear + zFar) / (zNear - zFar) - 0.5f;
|
matrix->row4.z = 0.5f * (zNear + zFar) / (zNear - zFar) - 0.5f;
|
||||||
matrix->row4.w = 1.0f;
|
matrix->row4.w = 1.0f;
|
||||||
}
|
}
|
||||||
|
|
|
@ -558,6 +558,7 @@ static cc_result ConnectionPool_Open(struct HttpConnection** conn, const struct
|
||||||
*--------------------------------------------------------HttpClient-------------------------------------------------------*
|
*--------------------------------------------------------HttpClient-------------------------------------------------------*
|
||||||
*#########################################################################################################################*/
|
*#########################################################################################################################*/
|
||||||
enum HTTP_RESPONSE_STATE {
|
enum HTTP_RESPONSE_STATE {
|
||||||
|
HTTP_RESPONSE_STATE_INITIAL,
|
||||||
HTTP_RESPONSE_STATE_HEADER,
|
HTTP_RESPONSE_STATE_HEADER,
|
||||||
HTTP_RESPONSE_STATE_DATA,
|
HTTP_RESPONSE_STATE_DATA,
|
||||||
HTTP_RESPONSE_STATE_CHUNK_HEADER,
|
HTTP_RESPONSE_STATE_CHUNK_HEADER,
|
||||||
|
@ -583,7 +584,7 @@ struct HttpClientState {
|
||||||
};
|
};
|
||||||
|
|
||||||
static void HttpClientState_Reset(struct HttpClientState* state) {
|
static void HttpClientState_Reset(struct HttpClientState* state) {
|
||||||
state->state = HTTP_RESPONSE_STATE_HEADER;
|
state->state = HTTP_RESPONSE_STATE_INITIAL;
|
||||||
state->chunked = 0;
|
state->chunked = 0;
|
||||||
state->dataLeft = 0;
|
state->dataLeft = 0;
|
||||||
state->autoClose = false;
|
state->autoClose = false;
|
||||||
|
@ -705,6 +706,9 @@ static cc_result HttpClient_Process(struct HttpClientState* state, char* buffer,
|
||||||
|
|
||||||
while (offset < total) {
|
while (offset < total) {
|
||||||
switch (state->state) {
|
switch (state->state) {
|
||||||
|
case HTTP_RESPONSE_STATE_INITIAL:
|
||||||
|
state->state = HTTP_RESPONSE_STATE_HEADER;
|
||||||
|
break;
|
||||||
|
|
||||||
case HTTP_RESPONSE_STATE_HEADER:
|
case HTTP_RESPONSE_STATE_HEADER:
|
||||||
{
|
{
|
||||||
|
@ -836,8 +840,8 @@ static cc_result HttpClient_ParseResponse(struct HttpClientState* state) {
|
||||||
if (res) return res;
|
if (res) return res;
|
||||||
|
|
||||||
if (total == 0) {
|
if (total == 0) {
|
||||||
Platform_LogConst("Http read unexpectedly returned 0");
|
Platform_Log1("Http read unexpectedly returned 0 in state %i", &state->state);
|
||||||
return ERR_END_OF_STREAM;
|
return state->state == HTTP_RESPONSE_STATE_INITIAL ? HTTP_ERR_NO_RESPONSE : ERR_END_OF_STREAM;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dst != buffer) {
|
if (dst != buffer) {
|
||||||
|
@ -915,6 +919,11 @@ static cc_result HttpBackend_Do(struct HttpRequest* req, cc_string* urlStr) {
|
||||||
res = HttpBackend_PerformRequest(&state);
|
res = HttpBackend_PerformRequest(&state);
|
||||||
retried = true;
|
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 (res || !HttpClient_IsRedirect(req)) break;
|
||||||
if (redirects >= 20) return HTTP_ERR_REDIRECTS;
|
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) {
|
void FrustumCulling_CalcFrustumEquations(struct Matrix* projection, struct Matrix* modelView) {
|
||||||
struct Matrix clipMatrix;
|
struct Matrix clip;
|
||||||
float* clip = (float*)&clipMatrix;
|
Matrix_Mul(&clip, modelView, projection);
|
||||||
Matrix_Mul(&clipMatrix, modelView, projection);
|
|
||||||
|
|
||||||
/* Extract the numbers for the RIGHT plane */
|
/* Extract the RIGHT plane */
|
||||||
frustum00 = clip[3] - clip[0];
|
frustum00 = clip.row1.w - clip.row1.x;
|
||||||
frustum01 = clip[7] - clip[4];
|
frustum01 = clip.row2.w - clip.row2.x;
|
||||||
frustum02 = clip[11] - clip[8];
|
frustum02 = clip.row3.w - clip.row3.x;
|
||||||
frustum03 = clip[15] - clip[12];
|
frustum03 = clip.row4.w - clip.row4.x;
|
||||||
FrustumCulling_Normalise(&frustum00, &frustum01, &frustum02, &frustum03);
|
FrustumCulling_Normalise(&frustum00, &frustum01, &frustum02, &frustum03);
|
||||||
|
|
||||||
/* Extract the numbers for the LEFT plane */
|
/* Extract the LEFT plane */
|
||||||
frustum10 = clip[3] + clip[0];
|
frustum10 = clip.row1.w + clip.row1.x;
|
||||||
frustum11 = clip[7] + clip[4];
|
frustum11 = clip.row2.w + clip.row2.x;
|
||||||
frustum12 = clip[11] + clip[8];
|
frustum12 = clip.row3.w + clip.row3.x;
|
||||||
frustum13 = clip[15] + clip[12];
|
frustum13 = clip.row4.w + clip.row4.x;
|
||||||
FrustumCulling_Normalise(&frustum10, &frustum11, &frustum12, &frustum13);
|
FrustumCulling_Normalise(&frustum10, &frustum11, &frustum12, &frustum13);
|
||||||
|
|
||||||
/* Extract the BOTTOM plane */
|
/* Extract the BOTTOM plane */
|
||||||
frustum20 = clip[3] + clip[1];
|
frustum20 = clip.row1.w + clip.row1.y;
|
||||||
frustum21 = clip[7] + clip[5];
|
frustum21 = clip.row2.w + clip.row2.y;
|
||||||
frustum22 = clip[11] + clip[9];
|
frustum22 = clip.row3.w + clip.row3.y;
|
||||||
frustum23 = clip[15] + clip[13];
|
frustum23 = clip.row4.w + clip.row4.y;
|
||||||
FrustumCulling_Normalise(&frustum20, &frustum21, &frustum22, &frustum23);
|
FrustumCulling_Normalise(&frustum20, &frustum21, &frustum22, &frustum23);
|
||||||
|
|
||||||
/* Extract the TOP plane */
|
/* Extract the TOP plane */
|
||||||
frustum30 = clip[3] - clip[1];
|
frustum30 = clip.row1.w - clip.row1.y;
|
||||||
frustum31 = clip[7] - clip[5];
|
frustum31 = clip.row2.w - clip.row2.y;
|
||||||
frustum32 = clip[11] - clip[9];
|
frustum32 = clip.row3.w - clip.row3.y;
|
||||||
frustum33 = clip[15] - clip[13];
|
frustum33 = clip.row4.w - clip.row4.y;
|
||||||
FrustumCulling_Normalise(&frustum30, &frustum31, &frustum32, &frustum33);
|
FrustumCulling_Normalise(&frustum30, &frustum31, &frustum32, &frustum33);
|
||||||
|
|
||||||
/* Extract the FAR plane (Different for each graphics backend) */
|
/* 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 */
|
/* 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 */
|
/* 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) */
|
/* (and because reverse Z is used, 'NEAR' plane is actually the 'FAR' clipping plane) */
|
||||||
frustum40 = clip[2];
|
frustum40 = clip.row1.z;
|
||||||
frustum41 = clip[6];
|
frustum41 = clip.row2.z;
|
||||||
frustum42 = clip[10];
|
frustum42 = clip.row3.z;
|
||||||
frustum43 = clip[14];
|
frustum43 = clip.row4.z;
|
||||||
#else
|
#else
|
||||||
frustum40 = clip[3] - clip[2];
|
frustum40 = clip.row1.w - clip.row1.z;
|
||||||
frustum41 = clip[7] - clip[6];
|
frustum41 = clip.row2.w - clip.row2.z;
|
||||||
frustum42 = clip[11] - clip[10];
|
frustum42 = clip.row3.w - clip.row3.z;
|
||||||
frustum43 = clip[15] - clip[14];
|
frustum43 = clip.row4.w - clip.row4.z;
|
||||||
#endif
|
#endif
|
||||||
FrustumCulling_Normalise(&frustum40, &frustum41, &frustum42, &frustum43);
|
FrustumCulling_Normalise(&frustum40, &frustum41, &frustum42, &frustum43);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue