diff --git a/client/main.c b/client/main.c index 2bc1d4e..c8b9977 100644 --- a/client/main.c +++ b/client/main.c @@ -39,7 +39,6 @@ static void tick(void){ } GSPhysicsObject obj[128]; -GSModel mdl; static void render(GSEngine self){ GSGL gl = GSClientGetGL(GSEngineGetClient(self)); @@ -47,23 +46,25 @@ static void render(GSEngine self){ GSVector4 col1 = {1, 0, 0, 1}; GSVector4 col2 = {1, 1, 1, 1}; GSVector3 v[] = { - {-40, 0, 40}, - {-40, 0, -40}, - {40, 0, -40}, - {40, 0, 40} + {-20, 0, 20}, + {-20, 0, -20}, + {20, 0, -20}, + {20, 0, 20} }; GSVector3 n = {0, 1, 0}; for(i = 0; i < sizeof(obj) / sizeof(obj[0]); i++){ GSVector3 rv; - GSRotation rot; - - rot.use_matrix = GSTrue; + GSMatrix3x3 rm; GSPhysicsGetPosition(obj[i], rv); - GSPhysicsGetRotation(obj[i], rot.u.matrix); + GSPhysicsGetRotation(obj[i], rm); - GSModelDraw(mdl, rv, &rot); + GSGLPushMatrix(gl); + GSGLSetPosition(gl, rv); + GSGLSetRotation3x3(gl, rm); + GSGLTetrakis(gl, 0.5, col1, col2); + GSGLPopMatrix(gl); } GSGLSetColor(gl, col2); @@ -103,9 +104,6 @@ int main(int argc, char** argv){ int i; GSVector3 pos = {0, 1, 0}; GSVector3 sz = {1, 1, 1}; - - mdl = GSModelOpen(engine, "game:/mdl/crate.gsm"); - for(i = 0; i < sizeof(obj) / sizeof(obj[0]); i++){ obj[i] = GSPhysicsCreateSphere(GSServerGetPhysics(GSEngineGetServer(engine)), 1, 0.5); @@ -118,7 +116,6 @@ int main(int argc, char** argv){ GSClientSetSkybox(GSEngineGetClient(engine), GSTrue); GSEngineLoop(engine); - GSModelClose(mdl); GSEngineDestroy(engine); } } diff --git a/data/mdl/fish.gsm b/data/mdl/fish.gsm index 028436e..b080492 100644 Binary files a/data/mdl/fish.gsm and b/data/mdl/fish.gsm differ diff --git a/engine/data/shader/shadow.fs b/engine/data/shader/shadow.fs index 5d1894c..33368c1 100644 --- a/engine/data/shader/shadow.fs +++ b/engine/data/shader/shadow.fs @@ -13,8 +13,6 @@ uniform sampler2D shadow_map2; uniform sampler2D current_texture; uniform float enable_lighting; uniform float enable_texture; -uniform float enable_shadow; -uniform vec3 camera; vec4 PhongShading(void) { @@ -70,11 +68,7 @@ float SampleShadow(sampler2D shadowMap, vec4 shadowCoord) { } float ShadowCoef(void){ - float dist = length(normalize(camera + gl_LightSource[0].position.xyz) - vPos.xyz); - - if(gl_LightSource[0].position.w > 0.5){ - if(dist >= 10.0) return 1.0; - } + float dist = -vPos.z; if(dist < 10.0) return SampleShadow(shadow_map0, vShadowCoord0); if(dist < 40.0) return SampleShadow(shadow_map1, vShadowCoord1); @@ -84,11 +78,7 @@ float ShadowCoef(void){ void main(void){ vec4 c = PhongShading(); vec4 ambient = gl_LightSource[0].ambient; - float shadow_coef = 1.0; - - if(enable_shadow >= 0.5){ - shadow_coef = ShadowCoef(); - } + float shadow_coef = ShadowCoef(); if(enable_texture >= 0.5){ c = c * texture2D(current_texture, gl_TexCoord[0].st); @@ -96,4 +86,4 @@ void main(void){ gl_FragColor = ambient * shadow_coef * c + (1.0 - ambient) * c; gl_FragColor.a = vColor.a; -} +} \ No newline at end of file diff --git a/engine/include/GearSrc/GL.h b/engine/include/GearSrc/GL.h index 7c9cb4c..162589a 100644 --- a/engine/include/GearSrc/GL.h +++ b/engine/include/GearSrc/GL.h @@ -45,8 +45,6 @@ GSDECL void GSGLShadowEnd(GSGL gl); GSDECL void GSGLShadowDeinit(GSGL gl); GSDECL void GSGLShadowDisable(GSGL gl); GSDECL void GSGLShadowEnable(GSGL gl); -GSDECL int GSGLShadowCascadeSteps(GSGL gl); -GSDECL void GSGLShadowRender(GSGL gl, int toggle); /* gl.c */ GSDECL GSGL GSGLCreate(GSClient client); @@ -60,7 +58,8 @@ GSDECL void GSGLPolygon2D(GSGL gl, int pairs, GSVector2* vert, GSVector2* tex) GSDECL void GSGLBegin2D(GSGL gl); GSDECL void GSGLEnd2D(GSGL gl); GSDECL void GSGLSetPosition(GSGL gl, GSVector3 pos); -GSDECL void GSGLSetRotation(GSGL gl, GSRotation* rot); +GSDECL void GSGLSetRotation(GSGL gl, GSVector3 rot); +GSDECL void GSGLSetRotation3x3(GSGL gl, GSMatrix3x3 rot); GSDECL void GSGLPushMatrix(GSGL gl); GSDECL void GSGLPopMatrix(GSGL gl); GSDECL GLuint GSGLBeginList(GSGL gl); @@ -71,12 +70,10 @@ GSDECL void GSGLClearDepth(GSGL gl); GSDECL void GSGLInitialTranslation(GSGL gl); /* gl_camera.c */ -GSDECL void GSGLCameraPerspective(GSGL gl, GSNumber width, GSNumber height); -GSDECL void GSGLCameraSet(GSGL gl); -GSDECL void GSGLCameraLookAt(GSGL gl, GSVector3 camera, GSVector3 look_at); -GSDECL void GSGLCameraSetup(GSGL gl); -GSDECL void GSGLCameraFrustum(GSGL gl); -GSDECL GSBool GSGLCameraFrustumContain(GSGL gl, GSVector3 a, GSVector3 b); +GSDECL void GSGLCameraPerspective(GSGL gl, GSNumber width, GSNumber height); +GSDECL void GSGLCameraSet(GSGL gl); +GSDECL void GSGLCameraLookAt(GSGL gl, GSVector3 camera, GSVector3 look_at); +GSDECL void GSGLCameraSetup(GSGL gl); #ifdef __cplusplus } diff --git a/engine/include/GearSrc/Model.h b/engine/include/GearSrc/Model.h index b4ea1bc..a7f3f3e 100644 --- a/engine/include/GearSrc/Model.h +++ b/engine/include/GearSrc/Model.h @@ -9,7 +9,7 @@ extern "C" { #endif GSDECL GSModel GSModelOpen(GSEngine engine, const char* path); -GSDECL void GSModelDraw(GSModel model, GSVector3 pos, GSRotation* rot); +GSDECL void GSModelDraw(GSModel model); GSDECL void GSModelClose(GSModel model); #ifdef __cplusplus diff --git a/engine/include/GearSrc/TypeDefs.h b/engine/include/GearSrc/TypeDefs.h index 090f842..ab640d4 100644 --- a/engine/include/GearSrc/TypeDefs.h +++ b/engine/include/GearSrc/TypeDefs.h @@ -51,8 +51,6 @@ typedef struct _GSNetAddress GSNetAddress; typedef struct _GSBinary GSBinary; typedef struct _GSNetState GSNetState; typedef struct _GSNetKV GSNetKV; -typedef union _GSRotationUnion GSRotationUnion; -typedef struct _GSRotation GSRotation; #ifdef _GEARSRC typedef struct _GSClient* GSClient; typedef struct _GSServer* GSServer; @@ -178,16 +176,6 @@ struct _GSNetKV { GSNetState value; }; -union _GSRotationUnion { - GSVector3 vector; - GSMatrix3x3 matrix; -}; - -struct _GSRotation { - GSBool use_matrix; - GSRotationUnion u; -}; - #ifdef _GEARSRC #include #include @@ -206,13 +194,7 @@ struct _GSGL { GLdouble shadow_old_projection[16]; GLdouble shadow_old_modelview[16]; - GLdouble frustum_projection[16]; - GLdouble frustum_modelview[16]; - GSNumber frustum_planes[6][16]; - GSNumber frustum_clip[16]; - GSBool bold; - GSBool shadow; }; struct _GSSkyBox { @@ -259,8 +241,6 @@ struct _GSModel { float* vertex; float* texcoord; GSModelFace* face; - - GSVector3 bbox[2]; }; struct _GSSound { diff --git a/engine/src/client.c b/engine/src/client.c index 8d8088f..a12a6c3 100644 --- a/engine/src/client.c +++ b/engine/src/client.c @@ -132,27 +132,21 @@ void GSClientStep(GSClient client) { GSGLTextBold(client->gl, 0); -#ifdef SHADOW if(GSGLShadowBegin(client->gl)) { int c; - for(c = 0; c < GSGLShadowCascadeSteps(client->gl); c++) { + for(c = 0; c < GSGL_SHADOW_CASCADES; c++) { GSGLShadowCascade(client->gl, c); scene(client); GSGLShadowCopy(client->gl, c); } GSGLShadowApply(client->gl); } -#else - GSGLShadowRender(client->gl, 0); -#endif if(client->skybox_enabled) { if(client->skybox != NULL) GSSkyBoxDraw(client->skybox); } scene(client); -#ifdef SHADOW GSGLShadowEnd(client->gl); -#endif GSVersionGet(&ver); diff --git a/engine/src/core.c b/engine/src/core.c index 91a8209..e9e57bd 100644 --- a/engine/src/core.c +++ b/engine/src/core.c @@ -16,7 +16,7 @@ #include #ifdef _WIN32 -static void init_winsock(void) { +static void init_winsock(void){ WSADATA wsa; WSAStartup(MAKEWORD(1, 1), &wsa); diff --git a/engine/src/gl/gl.c b/engine/src/gl/gl.c index 589c1ed..7b671cc 100644 --- a/engine/src/gl/gl.c +++ b/engine/src/gl/gl.c @@ -121,21 +121,21 @@ void GSGLSetPosition(GSGL gl, GSVector3 pos) { glTranslatef(pos[0], pos[1], -pos[2]); } -void GSGLSetRotation(GSGL gl, GSRotation* rot) { - if(rot->use_matrix) { - GSMatrix4x4 out, out2; - GLdouble mat[16]; - int i; +void GSGLSetRotation(GSGL gl, GSVector3 rot) { + glRotatef(rot[0], 1, 0, 0); + glRotatef(rot[1], 0, 1, 0); + glRotatef(rot[2], 0, 0, 1); +} - GSMath3x3To4x4(out, rot->u.matrix); - GSMathRowToColumn4x4(out2, out); - for(i = 0; i < 16; i++) mat[i] = out2[i]; - glMultMatrixd(mat); - } else { - glRotatef(rot->u.vector[0], 1, 0, 0); - glRotatef(rot->u.vector[1], 0, 1, 0); - glRotatef(rot->u.vector[2], 0, 0, 1); - } +void GSGLSetRotation3x3(GSGL gl, GSMatrix3x3 rot) { + GSMatrix4x4 out, out2; + GLdouble mat[16]; + int i; + + GSMath3x3To4x4(out, rot); + GSMathRowToColumn4x4(out2, out); + for(i = 0; i < 16; i++) mat[i] = out2[i]; + glMultMatrixd(mat); } void GSGLPushMatrix(GSGL gl) { diff --git a/engine/src/gl/gl_camera.c b/engine/src/gl/gl_camera.c index d96a48c..26a9124 100644 --- a/engine/src/gl/gl_camera.c +++ b/engine/src/gl/gl_camera.c @@ -63,12 +63,6 @@ void GSGLCameraLookAt(GSGL gl, GSVector3 camera, GSVector3 look_at) { glMultMatrixd(matrix); glTranslated(-camera[0], -camera[1], camera[2]); - - if(gl->shadow_use_shader) { - glUseProgram(gl->shadow_shader); - glUniform3f(glGetUniformLocation(gl->shadow_shader, "camera"), camera[0], camera[1], camera[2]); - glUseProgram(0); - } } void GSGLCameraSetup(GSGL gl) { @@ -79,93 +73,4 @@ void GSGLCameraSetup(GSGL gl) { glMatrixMode(GL_MODELVIEW); glLoadIdentity(); GSGLCameraSet(gl); - - GSGLCameraFrustum(gl); -} - -static void frustum_normalize(GSGL gl, int plane) { - GSVector3 v; - GSNumber l; - int i; - - v[0] = gl->frustum_planes[plane][0]; - v[1] = gl->frustum_planes[plane][1]; - v[2] = gl->frustum_planes[plane][2]; - - l = GSMathLength3(v); - - for(i = 0; i < 4; i++) { - gl->frustum_planes[plane][i] /= l; - } -} - -void GSGLCameraFrustum(GSGL gl) { - glGetDoublev(GL_PROJECTION_MATRIX, gl->frustum_projection); - glGetDoublev(GL_MODELVIEW_MATRIX, gl->frustum_modelview); - - gl->frustum_clip[0x0] = gl->frustum_modelview[0x0] * gl->frustum_projection[0x0] + gl->frustum_modelview[0x1] * gl->frustum_projection[0x4] + gl->frustum_modelview[0x2] * gl->frustum_projection[0x8] + gl->frustum_modelview[0x3] * gl->frustum_projection[0xc]; - gl->frustum_clip[0x1] = gl->frustum_modelview[0x0] * gl->frustum_projection[0x1] + gl->frustum_modelview[0x1] * gl->frustum_projection[0x5] + gl->frustum_modelview[0x2] * gl->frustum_projection[0x9] + gl->frustum_modelview[0x3] * gl->frustum_projection[0xd]; - gl->frustum_clip[0x2] = gl->frustum_modelview[0x0] * gl->frustum_projection[0x2] + gl->frustum_modelview[0x1] * gl->frustum_projection[0x6] + gl->frustum_modelview[0x2] * gl->frustum_projection[0xa] + gl->frustum_modelview[0x3] * gl->frustum_projection[0xe]; - gl->frustum_clip[0x3] = gl->frustum_modelview[0x0] * gl->frustum_projection[0x3] + gl->frustum_modelview[0x1] * gl->frustum_projection[0x7] + gl->frustum_modelview[0x2] * gl->frustum_projection[0xb] + gl->frustum_modelview[0x3] * gl->frustum_projection[0xf]; - gl->frustum_clip[0x4] = gl->frustum_modelview[0x4] * gl->frustum_projection[0x0] + gl->frustum_modelview[0x5] * gl->frustum_projection[0x4] + gl->frustum_modelview[0x6] * gl->frustum_projection[0x8] + gl->frustum_modelview[0x7] * gl->frustum_projection[0xc]; - gl->frustum_clip[0x5] = gl->frustum_modelview[0x4] * gl->frustum_projection[0x1] + gl->frustum_modelview[0x5] * gl->frustum_projection[0x5] + gl->frustum_modelview[0x6] * gl->frustum_projection[0x9] + gl->frustum_modelview[0x7] * gl->frustum_projection[0xd]; - gl->frustum_clip[0x6] = gl->frustum_modelview[0x4] * gl->frustum_projection[0x2] + gl->frustum_modelview[0x5] * gl->frustum_projection[0x6] + gl->frustum_modelview[0x6] * gl->frustum_projection[0xa] + gl->frustum_modelview[0x7] * gl->frustum_projection[0xe]; - gl->frustum_clip[0x7] = gl->frustum_modelview[0x4] * gl->frustum_projection[0x3] + gl->frustum_modelview[0x5] * gl->frustum_projection[0x7] + gl->frustum_modelview[0x6] * gl->frustum_projection[0xb] + gl->frustum_modelview[0x7] * gl->frustum_projection[0xf]; - gl->frustum_clip[0x8] = gl->frustum_modelview[0x8] * gl->frustum_projection[0x0] + gl->frustum_modelview[0x9] * gl->frustum_projection[0x4] + gl->frustum_modelview[0xa] * gl->frustum_projection[0x8] + gl->frustum_modelview[0xb] * gl->frustum_projection[0xc]; - gl->frustum_clip[0x9] = gl->frustum_modelview[0x8] * gl->frustum_projection[0x1] + gl->frustum_modelview[0x9] * gl->frustum_projection[0x5] + gl->frustum_modelview[0xa] * gl->frustum_projection[0x9] + gl->frustum_modelview[0xb] * gl->frustum_projection[0xd]; - gl->frustum_clip[0xa] = gl->frustum_modelview[0x8] * gl->frustum_projection[0x2] + gl->frustum_modelview[0x9] * gl->frustum_projection[0x6] + gl->frustum_modelview[0xa] * gl->frustum_projection[0xa] + gl->frustum_modelview[0xb] * gl->frustum_projection[0xe]; - gl->frustum_clip[0xb] = gl->frustum_modelview[0x8] * gl->frustum_projection[0x3] + gl->frustum_modelview[0x9] * gl->frustum_projection[0x7] + gl->frustum_modelview[0xa] * gl->frustum_projection[0xb] + gl->frustum_modelview[0xb] * gl->frustum_projection[0xf]; - gl->frustum_clip[0xc] = gl->frustum_modelview[0xc] * gl->frustum_projection[0x0] + gl->frustum_modelview[0xd] * gl->frustum_projection[0x4] + gl->frustum_modelview[0xe] * gl->frustum_projection[0x8] + gl->frustum_modelview[0xf] * gl->frustum_projection[0xc]; - gl->frustum_clip[0xd] = gl->frustum_modelview[0xc] * gl->frustum_projection[0x1] + gl->frustum_modelview[0xd] * gl->frustum_projection[0x5] + gl->frustum_modelview[0xe] * gl->frustum_projection[0x9] + gl->frustum_modelview[0xf] * gl->frustum_projection[0xd]; - gl->frustum_clip[0xe] = gl->frustum_modelview[0xc] * gl->frustum_projection[0x2] + gl->frustum_modelview[0xd] * gl->frustum_projection[0x6] + gl->frustum_modelview[0xe] * gl->frustum_projection[0xa] + gl->frustum_modelview[0xf] * gl->frustum_projection[0xe]; - gl->frustum_clip[0xf] = gl->frustum_modelview[0xc] * gl->frustum_projection[0x3] + gl->frustum_modelview[0xd] * gl->frustum_projection[0x7] + gl->frustum_modelview[0xe] * gl->frustum_projection[0xb] + gl->frustum_modelview[0xf] * gl->frustum_projection[0xf]; - gl->frustum_planes[0][0] = gl->frustum_clip[0x3] - gl->frustum_clip[0x0]; - gl->frustum_planes[0][1] = gl->frustum_clip[0x7] - gl->frustum_clip[0x4]; - gl->frustum_planes[0][2] = gl->frustum_clip[0xb] - gl->frustum_clip[0x8]; - gl->frustum_planes[0][3] = gl->frustum_clip[0xf] - gl->frustum_clip[0xc]; - frustum_normalize(gl, 0); - gl->frustum_planes[1][0] = gl->frustum_clip[0x3] + gl->frustum_clip[0x0]; - gl->frustum_planes[1][1] = gl->frustum_clip[0x7] + gl->frustum_clip[0x4]; - gl->frustum_planes[1][2] = gl->frustum_clip[0xb] + gl->frustum_clip[0x8]; - gl->frustum_planes[1][3] = gl->frustum_clip[0xf] + gl->frustum_clip[0xc]; - frustum_normalize(gl, 1); - gl->frustum_planes[2][0] = gl->frustum_clip[0x3] - gl->frustum_clip[0x1]; - gl->frustum_planes[2][1] = gl->frustum_clip[0x7] - gl->frustum_clip[0x5]; - gl->frustum_planes[2][2] = gl->frustum_clip[0xb] - gl->frustum_clip[0x9]; - gl->frustum_planes[2][3] = gl->frustum_clip[0xf] - gl->frustum_clip[0xd]; - frustum_normalize(gl, 2); - gl->frustum_planes[3][0] = gl->frustum_clip[0x3] + gl->frustum_clip[0x1]; - gl->frustum_planes[3][1] = gl->frustum_clip[0x7] + gl->frustum_clip[0x5]; - gl->frustum_planes[3][2] = gl->frustum_clip[0xb] + gl->frustum_clip[0x9]; - gl->frustum_planes[3][3] = gl->frustum_clip[0xf] + gl->frustum_clip[0xd]; - frustum_normalize(gl, 3); - gl->frustum_planes[4][0] = gl->frustum_clip[0x3] - gl->frustum_clip[0x2]; - gl->frustum_planes[4][1] = gl->frustum_clip[0x7] - gl->frustum_clip[0x6]; - gl->frustum_planes[4][2] = gl->frustum_clip[0xb] - gl->frustum_clip[0xa]; - gl->frustum_planes[4][3] = gl->frustum_clip[0xf] - gl->frustum_clip[0xe]; - frustum_normalize(gl, 4); - gl->frustum_planes[5][0] = gl->frustum_clip[0x3] + gl->frustum_clip[0x2]; - gl->frustum_planes[5][1] = gl->frustum_clip[0x7] + gl->frustum_clip[0x6]; - gl->frustum_planes[5][2] = gl->frustum_clip[0xb] + gl->frustum_clip[0xa]; - gl->frustum_planes[5][3] = gl->frustum_clip[0xf] + gl->frustum_clip[0xe]; - frustum_normalize(gl, 5); -} - -GSBool GSGLCameraFrustumContain(GSGL gl, GSVector3 a, GSVector3 b) { - int i; - for(i = 0; i < 6; i++) { - GSBool bv = GSTrue; - - bv = bv && gl->frustum_planes[i][0] * a[0] + gl->frustum_planes[i][1] * a[1] + gl->frustum_planes[i][2] * a[2] + gl->frustum_planes[i][3] <= 0.0; - bv = bv && gl->frustum_planes[i][0] * b[0] + gl->frustum_planes[i][1] * a[1] + gl->frustum_planes[i][2] * a[2] + gl->frustum_planes[i][3] <= 0.0; - bv = bv && gl->frustum_planes[i][0] * a[0] + gl->frustum_planes[i][1] * b[1] + gl->frustum_planes[i][2] * a[2] + gl->frustum_planes[i][3] <= 0.0; - bv = bv && gl->frustum_planes[i][0] * b[0] + gl->frustum_planes[i][1] * b[1] + gl->frustum_planes[i][2] * a[2] + gl->frustum_planes[i][3] <= 0.0; - bv = bv && gl->frustum_planes[i][0] * a[0] + gl->frustum_planes[i][1] * a[1] + gl->frustum_planes[i][2] * b[2] + gl->frustum_planes[i][3] <= 0.0; - bv = bv && gl->frustum_planes[i][0] * b[0] + gl->frustum_planes[i][1] * a[1] + gl->frustum_planes[i][2] * b[2] + gl->frustum_planes[i][3] <= 0.0; - bv = bv && gl->frustum_planes[i][0] * a[0] + gl->frustum_planes[i][1] * b[1] + gl->frustum_planes[i][2] * b[2] + gl->frustum_planes[i][3] <= 0.0; - bv = bv && gl->frustum_planes[i][0] * b[0] + gl->frustum_planes[i][1] * b[1] + gl->frustum_planes[i][2] * b[2] + gl->frustum_planes[i][3] <= 0.0; - if(bv) return GSFalse; - } - - return GSTrue; } diff --git a/engine/src/gl/gl_common.c b/engine/src/gl/gl_common.c index 4a71628..162d5b8 100644 --- a/engine/src/gl/gl_common.c +++ b/engine/src/gl/gl_common.c @@ -179,11 +179,11 @@ void GSGLTetrakis(GSGL gl, GSNumber scale, GSVector4 col1, GSVector4 col2) { {0, 1, 0}, {-0.75, 0.75, -0.75}, {0.75, 0.75, -0.75}}; - GSVector3 n; - GSRotation rot2 = {0, {0, 90, 0}}; - GSRotation rot3 = {0, {0, 0, 90}}; - GSRotation rot4 = {0, {90, 0, 0}}; - int i, j, k = 0; + GSVector3 n; + GSVector3 rot2 = {0, 90, 0}; + GSVector3 rot3 = {0, 0, 90}; + GSVector3 rot4 = {90, 0, 0}; + int i, j, k = 0; for(i = 0; i < 3; i++) { for(j = 0; j < 3; j++) v[i][j] *= scale; @@ -197,17 +197,17 @@ void GSGLTetrakis(GSGL gl, GSNumber scale, GSVector4 col1, GSVector4 col2) { GSGLSetColor(gl, ((k + j) % 2) ? col2 : col1); GSGLPolygon(gl, 3, v, NULL, n); - GSGLSetRotation(gl, &rot2); + GSGLSetRotation(gl, rot2); } if(i == 3) { - GSGLSetRotation(gl, &rot4); + GSGLSetRotation(gl, rot4); k++; } else if(i == 4) { - GSGLSetRotation(gl, &rot4); - GSGLSetRotation(gl, &rot4); + GSGLSetRotation(gl, rot4); + GSGLSetRotation(gl, rot4); } else { - GSGLSetRotation(gl, &rot3); + GSGLSetRotation(gl, rot3); k++; } } diff --git a/engine/src/gl/gl_shadow.c b/engine/src/gl/gl_shadow.c index e11076d..9e34ccd 100644 --- a/engine/src/gl/gl_shadow.c +++ b/engine/src/gl/gl_shadow.c @@ -40,7 +40,6 @@ void GSGLShadowInit(GSGL gl) { glUniform1i(glGetUniformLocation(gl->shadow_shader, "current_texture"), 0); glUniform1f(glGetUniformLocation(gl->shadow_shader, "enable_lighting"), 1); glUniform1f(glGetUniformLocation(gl->shadow_shader, "enable_texture"), 0); - glUniform1f(glGetUniformLocation(gl->shadow_shader, "enable_shadow"), 1); glUseProgram(0); gl->shadow_use_shader = 1; @@ -49,8 +48,6 @@ void GSGLShadowInit(GSGL gl) { gl->shadow_use_shader = 0; } - - gl->shadow = GSFalse; } GSBool GSGLShadowBegin(GSGL gl) { @@ -77,12 +74,6 @@ GSBool GSGLShadowBegin(GSGL gl) { return GSTrue; } -int GSGLShadowCascadeSteps(GSGL gl) { - if(gl->engine->client->light0[3]) return 1; - - return GSGL_SHADOW_CASCADES; -} - void GSGLShadowCascade(GSGL gl, int cascade) { GSVector3 zero = {0, 0, 0}; GSNumber size; @@ -95,10 +86,8 @@ void GSGLShadowCascade(GSGL gl, int cascade) { // Simple cascade sizing if(cascade == 0) size = 10; - else if(cascade == 1) - size = 40; - else - size = 100; // Covers max distance roughly + else if(cascade == 1) size = 40; + else size = 100; // Covers max distance roughly // If light is directional (light0[3] == 0) // Current existing code logic: @@ -210,8 +199,6 @@ void GSGLShadowDisable(GSGL gl) { } glActiveTexture(GL_TEXTURE0); } - - gl->shadow = GSFalse; } void GSGLShadowEnable(GSGL gl) { @@ -227,26 +214,15 @@ void GSGLShadowEnable(GSGL gl) { } glActiveTexture(GL_TEXTURE0); } - - gl->shadow = GSTrue; -} - -void GSGLShadowRender(GSGL gl, int toggle){ - if(gl->shadow_use_shader){ - if(!gl->shadow) glUseProgram(gl->shadow_shader); - glUniform1f(glGetUniformLocation(gl->shadow_shader, "enable_shadow"), toggle); - if(!gl->shadow) glUseProgram(0); - } } void GSGLShadowEnd(GSGL gl) { - int i; if(!gl->shadow_use_shader) return; GSGLShadowDisable(gl); // Reset texture matrices - for(i = 0; i < GSGL_SHADOW_CASCADES; i++) { + for(int i = 0; i < GSGL_SHADOW_CASCADES; i++) { glActiveTexture(GL_TEXTURE5 + i); glMatrixMode(GL_TEXTURE); glLoadIdentity(); @@ -260,4 +236,4 @@ void GSGLShadowDeinit(GSGL gl) { glDeleteTextures(GSGL_SHADOW_CASCADES, gl->shadow_texture); glDeleteProgram(gl->shadow_shader); } -} +} \ No newline at end of file diff --git a/engine/src/model.c b/engine/src/model.c index ed7f2d6..127429a 100644 --- a/engine/src/model.c +++ b/engine/src/model.c @@ -10,17 +10,13 @@ #include static void parse_obj(GSModel model, char* txt) { - char* f = txt; - float lm = 0; /* leftmost */ - float rm = 0; /* rightmost */ - float um = 0; /* upmost */ - float dm = 0; /* downmost */ - float fm = 0; /* frontmost */ - float bm = 0; /* backmost */ - float l = 0; - float blr = fabs(lm - rm); - float bud = fabs(um - dm); - float bbf = fabs(fm - bm); + char* f = txt; + float lm = 0; /* leftmost */ + float rm = 0; /* rightmost */ + float um = 0; /* upmost */ + float dm = 0; /* downmost */ + float fm = 0; /* frontmost */ + float bm = 0; /* backmost */ while(1) { char* s = strchr(f, '\n'); @@ -162,22 +158,6 @@ static void parse_obj(GSModel model, char* txt) { if(s == NULL) break; f = s + 1; } - - blr = fabs(lm - rm); - bud = fabs(um - dm); - bbf = fabs(fm - bm); - - if(l < blr) l = blr; - if(l < bud) l = bud; - if(l < bbf) l = bbf; - - model->bbox[0][0] = -l * 2; - model->bbox[0][1] = -l * 2; - model->bbox[0][2] = -l * 2; - - model->bbox[1][0] = -model->bbox[0][0]; - model->bbox[1][1] = -model->bbox[0][1]; - model->bbox[1][2] = -model->bbox[0][2]; } static void parse_mtl(GSModel model, char* txt) { @@ -294,16 +274,8 @@ GSModel GSModelOpen(GSEngine engine, const char* path) { /* TODO: check for animation */ if(gl != NULL) { - GLuint list = GSGLBeginList(gl); - GSVector3 pos = {0, 0, 0}; - GSRotation rot; - - rot.use_matrix = GSFalse; - rot.u.vector[0] = 0; - rot.u.vector[1] = 0; - rot.u.vector[2] = 0; - - GSModelDraw(model, pos, &rot); + GLuint list = GSGLBeginList(gl); + GSModelDraw(model); GSGLEndList(gl); model->call_list = list; @@ -312,13 +284,10 @@ GSModel GSModelOpen(GSEngine engine, const char* path) { return model; } -void GSModelDraw(GSModel model, GSVector3 pos, GSRotation* rot) { +void GSModelDraw(GSModel model) { GSGL gl = model->engine->client->gl; int i; - GSGLPushMatrix(gl); - GSGLSetPosition(gl, pos); - GSGLSetRotation(gl, rot); if(model->call_list == 0) { char* k = "default"; @@ -336,18 +305,8 @@ void GSModelDraw(GSModel model, GSVector3 pos, GSRotation* rot) { GSGLTextureSet(gl, 0); } else { - GSVector3 a, b; - - for(i = 0; i < 3; i++) { - a[i] = b[i] = pos[i]; - - a[i] += model->bbox[0][i]; - b[i] += model->bbox[1][i]; - } - - if(GSGLCameraFrustumContain(gl, a, b)) GSGLCallList(gl, model->call_list); + GSGLCallList(gl, model->call_list); } - GSGLPopMatrix(gl); } void GSModelClose(GSModel model) {