ETHShaderManager::ETHShaderManager(VideoPtr video, const str_type::string& shaderPath, const bool richLighting) : m_lastAM(Video::AM_PIXEL), m_fakeEyeManager(new ETHFakeEyePositionManager), m_richLighting(richLighting) { m_video = video; Shader::SHADER_PROFILE sp = Shader::SP_MODEL_2; #ifdef OPENGL sp = Shader::SP_MODEL_1; #endif m_defaultVS = m_video->LoadShaderFromFile(ETHGlobal::GetDataResourceFullPath(shaderPath, ETHShaders::DefaultVS()).c_str(), Shader::SF_VERTEX, sp); m_particle = m_video->LoadShaderFromFile(ETHGlobal::GetDataResourceFullPath(shaderPath, ETHShaders::Particle_VS()).c_str(), Shader::SF_VERTEX, sp); m_defaultStaticAmbientVS = m_video->LoadShaderFromFile(ETHGlobal::GetDataResourceFullPath(shaderPath, ETHShaders::Ambient_VS_Hor()).c_str(), Shader::SF_VERTEX, sp); m_verticalStaticAmbientVS = m_video->LoadShaderFromFile(ETHGlobal::GetDataResourceFullPath(shaderPath, ETHShaders::Ambient_VS_Ver()).c_str(), Shader::SF_VERTEX, sp); m_shadowVS = m_video->LoadShaderFromFile(ETHGlobal::GetDataResourceFullPath(shaderPath, ETHShaders::Shadow_VS_Ver()).c_str(), Shader::SF_VERTEX, sp); #if defined(GLES2) || defined(OPENGL) m_projShadow = m_video->CreateSprite(ETHGlobal::GetDataResourceFullPath(shaderPath, GS_L("shadow.png"))); #else m_projShadow = m_video->CreateSprite(ETHGlobal::GetDataResourceFullPath(shaderPath, GS_L("shadow.dds"))); #endif m_opaqueSprite = m_video->CreateSprite(ETHGlobal::GetDataResourceFullPath(shaderPath, GS_L("default_nm.png"))); if (m_richLighting) { // Not yet implemented on GLES2 #if !defined(GLES2) {ETHLightingProfilePtr profile(new ETHVertexLightDiffuse(m_video, shaderPath)); if (profile->IsSupportedByHardware()) { m_lightingProfiles[VERTEX_LIGHTING_DIFFUSE] = profile; }} #endif {ETHLightingProfilePtr profile(new ETHPixelLightDiffuseSpecular(m_video, shaderPath, m_fakeEyeManager)); if (profile->IsSupportedByHardware()) { m_lightingProfiles[PIXEL_LIGHTING_DIFFUSE_SPECULAR] = profile; }} } if (m_lightingProfiles.empty()) { video->Message(GS_L("ETHShaderManager::ETHShaderManager: no lighting profile"), GSMT_WARNING); } else { m_currentProfile = FindHighestLightingProfile(); } }
void ETHShaderManager::UsePS(const bool usePS) { if (!m_lightingProfiles.empty()) { if (usePS) m_currentProfile = FindHighestLightingProfile(); else m_currentProfile = m_lightingProfiles.find(VERTEX_LIGHTING_DIFFUSE)->second; } else { m_video->Message(GS_L("ETHShaderManager::UsePS: no lighting profile"), GSMT_WARNING); } }
ETHShaderManager::ETHShaderManager(VideoPtr video, const str_type::string& shaderPath) : m_lastAM(GSAM_PIXEL), m_fakeEyeManager(new ETHFakeEyePositionManager) { m_video = video; m_defaultVS = m_video->LoadShaderFromFile(ETHGlobal::GetDataResourceFullPath(shaderPath, ETHShaders::DefaultVS()).c_str(), GSSF_VERTEX, GSSP_MODEL_2); m_particle = m_video->LoadShaderFromFile(ETHGlobal::GetDataResourceFullPath(shaderPath, ETHShaders::Particle_VS()).c_str(), GSSF_VERTEX, GSSP_MODEL_2, "particle"); m_defaultStaticAmbientVS = m_video->LoadShaderFromFile(ETHGlobal::GetDataResourceFullPath(shaderPath, ETHShaders::Ambient_VS_Hor()).c_str(), GSSF_VERTEX, GSSP_MODEL_2); m_verticalStaticAmbientVS = m_video->LoadShaderFromFile(ETHGlobal::GetDataResourceFullPath(shaderPath, ETHShaders::Ambient_VS_Ver()).c_str(), GSSF_VERTEX, GSSP_MODEL_2, "vertical"); m_shadowVS = m_video->LoadShaderFromFile(ETHGlobal::GetDataResourceFullPath(shaderPath, ETHShaders::Shadow_VS_Ver()).c_str(), GSSF_VERTEX, GSSP_MODEL_2); // TODO/TO-DO: use a wider macro here #ifndef ANDROID m_projShadow = m_video->CreateSprite(ETHGlobal::GetDataResourceFullPath(shaderPath, GS_L("shadow.dds"))); #else m_projShadow = m_video->CreateSprite(ETHGlobal::GetDataResourceFullPath(shaderPath, GS_L("shadow.png"))); #endif { ETHLightingProfilePtr profile(new ETHVertexLightDiffuse(m_video, shaderPath)); if (profile->IsSupportedByHardware()) { m_lightingProfiles[VERTEX_LIGHTING_DIFFUSE] = profile; } } { ETHLightingProfilePtr profile(new ETHPixelLightDiffuseSpecular(m_video, shaderPath, m_fakeEyeManager)); if (profile->IsSupportedByHardware()) { m_lightingProfiles[PIXEL_LIGHTING_DIFFUSE_SPECULAR] = profile; } } if (m_lightingProfiles.empty()) { video->Message(GS_L("ETHShaderManager::ETHShaderManager: no lighting profile"), GSMT_WARNING); } else { m_currentProfile = FindHighestLightingProfile(); } }