@@ -1140,6 +1140,52 @@ void ofShadow::_updateNumShadows() {
11401140#include " shaders/shadowDepth.frag"
11411141#include " shaders/shadowDepthCubeGeom.glsl"
11421142
1143+ bool ofShadow::setupShadowDepthShader (ofShader& ashader, const std::string aShaderMain) {
1144+ return setupShadowDepthShader ( ashader, data->lightType , aShaderMain );
1145+ }
1146+
1147+ bool ofShadow::setupShadowDepthShader (ofShader& ashader, int aLightType, const std::string aShaderMain) {
1148+ std::string gversion = " #version 150\n " ;
1149+ #ifdef TARGET_OPENGLES
1150+ gversion = " #version 300 es\n precision highp float;\n " ;
1151+ #endif
1152+ std::string tdefines = " #define SINGLE_PASS\n " ;
1153+
1154+ bool bDepthCubeSinglePass = false ;
1155+
1156+ if ( aLightType == OF_LIGHT_POINT ) {
1157+ #ifndef TARGET_OPENGLES
1158+ if (isSingleOmniPass ()) {
1159+ // return shaders[&renderer]->depthCube;
1160+ tdefines = " #define CUBE_MAP_SINGLE_PASS\n " ;
1161+ bDepthCubeSinglePass = true ;
1162+ } else {
1163+ // return shaders[&renderer]->depthCubeMultiPass;
1164+ tdefines = " #define CUBE_MAP_MULTI_PASS\n " ;
1165+ }
1166+ #else
1167+ // return shaders[&renderer]->depthCubeMultiPass;
1168+ tdefines = " #define CUBE_MAP_MULTI_PASS\n " ;
1169+ #endif
1170+ } else if ( aLightType == OF_LIGHT_AREA ) {
1171+ // return shaders[&renderer]->depth;
1172+ } else {
1173+ // return shaders[&renderer]->depth;
1174+ }
1175+
1176+ ashader.setupShaderFromSource (GL_VERTEX_SHADER,gversion+tdefines+depthVertexShaderSource+aShaderMain);
1177+ ashader.setupShaderFromSource (GL_FRAGMENT_SHADER,gversion+tdefines+depthFragShaderSource);
1178+
1179+ #ifndef TARGET_OPENGLES
1180+ if (bDepthCubeSinglePass) {
1181+ ashader.setupShaderFromSource (GL_GEOMETRY_SHADER_EXT,depthCubeGeometryShaderSource);
1182+ }
1183+ #endif
1184+
1185+ ashader.bindDefaults ();
1186+ return ashader.linkProgram ();
1187+ }
1188+
11431189
11441190void ofShadow::initShaders (ofGLProgrammableRenderer & renderer) const {
11451191 auto rendererShaders = shaders.find (&renderer);
@@ -1152,19 +1198,21 @@ void ofShadow::initShaders(ofGLProgrammableRenderer & renderer) const{
11521198 gversion = " #version 300 es\n precision highp float;\n " ;
11531199 #endif
11541200
1155- shaders[&renderer]->depth .setupShaderFromSource (GL_VERTEX_SHADER,gversion+" #define SINGLE_PASS\n " +depthVertexShaderSource);
1201+ std::string vertString = depthVertexShaderSource+depthVertexShader_Main;
1202+
1203+ shaders[&renderer]->depth .setupShaderFromSource (GL_VERTEX_SHADER,gversion+" #define SINGLE_PASS\n " +vertString);
11561204 shaders[&renderer]->depth .setupShaderFromSource (GL_FRAGMENT_SHADER,gversion+" #define SINGLE_PASS\n " +depthFragShaderSource);
11571205 shaders[&renderer]->depth .bindDefaults ();
11581206 shaders[&renderer]->depth .linkProgram ();
11591207
11601208 #ifndef TARGET_OPENGLES
1161- shaders[&renderer]->depthCube .setupShaderFromSource (GL_VERTEX_SHADER,gversion+" #define CUBE_MAP_SINGLE_PASS\n " +depthVertexShaderSource );
1209+ shaders[&renderer]->depthCube .setupShaderFromSource (GL_VERTEX_SHADER,gversion+" #define CUBE_MAP_SINGLE_PASS\n " +vertString );
11621210 shaders[&renderer]->depthCube .setupShaderFromSource (GL_FRAGMENT_SHADER,gversion+" #define CUBE_MAP_SINGLE_PASS\n " +depthFragShaderSource);
11631211 shaders[&renderer]->depthCube .setupShaderFromSource (GL_GEOMETRY_SHADER_EXT,depthCubeGeometryShaderSource);
11641212 shaders[&renderer]->depthCube .bindDefaults ();
11651213 shaders[&renderer]->depthCube .linkProgram ();
11661214 #endif
1167- shaders[&renderer]->depthCubeMultiPass .setupShaderFromSource (GL_VERTEX_SHADER,gversion+" #define CUBE_MAP_MULTI_PASS\n " +depthVertexShaderSource );
1215+ shaders[&renderer]->depthCubeMultiPass .setupShaderFromSource (GL_VERTEX_SHADER,gversion+" #define CUBE_MAP_MULTI_PASS\n " +vertString );
11681216 shaders[&renderer]->depthCubeMultiPass .setupShaderFromSource (GL_FRAGMENT_SHADER,gversion+" #define CUBE_MAP_MULTI_PASS\n " +depthFragShaderSource);
11691217 shaders[&renderer]->depthCubeMultiPass .bindDefaults ();
11701218 shaders[&renderer]->depthCubeMultiPass .linkProgram ();
0 commit comments