/* ================== RB_GLSL_InitShaders ================== */ static bool RB_GLSL_InitShaders( ) { // load interation shaders R_LoadGLSLShader( "interaction_Dir.vs", &interactionDirShader, GL_VERTEX_SHADER_ARB ); R_LoadGLSLShader( "interaction_Dir.fs", &interactionDirShader, GL_FRAGMENT_SHADER_ARB ); if ( !R_LinkGLSLShader( &interactionDirShader, true ) && !R_ValidateGLSLProgram( &interactionDirShader ) ) { return false; } else { // set uniform locations interactionDirShader.u_lightCubeTexture = qglGetUniformLocationARB( interactionDirShader.program, "u_lightCubeTexture" ); interactionDirShader.u_lightProjectionTexture = qglGetUniformLocationARB( interactionDirShader.program, "u_lightProjectionTexture" ); interactionDirShader.u_lightFalloffTexture = qglGetUniformLocationARB( interactionDirShader.program, "u_lightFalloffTexture" ); interactionDirShader.u_normalTexture = qglGetUniformLocationARB( interactionDirShader.program, "u_normalTexture" ); interactionDirShader.u_diffuseTexture = qglGetUniformLocationARB( interactionDirShader.program, "u_diffuseTexture" ); interactionDirShader.u_specularTexture = qglGetUniformLocationARB( interactionDirShader.program, "u_specularTexture" ); interactionDirShader.u_ssaoTexture = qglGetUniformLocationARB( interactionDirShader.program, "u_ssaoTexture" ); interactionDirShader.u_aux0Texture = qglGetUniformLocationARB( interactionDirShader.program, "u_aux0Texture" ); interactionDirShader.u_aux1Texture = qglGetUniformLocationARB( interactionDirShader.program, "u_aux1Texture" ); interactionDirShader.u_aux2Texture = qglGetUniformLocationARB( interactionDirShader.program, "u_aux2Texture" ); interactionDirShader.u_aux3Texture = qglGetUniformLocationARB( interactionDirShader.program, "u_aux3Texture" ); interactionDirShader.u_aux4Texture = qglGetUniformLocationARB( interactionDirShader.program, "u_aux4Texture" ); interactionDirShader.u_aux5Texture = qglGetUniformLocationARB( interactionDirShader.program, "u_aux5Texture" ); interactionDirShader.u_aux6Texture = qglGetUniformLocationARB( interactionDirShader.program, "u_aux6Texture" ); interactionDirShader.u_aux7Texture = qglGetUniformLocationARB( interactionDirShader.program, "u_aux7Texture" ); interactionDirShader.u_aux8Texture = qglGetUniformLocationARB( interactionDirShader.program, "u_aux8Texture" ); interactionDirShader.u_aux9Texture = qglGetUniformLocationARB( interactionDirShader.program, "u_aux9Texture" ); interactionDirShader.modelMatrix = qglGetUniformLocationARB( interactionDirShader.program, "u_modelMatrix" ); interactionDirShader.localLightOrigin = qglGetUniformLocationARB( interactionDirShader.program, "u_lightOrigin" ); interactionDirShader.localViewOrigin = qglGetUniformLocationARB( interactionDirShader.program, "u_viewOrigin" ); interactionDirShader.lightProjectionS = qglGetUniformLocationARB( interactionDirShader.program, "u_lightProjectionS" ); interactionDirShader.lightProjectionT = qglGetUniformLocationARB( interactionDirShader.program, "u_lightProjectionT" ); interactionDirShader.lightProjectionQ = qglGetUniformLocationARB( interactionDirShader.program, "u_lightProjectionQ" ); interactionDirShader.lightFalloff = qglGetUniformLocationARB( interactionDirShader.program, "u_lightFalloff" ); interactionDirShader.bumpMatrixS = qglGetUniformLocationARB( interactionDirShader.program, "u_bumpMatrixS" ); interactionDirShader.bumpMatrixT = qglGetUniformLocationARB( interactionDirShader.program, "u_bumpMatrixT" ); interactionDirShader.diffuseMatrixS = qglGetUniformLocationARB( interactionDirShader.program, "u_diffuseMatrixS" ); interactionDirShader.diffuseMatrixT = qglGetUniformLocationARB( interactionDirShader.program, "u_diffuseMatrixT" ); interactionDirShader.specularMatrixS = qglGetUniformLocationARB( interactionDirShader.program, "u_specularMatrixS" ); interactionDirShader.specularMatrixT = qglGetUniformLocationARB( interactionDirShader.program, "u_specularMatrixT" ); interactionDirShader.specularMatrixT = qglGetUniformLocationARB( interactionDirShader.program, "u_specularMatrixT" ); interactionDirShader.colorMAD = qglGetUniformLocationARB( interactionDirShader.program, "u_colorMAD" ); interactionDirShader.diffuseColor = qglGetUniformLocationARB( interactionDirShader.program, "u_diffuseColor" ); interactionDirShader.specularColor = qglGetUniformLocationARB( interactionDirShader.program, "u_specularColor" ); interactionDirShader.falloffType = qglGetUniformLocationARB( interactionDirShader.program, "u_falloffType" ); interactionDirShader.specExp = qglGetUniformLocationARB( interactionDirShader.program, "u_specExp" ); interactionDirShader.localParms[0] = qglGetUniformLocationARB( interactionDirShader.program, "u_localParm0" ); interactionDirShader.localParms[1] = qglGetUniformLocationARB( interactionDirShader.program, "u_localParm1" ); interactionDirShader.localParms[2] = qglGetUniformLocationARB( interactionDirShader.program, "u_localParm2" ); interactionDirShader.localParms[3] = qglGetUniformLocationARB( interactionDirShader.program, "u_localParm3" ); interactionDirShader.localParms[4] = qglGetUniformLocationARB( interactionDirShader.program, "u_localParm4" ); interactionDirShader.localParms[5] = qglGetUniformLocationARB( interactionDirShader.program, "u_localParm5" ); interactionDirShader.localParms[6] = qglGetUniformLocationARB( interactionDirShader.program, "u_localParm6" ); interactionDirShader.localParms[7] = qglGetUniformLocationARB( interactionDirShader.program, "u_localParm7" ); // set texture locations qglUseProgramObjectARB( interactionDirShader.program ); qglUniform1iARB( interactionDirShader.u_lightCubeTexture, 0 ); qglUniform1iARB( interactionDirShader.u_lightProjectionTexture, 16 ); qglUniform1iARB( interactionDirShader.u_lightFalloffTexture, 1 ); qglUniform1iARB( interactionDirShader.u_normalTexture, 2 ); qglUniform1iARB( interactionDirShader.u_diffuseTexture, 3 ); qglUniform1iARB( interactionDirShader.u_specularTexture, 4 ); qglUniform1iARB( interactionDirShader.u_ssaoTexture, 5 ); qglUniform1iARB( interactionDirShader.u_aux0Texture, 6 ); qglUniform1iARB( interactionDirShader.u_aux1Texture, 7 ); qglUniform1iARB( interactionDirShader.u_aux2Texture, 8 ); qglUniform1iARB( interactionDirShader.u_aux3Texture, 9 ); qglUniform1iARB( interactionDirShader.u_aux4Texture, 10 ); qglUniform1iARB( interactionDirShader.u_aux5Texture, 11 ); qglUniform1iARB( interactionDirShader.u_aux6Texture, 12 ); qglUniform1iARB( interactionDirShader.u_aux7Texture, 13 ); qglUniform1iARB( interactionDirShader.u_aux8Texture, 14 ); qglUniform1iARB( interactionDirShader.u_aux9Texture, 15 ); qglUseProgramObjectARB( 0 ); } // load ambient interation shaders R_LoadGLSLShader( "interaction_Amb.vs", &interactionAmbShader, GL_VERTEX_SHADER_ARB ); R_LoadGLSLShader( "interaction_Amb.fs", &interactionAmbShader, GL_FRAGMENT_SHADER_ARB ); if ( !R_LinkGLSLShader( &interactionAmbShader, true ) && !R_ValidateGLSLProgram( &interactionAmbShader ) ) { return false; } else { // set uniform locations interactionAmbShader.u_lightCubeTexture = qglGetUniformLocationARB( interactionAmbShader.program, "u_lightCubeTexture" ); interactionAmbShader.u_lightFalloffTexture = qglGetUniformLocationARB( interactionAmbShader.program, "u_lightFalloffTexture" ); interactionAmbShader.u_normalTexture = qglGetUniformLocationARB( interactionAmbShader.program, "u_normalTexture" ); interactionAmbShader.u_diffuseTexture = qglGetUniformLocationARB( interactionAmbShader.program, "u_diffuseTexture" ); interactionAmbShader.u_specularTexture = qglGetUniformLocationARB( interactionAmbShader.program, "u_specularTexture" ); interactionAmbShader.u_ssaoTexture = qglGetUniformLocationARB( interactionAmbShader.program, "u_ssaoTexture" ); interactionAmbShader.u_aux0Texture = qglGetUniformLocationARB( interactionAmbShader.program, "u_aux0Texture" ); interactionAmbShader.u_aux1Texture = qglGetUniformLocationARB( interactionAmbShader.program, "u_aux1Texture" ); interactionAmbShader.u_aux2Texture = qglGetUniformLocationARB( interactionAmbShader.program, "u_aux2Texture" ); interactionAmbShader.u_aux3Texture = qglGetUniformLocationARB( interactionAmbShader.program, "u_aux3Texture" ); interactionAmbShader.u_aux4Texture = qglGetUniformLocationARB( interactionAmbShader.program, "u_aux4Texture" ); interactionAmbShader.u_aux5Texture = qglGetUniformLocationARB( interactionAmbShader.program, "u_aux5Texture" ); interactionAmbShader.u_aux6Texture = qglGetUniformLocationARB( interactionAmbShader.program, "u_aux6Texture" ); interactionAmbShader.u_aux7Texture = qglGetUniformLocationARB( interactionAmbShader.program, "u_aux7Texture" ); interactionAmbShader.u_aux8Texture = qglGetUniformLocationARB( interactionAmbShader.program, "u_aux8Texture" ); interactionAmbShader.u_aux9Texture = qglGetUniformLocationARB( interactionAmbShader.program, "u_aux9Texture" ); interactionAmbShader.modelMatrix = qglGetUniformLocationARB( interactionAmbShader.program, "u_modelMatrix" ); interactionAmbShader.localLightOrigin = qglGetUniformLocationARB( interactionAmbShader.program, "u_lightOrigin" ); interactionAmbShader.localViewOrigin = qglGetUniformLocationARB( interactionAmbShader.program, "u_viewOrigin" ); interactionAmbShader.lightProjectionS = qglGetUniformLocationARB( interactionAmbShader.program, "u_lightProjectionS" ); interactionAmbShader.lightProjectionT = qglGetUniformLocationARB( interactionAmbShader.program, "u_lightProjectionT" ); interactionAmbShader.lightProjectionQ = qglGetUniformLocationARB( interactionAmbShader.program, "u_lightProjectionQ" ); interactionAmbShader.lightFalloff = qglGetUniformLocationARB( interactionAmbShader.program, "u_lightFalloff" ); interactionAmbShader.bumpMatrixS = qglGetUniformLocationARB( interactionAmbShader.program, "u_bumpMatrixS" ); interactionAmbShader.bumpMatrixT = qglGetUniformLocationARB( interactionAmbShader.program, "u_bumpMatrixT" ); interactionAmbShader.diffuseMatrixS = qglGetUniformLocationARB( interactionAmbShader.program, "u_diffuseMatrixS" ); interactionAmbShader.diffuseMatrixT = qglGetUniformLocationARB( interactionAmbShader.program, "u_diffuseMatrixT" ); interactionAmbShader.specularMatrixS = qglGetUniformLocationARB( interactionAmbShader.program, "u_specularMatrixS" ); interactionAmbShader.specularMatrixT = qglGetUniformLocationARB( interactionAmbShader.program, "u_specularMatrixT" ); interactionAmbShader.colorMAD = qglGetUniformLocationARB( interactionAmbShader.program, "u_colorMAD" ); interactionAmbShader.diffuseColor = qglGetUniformLocationARB( interactionAmbShader.program, "u_diffuseColor" ); interactionAmbShader.specularColor = qglGetUniformLocationARB( interactionAmbShader.program, "u_specularColor" ); interactionAmbShader.specExp = qglGetUniformLocationARB( interactionAmbShader.program, "u_specExp" ); interactionAmbShader.localParms[0] = qglGetUniformLocationARB( interactionAmbShader.program, "u_localParm0" ); interactionAmbShader.localParms[1] = qglGetUniformLocationARB( interactionAmbShader.program, "u_localParm1" ); interactionAmbShader.localParms[2] = qglGetUniformLocationARB( interactionAmbShader.program, "u_localParm2" ); interactionAmbShader.localParms[3] = qglGetUniformLocationARB( interactionAmbShader.program, "u_localParm3" ); interactionAmbShader.localParms[4] = qglGetUniformLocationARB( interactionAmbShader.program, "u_localParm4" ); interactionAmbShader.localParms[5] = qglGetUniformLocationARB( interactionAmbShader.program, "u_localParm5" ); interactionAmbShader.localParms[6] = qglGetUniformLocationARB( interactionAmbShader.program, "u_localParm6" ); interactionAmbShader.localParms[7] = qglGetUniformLocationARB( interactionAmbShader.program, "u_localParm7" ); // set texture locations qglUseProgramObjectARB( interactionAmbShader.program ); qglUniform1iARB( interactionAmbShader.u_lightCubeTexture, 0 ); qglUniform1iARB( interactionAmbShader.u_lightFalloffTexture, 1 ); qglUniform1iARB( interactionAmbShader.u_normalTexture, 2 ); qglUniform1iARB( interactionAmbShader.u_diffuseTexture, 3 ); qglUniform1iARB( interactionAmbShader.u_specularTexture, 4 ); qglUniform1iARB( interactionAmbShader.u_ssaoTexture, 5 ); qglUniform1iARB( interactionAmbShader.u_aux0Texture, 6 ); qglUniform1iARB( interactionAmbShader.u_aux1Texture, 7 ); qglUniform1iARB( interactionAmbShader.u_aux2Texture, 8 ); qglUniform1iARB( interactionAmbShader.u_aux3Texture, 9 ); qglUniform1iARB( interactionAmbShader.u_aux4Texture, 10 ); qglUniform1iARB( interactionAmbShader.u_aux5Texture, 11 ); qglUniform1iARB( interactionAmbShader.u_aux6Texture, 12 ); qglUniform1iARB( interactionAmbShader.u_aux7Texture, 13 ); qglUniform1iARB( interactionAmbShader.u_aux8Texture, 14 ); qglUniform1iARB( interactionAmbShader.u_aux9Texture, 15 ); qglUseProgramObjectARB( 0 ); } // load stencil shadow extrusion shaders R_LoadGLSLShader( "stencilshadow.vs", &stencilShadowShader, GL_VERTEX_SHADER_ARB ); R_LoadGLSLShader( "stencilshadow.fs", &stencilShadowShader, GL_FRAGMENT_SHADER_ARB ); if ( !R_LinkGLSLShader( &stencilShadowShader, false ) && !R_ValidateGLSLProgram( &stencilShadowShader ) ) { return false; } else { // set uniform locations stencilShadowShader.localLightOrigin = qglGetUniformLocationARB( stencilShadowShader.program, "u_lightOrigin" ); } return true; }
static bool RB_GLSL_InitShaders( ) { // load interation shaders R_LoadGLSLShader( "interaction.vertex", &interactionShader, GL_VERTEX_SHADER_ARB ); R_LoadGLSLShader( "interaction.fragment", &interactionShader, GL_FRAGMENT_SHADER_ARB ); if ( interactionShader.fragmentShader == -1 || interactionShader.vertexShader == -1 || !R_LinkGLSLShader( &interactionShader, true ) && !R_ValidateGLSLProgram( &interactionShader ) ) { if (interactionShader.fragmentShader != -1) qglDeleteShader(interactionShader.fragmentShader); if (interactionShader.vertexShader != -1) qglDeleteShader(interactionShader.vertexShader); interactionShader.fragmentShader = -1; interactionShader.vertexShader = -1; common->Printf( "GLSL interactionShader failed to init.\n" ); return false; } else { // set uniform locations interactionShader.u_normalTexture = qglGetUniformLocationARB( interactionShader.program, "u_normalTexture" ); interactionShader.u_lightFalloffTexture = qglGetUniformLocationARB( interactionShader.program, "u_lightFalloffTexture" ); interactionShader.u_lightProjectionTexture = qglGetUniformLocationARB( interactionShader.program, "u_lightProjectionTexture" ); interactionShader.u_diffuseTexture = qglGetUniformLocationARB( interactionShader.program, "u_diffuseTexture" ); interactionShader.u_specularTexture = qglGetUniformLocationARB( interactionShader.program, "u_specularTexture" ); interactionShader.modelMatrix = qglGetUniformLocationARB( interactionShader.program, "u_modelMatrix" ); interactionShader.localLightOrigin = qglGetUniformLocationARB( interactionShader.program, "u_lightOrigin" ); interactionShader.localViewOrigin = qglGetUniformLocationARB( interactionShader.program, "u_viewOrigin" ); interactionShader.lightProjectionS = qglGetUniformLocationARB( interactionShader.program, "u_lightProjectionS" ); interactionShader.lightProjectionT = qglGetUniformLocationARB( interactionShader.program, "u_lightProjectionT" ); interactionShader.lightProjectionQ = qglGetUniformLocationARB( interactionShader.program, "u_lightProjectionQ" ); interactionShader.lightFalloff = qglGetUniformLocationARB( interactionShader.program, "u_lightFalloff" ); interactionShader.bumpMatrixS = qglGetUniformLocationARB( interactionShader.program, "u_bumpMatrixS" ); interactionShader.bumpMatrixT = qglGetUniformLocationARB( interactionShader.program, "u_bumpMatrixT" ); interactionShader.diffuseMatrixS = qglGetUniformLocationARB( interactionShader.program, "u_diffuseMatrixS" ); interactionShader.diffuseMatrixT = qglGetUniformLocationARB( interactionShader.program, "u_diffuseMatrixT" ); interactionShader.specularMatrixS = qglGetUniformLocationARB( interactionShader.program, "u_specularMatrixS" ); interactionShader.specularMatrixT = qglGetUniformLocationARB( interactionShader.program, "u_specularMatrixT" ); interactionShader.colorModulate = qglGetUniformLocationARB( interactionShader.program, "u_colorModulate" ); interactionShader.colorAdd = qglGetUniformLocationARB( interactionShader.program, "u_colorAdd" ); interactionShader.diffuseColor = qglGetUniformLocationARB( interactionShader.program, "u_diffuseColor" ); interactionShader.specularColor = qglGetUniformLocationARB( interactionShader.program, "u_specularColor" ); // set texture locations qglUseProgramObjectARB( interactionShader.program ); qglUniform1iARB( interactionShader.u_normalTexture, 0 ); qglUniform1iARB( interactionShader.u_lightFalloffTexture, 1 ); qglUniform1iARB( interactionShader.u_lightProjectionTexture, 2 ); qglUniform1iARB( interactionShader.u_diffuseTexture, 3 ); qglUniform1iARB( interactionShader.u_specularTexture, 4 ); qglUseProgramObjectARB( 0 ); } // load ambient interation shaders R_LoadGLSLShader( "ambientInteraction.vertex", &ambientInteractionShader, GL_VERTEX_SHADER_ARB ); R_LoadGLSLShader( "ambientInteraction.fragment", &ambientInteractionShader, GL_FRAGMENT_SHADER_ARB ); if ( ambientInteractionShader.fragmentShader == -1 || ambientInteractionShader.vertexShader == -1 || !R_LinkGLSLShader( &ambientInteractionShader, true ) && !R_ValidateGLSLProgram( &ambientInteractionShader ) ) { if (ambientInteractionShader.fragmentShader != -1) qglDeleteShader(ambientInteractionShader.fragmentShader); if (ambientInteractionShader.vertexShader != -1) qglDeleteShader(ambientInteractionShader.vertexShader); ambientInteractionShader.fragmentShader = -1; ambientInteractionShader.vertexShader = -1; common->Printf( "GLSL ambientInteractionShader failed to init.\n" ); return false; } else { // set uniform locations ambientInteractionShader.u_normalTexture = qglGetUniformLocationARB( ambientInteractionShader.program, "u_normalTexture" ); ambientInteractionShader.u_lightFalloffTexture = qglGetUniformLocationARB( ambientInteractionShader.program, "u_lightFalloffTexture" ); ambientInteractionShader.u_lightProjectionTexture = qglGetUniformLocationARB( ambientInteractionShader.program, "u_lightProjectionTexture" ); ambientInteractionShader.u_diffuseTexture = qglGetUniformLocationARB( ambientInteractionShader.program, "u_diffuseTexture" ); ambientInteractionShader.modelMatrix = qglGetUniformLocationARB( ambientInteractionShader.program, "u_modelMatrix" ); ambientInteractionShader.localLightOrigin = qglGetUniformLocationARB( ambientInteractionShader.program, "u_lightOrigin" ); ambientInteractionShader.lightProjectionS = qglGetUniformLocationARB( ambientInteractionShader.program, "u_lightProjectionS" ); ambientInteractionShader.lightProjectionT = qglGetUniformLocationARB( ambientInteractionShader.program, "u_lightProjectionT" ); ambientInteractionShader.lightProjectionQ = qglGetUniformLocationARB( ambientInteractionShader.program, "u_lightProjectionQ" ); ambientInteractionShader.lightFalloff = qglGetUniformLocationARB( ambientInteractionShader.program, "u_lightFalloff" ); ambientInteractionShader.bumpMatrixS = qglGetUniformLocationARB( ambientInteractionShader.program, "u_bumpMatrixS" ); ambientInteractionShader.bumpMatrixT = qglGetUniformLocationARB( ambientInteractionShader.program, "u_bumpMatrixT" ); ambientInteractionShader.diffuseMatrixS = qglGetUniformLocationARB( ambientInteractionShader.program, "u_diffuseMatrixS" ); ambientInteractionShader.diffuseMatrixT = qglGetUniformLocationARB( ambientInteractionShader.program, "u_diffuseMatrixT" ); ambientInteractionShader.colorModulate = qglGetUniformLocationARB( ambientInteractionShader.program, "u_colorModulate" ); ambientInteractionShader.colorAdd = qglGetUniformLocationARB( ambientInteractionShader.program, "u_colorAdd" ); ambientInteractionShader.diffuseColor = qglGetUniformLocationARB( ambientInteractionShader.program, "u_diffuseColor" ); // set texture locations qglUseProgramObjectARB( ambientInteractionShader.program ); qglUniform1iARB( ambientInteractionShader.u_normalTexture, 0 ); qglUniform1iARB( ambientInteractionShader.u_lightFalloffTexture, 1 ); qglUniform1iARB( ambientInteractionShader.u_lightProjectionTexture, 2 ); qglUniform1iARB( ambientInteractionShader.u_diffuseTexture, 3 ); qglUseProgramObjectARB( 0 ); } // load stencil shadow extrusion shaders R_LoadGLSLShader( "stencilshadow.vertex", &stencilShadowShader, GL_VERTEX_SHADER_ARB ); R_LoadGLSLShader( "stencilshadow.fragment", &stencilShadowShader, GL_FRAGMENT_SHADER_ARB ); if ( stencilShadowShader.fragmentShader == -1 || stencilShadowShader.vertexShader == -1 || !R_LinkGLSLShader( &stencilShadowShader, false ) && !R_ValidateGLSLProgram( &stencilShadowShader ) ) { if (stencilShadowShader.fragmentShader != -1) qglDeleteShader(stencilShadowShader.fragmentShader); if (stencilShadowShader.vertexShader != -1) qglDeleteShader(stencilShadowShader.vertexShader); stencilShadowShader.fragmentShader = -1; stencilShadowShader.vertexShader = -1; common->Printf( "GLSL stencilShadowShader failed to init.\n" ); return false; } else { // set uniform locations stencilShadowShader.localLightOrigin = qglGetUniformLocationARB( stencilShadowShader.program, "u_lightOrigin" ); } return true; }