diff --git a/android/app/src/main/assets/pakQ3Q.pk3 b/android/app/src/main/assets/pakQ3Q.pk3 index f14231a0..88634558 100644 Binary files a/android/app/src/main/assets/pakQ3Q.pk3 and b/android/app/src/main/assets/pakQ3Q.pk3 differ diff --git a/android/app/src/main/cpp/code/renderergl2/glsl/lightall_vp.glsl b/android/app/src/main/cpp/code/renderergl2/glsl/lightall_vp.glsl index b1f4d279..4fe7f27d 100644 --- a/android/app/src/main/cpp/code/renderergl2/glsl/lightall_vp.glsl +++ b/android/app/src/main/cpp/code/renderergl2/glsl/lightall_vp.glsl @@ -56,6 +56,11 @@ uniform highp mat4 u_ModelMatrix; uniform vec4 u_BaseColor; uniform vec4 u_VertColor; +#if defined(USE_MODELTRANSFORMMATRIX) +uniform mat4 u_ModelTransformMatrix; +#endif + + #if defined(USE_VERTEX_ANIMATION) uniform float u_VertexLerp; #elif defined(USE_BONE_ANIMATION) @@ -197,11 +202,11 @@ void main() gl_Position = u_ProjectionMatrix * (u_ViewMatrices[gl_ViewID_OVR] * (u_ModelMatrix * vec4(position, 1.0))); -#if defined(USE_MODELMATRIX) - position = (u_ModelMatrix * vec4(position, 1.0)).xyz; - normal = (u_ModelMatrix * vec4(normal, 0.0)).xyz; +#if defined(USE_MODELTRANSFORMMATRIX) + position = (u_ModelTransformMatrix * vec4(position, 1.0)).xyz; + normal = (u_ModelTransformMatrix * vec4(normal, 0.0)).xyz; #if defined(USE_LIGHT) && !defined(USE_FAST_LIGHT) - tangent = (u_ModelMatrix * vec4(tangent, 0.0)).xyz; + tangent = (u_ModelTransformMatrix * vec4(tangent, 0.0)).xyz; #endif #endif @@ -213,8 +218,8 @@ void main() vec3 L = u_LightOrigin.xyz - (position * u_LightOrigin.w); #elif defined(USE_LIGHT) && !defined(USE_FAST_LIGHT) vec3 L = attr_LightDirection; -#if defined(USE_MODELMATRIX) - L = (u_ModelMatrix * vec4(L, 0.0)).xyz; +#if defined(USE_MODELTRANSFORMMATRIX) + L = (u_ModelTransformMatrix * vec4(L, 0.0)).xyz; #endif #endif diff --git a/android/app/src/main/cpp/code/renderergl2/tr_backend.c b/android/app/src/main/cpp/code/renderergl2/tr_backend.c index c04fd2cd..33688bdb 100644 --- a/android/app/src/main/cpp/code/renderergl2/tr_backend.c +++ b/android/app/src/main/cpp/code/renderergl2/tr_backend.c @@ -736,7 +736,8 @@ void RE_StretchRaw (int x, int y, int w, int h, int cols, int rows, const byte * VectorSet2(texCoords[3], 0.5f / cols, (rows - 0.5f) / rows); GLSL_BindProgram(&tr.textureColorShader); - + + GLSL_SetUniformMat4(&tr.textureColorShader, UNIFORM_MODELTRANSFORMMATRIX, backEnd.or.transformMatrix); GLSL_SetUniformMat4(&tr.textureColorShader, UNIFORM_MODELMATRIX, glState.modelview); GLSL_BindBuffers(&tr.textureColorShader); GLSL_SetUniformVec4(&tr.textureColorShader, UNIFORM_COLOR, colorWhite); diff --git a/android/app/src/main/cpp/code/renderergl2/tr_fbo.c b/android/app/src/main/cpp/code/renderergl2/tr_fbo.c index c047d32d..73094e16 100644 --- a/android/app/src/main/cpp/code/renderergl2/tr_fbo.c +++ b/android/app/src/main/cpp/code/renderergl2/tr_fbo.c @@ -577,6 +577,7 @@ void FBO_BlitFromTexture(struct image_s *src, vec4_t inSrcTexCorners, vec2_t inS GLSL_BindProgram(shaderProgram); + GLSL_SetUniformMat4(shaderProgram, UNIFORM_MODELTRANSFORMMATRIX, backEnd.or.transformMatrix); GLSL_SetUniformMat4(shaderProgram, UNIFORM_MODELMATRIX, glState.modelview); GLSL_BindBuffers(shaderProgram); GLSL_SetUniformVec4(shaderProgram, UNIFORM_COLOR, color); diff --git a/android/app/src/main/cpp/code/renderergl2/tr_glsl.c b/android/app/src/main/cpp/code/renderergl2/tr_glsl.c index 8d9ab7e9..94c864da 100644 --- a/android/app/src/main/cpp/code/renderergl2/tr_glsl.c +++ b/android/app/src/main/cpp/code/renderergl2/tr_glsl.c @@ -130,6 +130,7 @@ static uniformInfo_t uniformsInfo[] = { "u_FogColorMask", GLSL_VEC4 }, { "u_ModelMatrix", GLSL_MAT16 }, + { "u_ModelTransformMatrix", GLSL_MAT16 }, { "u_Time", GLSL_FLOAT }, { "u_VertexLerp" , GLSL_FLOAT }, @@ -1313,7 +1314,7 @@ void GLSL_InitGPUShaders(void) if (i & LIGHTDEF_ENTITY_VERTEX_ANIMATION) { - Q_strcat(extradefines, 1024, "#define USE_VERTEX_ANIMATION\n#define USE_MODELMATRIX\n"); + Q_strcat(extradefines, 1024, "#define USE_VERTEX_ANIMATION\n#define USE_MODELTRANSFORMMATRIX\n"); attribs |= ATTR_POSITION2 | ATTR_NORMAL2; if (r_normalMapping->integer) @@ -1323,7 +1324,7 @@ void GLSL_InitGPUShaders(void) } else if (i & LIGHTDEF_ENTITY_BONE_ANIMATION) { - Q_strcat(extradefines, 1024, "#define USE_MODELMATRIX\n"); + Q_strcat(extradefines, 1024, "#define USE_MODELTRANSFORMMATRIX\n"); Q_strcat(extradefines, 1024, va("#define USE_BONE_ANIMATION\n#define MAX_GLSL_BONES %d\n", glRefConfig.glslMaxAnimatedBones)); attribs |= ATTR_BONE_INDEXES | ATTR_BONE_WEIGHTS; } diff --git a/android/app/src/main/cpp/code/renderergl2/tr_local.h b/android/app/src/main/cpp/code/renderergl2/tr_local.h index de6c1e3f..c32c47e8 100644 --- a/android/app/src/main/cpp/code/renderergl2/tr_local.h +++ b/android/app/src/main/cpp/code/renderergl2/tr_local.h @@ -107,6 +107,7 @@ typedef struct { vec3_t origin; // in world coordinates vec3_t axis[3]; // orientation in world vec3_t viewOrigin; // viewParms->or.origin in local coordinates + float transformMatrix[16]; union { float eyeViewMatrix[3][16]; float viewMatrix[48]; @@ -673,6 +674,7 @@ typedef enum UNIFORM_FOGCOLORMASK, UNIFORM_MODELMATRIX, + UNIFORM_MODELTRANSFORMMATRIX, UNIFORM_TIME, UNIFORM_VERTEXLERP, diff --git a/android/app/src/main/cpp/code/renderergl2/tr_main.c b/android/app/src/main/cpp/code/renderergl2/tr_main.c index a3d2a342..81f170e8 100644 --- a/android/app/src/main/cpp/code/renderergl2/tr_main.c +++ b/android/app/src/main/cpp/code/renderergl2/tr_main.c @@ -536,6 +536,7 @@ void R_RotateForEntity( const trRefEntity_t *ent, const viewParms_t *viewParms, glMatrix[11] = 0; glMatrix[15] = 1; + Mat4Copy(glMatrix, or->transformMatrix); for (int eye = 0; eye <= 2; ++eye) { myGlMultMatrix( glMatrix, viewParms->world.eyeViewMatrix[eye], or->eyeViewMatrix[eye] ); } diff --git a/android/app/src/main/cpp/code/renderergl2/tr_shade.c b/android/app/src/main/cpp/code/renderergl2/tr_shade.c index d417e8df..7a76244e 100644 --- a/android/app/src/main/cpp/code/renderergl2/tr_shade.c +++ b/android/app/src/main/cpp/code/renderergl2/tr_shade.c @@ -114,6 +114,7 @@ static void DrawTris (shaderCommands_t *input) { GLSL_BindProgram(sp); + GLSL_SetUniformMat4(sp, UNIFORM_MODELTRANSFORMMATRIX, backEnd.or.transformMatrix); GLSL_SetUniformMat4(sp, UNIFORM_MODELMATRIX, glState.modelview); GLSL_BindBuffers(sp); VectorSet4(color, 1, 1, 1, 1); @@ -353,6 +354,7 @@ static void ProjectDlightTexture( void ) { GLSL_BindProgram(sp); + GLSL_SetUniformMat4(sp, UNIFORM_MODELTRANSFORMMATRIX, backEnd.or.transformMatrix); GLSL_SetUniformMat4(sp, UNIFORM_MODELMATRIX, glState.modelview); GLSL_BindBuffers(sp); @@ -693,6 +695,7 @@ static void ForwardDlight( void ) { GLSL_BindProgram(sp); + GLSL_SetUniformMat4(sp, UNIFORM_MODELTRANSFORMMATRIX, backEnd.or.transformMatrix); GLSL_SetUniformMat4(sp, UNIFORM_MODELMATRIX, glState.modelview); GLSL_BindBuffers(sp); GLSL_SetUniformVec3(sp, UNIFORM_VIEWORIGIN, backEnd.viewParms.or.origin); @@ -756,6 +759,7 @@ static void ForwardDlight( void ) { GL_State( GLS_SRCBLEND_ONE | GLS_DSTBLEND_ONE | GLS_DEPTHFUNC_EQUAL ); GLSL_SetUniformInt(sp, UNIFORM_ALPHATEST, 0); + GLSL_SetUniformMat4(sp, UNIFORM_MODELTRANSFORMMATRIX, backEnd.or.transformMatrix); GLSL_SetUniformMat4(sp, UNIFORM_MODELMATRIX, glState.modelview); GLSL_BindBuffers(sp); @@ -848,6 +852,7 @@ static void ProjectPshadowVBOGLSL( void ) { GLSL_BindProgram(sp); + GLSL_SetUniformMat4(sp, UNIFORM_MODELTRANSFORMMATRIX, backEnd.or.transformMatrix); GLSL_SetUniformMat4(sp, UNIFORM_MODELMATRIX, glState.modelview); GLSL_BindBuffers(sp); @@ -925,6 +930,7 @@ static void RB_FogPass( void ) { fog = tr.world->fogs + tess.fogNum; + GLSL_SetUniformMat4(sp, UNIFORM_MODELTRANSFORMMATRIX, backEnd.or.transformMatrix); GLSL_SetUniformMat4(sp, UNIFORM_MODELMATRIX, glState.modelview); GLSL_BindBuffers(sp); @@ -1100,6 +1106,7 @@ static void RB_IterateStagesGeneric( shaderCommands_t *input ) GLSL_BindProgram(sp); + GLSL_SetUniformMat4(sp, UNIFORM_MODELTRANSFORMMATRIX, backEnd.or.transformMatrix); GLSL_SetUniformMat4(sp, UNIFORM_MODELMATRIX, glState.modelview); GLSL_BindBuffers(sp); GLSL_SetUniformVec3(sp, UNIFORM_VIEWORIGIN, backEnd.viewParms.or.origin); @@ -1217,6 +1224,7 @@ static void RB_IterateStagesGeneric( shaderCommands_t *input ) } } + GLSL_SetUniformMat4(sp, UNIFORM_MODELTRANSFORMMATRIX, backEnd.or.transformMatrix); GLSL_SetUniformMat4(sp, UNIFORM_MODELMATRIX, glState.modelview); GLSL_BindBuffers(sp); @@ -1421,6 +1429,7 @@ static void RB_RenderShadowmap( shaderCommands_t *input ) GLSL_BindProgram(sp); + GLSL_SetUniformMat4(sp, UNIFORM_MODELTRANSFORMMATRIX, backEnd.or.transformMatrix); GLSL_SetUniformMat4(sp, UNIFORM_MODELMATRIX, glState.modelview); GLSL_BindBuffers(sp); diff --git a/android/app/src/main/cpp/code/renderergl2/tr_sky.c b/android/app/src/main/cpp/code/renderergl2/tr_sky.c index b86bfc32..0221c4d7 100644 --- a/android/app/src/main/cpp/code/renderergl2/tr_sky.c +++ b/android/app/src/main/cpp/code/renderergl2/tr_sky.c @@ -439,6 +439,7 @@ static void DrawSkySide( struct image_s *image, const int mins[2], const int max GLSL_BindProgram(sp); + GLSL_SetUniformMat4(sp, UNIFORM_MODELTRANSFORMMATRIX, backEnd.or.transformMatrix); GLSL_SetUniformMat4(sp, UNIFORM_MODELMATRIX, glState.modelview); GLSL_BindBuffers(sp); diff --git a/android/app/src/main/cpp/code/renderergl2/tr_surface.c b/android/app/src/main/cpp/code/renderergl2/tr_surface.c index f2756ff3..4adbc843 100644 --- a/android/app/src/main/cpp/code/renderergl2/tr_surface.c +++ b/android/app/src/main/cpp/code/renderergl2/tr_surface.c @@ -227,6 +227,7 @@ void RB_InstantQuad(vec4_t quadVerts[4]) GLSL_BindProgram(&tr.textureColorShader); + GLSL_SetUniformMat4(&tr.textureColorShader, UNIFORM_MODELTRANSFORMMATRIX, backEnd.or.transformMatrix); GLSL_SetUniformMat4(&tr.textureColorShader, UNIFORM_MODELMATRIX, glState.modelview); GLSL_BindBuffers(&tr.textureColorShader); GLSL_SetUniformVec4(&tr.textureColorShader, UNIFORM_COLOR, colorWhite); @@ -540,6 +541,7 @@ static void RB_SurfaceBeam( void ) GLSL_BindProgram(sp); + GLSL_SetUniformMat4(sp, UNIFORM_MODELTRANSFORMMATRIX, backEnd.or.transformMatrix); GLSL_SetUniformMat4(sp, UNIFORM_MODELMATRIX, glState.modelview); GLSL_BindBuffers(sp); diff --git a/android/app/src/main/pakQ3Q/glsl/lightall_vp.glsl b/android/app/src/main/pakQ3Q/glsl/lightall_vp.glsl index b1f4d279..4fe7f27d 100644 --- a/android/app/src/main/pakQ3Q/glsl/lightall_vp.glsl +++ b/android/app/src/main/pakQ3Q/glsl/lightall_vp.glsl @@ -56,6 +56,11 @@ uniform highp mat4 u_ModelMatrix; uniform vec4 u_BaseColor; uniform vec4 u_VertColor; +#if defined(USE_MODELTRANSFORMMATRIX) +uniform mat4 u_ModelTransformMatrix; +#endif + + #if defined(USE_VERTEX_ANIMATION) uniform float u_VertexLerp; #elif defined(USE_BONE_ANIMATION) @@ -197,11 +202,11 @@ void main() gl_Position = u_ProjectionMatrix * (u_ViewMatrices[gl_ViewID_OVR] * (u_ModelMatrix * vec4(position, 1.0))); -#if defined(USE_MODELMATRIX) - position = (u_ModelMatrix * vec4(position, 1.0)).xyz; - normal = (u_ModelMatrix * vec4(normal, 0.0)).xyz; +#if defined(USE_MODELTRANSFORMMATRIX) + position = (u_ModelTransformMatrix * vec4(position, 1.0)).xyz; + normal = (u_ModelTransformMatrix * vec4(normal, 0.0)).xyz; #if defined(USE_LIGHT) && !defined(USE_FAST_LIGHT) - tangent = (u_ModelMatrix * vec4(tangent, 0.0)).xyz; + tangent = (u_ModelTransformMatrix * vec4(tangent, 0.0)).xyz; #endif #endif @@ -213,8 +218,8 @@ void main() vec3 L = u_LightOrigin.xyz - (position * u_LightOrigin.w); #elif defined(USE_LIGHT) && !defined(USE_FAST_LIGHT) vec3 L = attr_LightDirection; -#if defined(USE_MODELMATRIX) - L = (u_ModelMatrix * vec4(L, 0.0)).xyz; +#if defined(USE_MODELTRANSFORMMATRIX) + L = (u_ModelTransformMatrix * vec4(L, 0.0)).xyz; #endif #endif diff --git a/android/app/src/main/pakQ3Q/pakQ3Q.pk3 b/android/app/src/main/pakQ3Q/pakQ3Q.pk3 new file mode 100644 index 00000000..88634558 Binary files /dev/null and b/android/app/src/main/pakQ3Q/pakQ3Q.pk3 differ