//############################################## //#### AppGameKit - Shader Pack #### //#### 2017 Jan Bögemann #### //#### Please do not share any of this code #### //############################################## global SP_Specular_DPShaderID global SP_Specular_DPBoneShaderID global SP_Specular_SSShaderID global SP_Specular_SSBoneShaderID function SP_Specular_AddObject(ObjectID,DiffuseImageID,NormalImageID,SpecularImageID,EnvironmentID) local ShaderID as integer TempLocal as SP_ObjectData TempLocal.ObjectID=ObjectID if EnvironmentID=-1 EnvironmentID=SP_Environment_AddDualParabolic(GetObjectX(ObjectID),GetObjectY(ObjectID),GetObjectZ(ObjectID),128,128) SP_Environment_FixToObject(ObjectID,EnvironmentID) endif if GetObjectNumBones(ObjectID)=0 select SP_Environment[EnvironmentID].TypeID case SP_DUALPARABOLIC if SP_Specular_DPShaderID=0 SP_Specular_DPShaderID=SP_LoadCustomShader("Shader/SpecularDP.vs","Shader/SpecularDP.ps") SetShaderConstantByName(SP_Specular_DPShaderID,"normalSize",1.0,0,0,0) SetShaderConstantByName(SP_Specular_DPShaderID,"specularPower",30.0,0,0,0) endif ShaderID=SP_Specular_DPShaderID endcase case SP_SCREENSPACEREFLECTION if SP_Specular_SSShaderID=0 SP_Specular_SSShaderID=SP_LoadCustomShader("Shader/SpecularSS.vs","Shader/SpecularSS.ps") SetShaderConstantByName(SP_Specular_SSShaderID,"normalSize",1.0,0,0,0) SetShaderConstantByName(SP_Specular_SSShaderID,"specularPower",30.0,0,0,0) endif ShaderID=SP_Specular_SSShaderID endcase endselect else select SP_Environment[EnvironmentID].TypeID case SP_DUALPARABOLIC if SP_Specular_DPBoneShaderID=0 SP_Specular_DPBoneShaderID=SP_LoadCustomShader("Shader/SpecularDPBone.vs","Shader/SpecularDP.ps") SetShaderConstantByName(SP_Specular_DPBoneShaderID,"normalSize",1.0,0,0,0) SetShaderConstantByName(SP_Specular_DPBoneShaderID,"specularPower",30.0,0,0,0) endif ShaderID=SP_Specular_DPBoneShaderID endcase case SP_SCREENSPACEREFLECTION if SP_Specular_SSBoneShaderID=0 SP_Specular_SSBoneShaderID=SP_LoadCustomShader("Shader/SpecularSSBone.vs","Shader/SpecularSS.ps") SetShaderConstantByName(SP_Specular_SSBoneShaderID,"normalSize",1.0,0,0,0) SetShaderConstantByName(SP_Specular_SSBoneShaderID,"specularPower",30.0,0,0,0) endif ShaderID=SP_Specular_SSBoneShaderID endcase endselect endif SetObjectShader(ObjectID,ShaderID) TempLocal.ShaderID=ShaderID SetObjectImage(ObjectID,DiffuseImageID,0) select SP_Environment[EnvironmentID].TypeID case SP_DUALPARABOLIC SetObjectImage(ObjectID,SP_Environment[EnvironmentID].ImageID,1) endcase case SP_SCREENSPACEREFLECTION SetObjectImage(ObjectID,SP_Environment[EnvironmentID].ImageID,1) inc SP_Clipping_NeedCounter endcase endselect SetObjectNormalMap(ObjectID,NormalImageID) SetObjectImage(ObjectID,SpecularImageID,3) SP_Global.insert(TempLocal) SP_Water_ObjectID.insert(ObjectID) endfunction function SP_Specular_AddMesh(ObjectID,MeshID,DiffuseImageID,NormalImageID,SpecularImageID,EnvironmentID) local ShaderID as integer TempLocal as SP_ObjectData TempLocal.ObjectID=ObjectID TempLocal.MeshID=MeshID if EnvironmentID=-1 EnvironmentID=SP_Environment_AddDualParabolic(GetObjectX(ObjectID),GetObjectY(ObjectID),GetObjectZ(ObjectID),128,128) SP_Environment_FixToObject(ObjectID,EnvironmentID) endif if GetObjectNumBones(ObjectID)=0 select SP_Environment[EnvironmentID].TypeID case SP_DUALPARABOLIC if SP_Specular_DPShaderID=0 SP_Specular_DPShaderID=SP_LoadCustomShader("Shader/SpecularDP.vs","Shader/SpecularDP.ps") endif ShaderID=SP_Specular_DPShaderID endcase case SP_SCREENSPACEREFLECTION if SP_Specular_SSShaderID=0 SP_Specular_SSShaderID=SP_LoadCustomShader("Shader/SpecularSS.vs","Shader/SpecularSS.ps") endif ShaderID=SP_Specular_SSShaderID endcase endselect else select SP_Environment[EnvironmentID].TypeID case SP_DUALPARABOLIC if SP_Specular_DPBoneShaderID=0 SP_Specular_DPBoneShaderID=SP_LoadCustomShader("Shader/SpecularDPBone.vs","Shader/SpecularDP.ps") endif ShaderID=SP_Specular_DPBoneShaderID endcase case SP_SCREENSPACEREFLECTION if SP_Specular_SSBoneShaderID=0 SP_Specular_SSBoneShaderID=SP_LoadCustomShader("Shader/SpecularSSBone.vs","Shader/SpecularSS.ps") endif ShaderID=SP_Specular_SSBoneShaderID endcase endselect endif SetShaderConstantByName(ShaderID,"normalSize",1.0,0,0,0) SetShaderConstantByName(ShaderID,"specularPower",30.0,0,0,0) SetObjectMeshShader(ObjectID,MeshID,ShaderID) TempLocal.ShaderID=ShaderID SetObjectMeshImage(ObjectID,MeshID,DiffuseImageID,0) select SP_Environment[EnvironmentID].TypeID case SP_DUALPARABOLIC SetObjectMeshImage(ObjectID,MeshID,SP_Environment[EnvironmentID].ImageID,1) endcase case SP_SCREENSPACEREFLECTION SetObjectMeshImage(ObjectID,MeshID,SP_Environment[EnvironmentID].ImageID,1) inc SP_Clipping_NeedCounter endcase endselect SetObjectMeshNormalMap(ObjectID,MeshID,NormalImageID) SetObjectMeshImage(ObjectID,MeshID,SpecularImageID,3) SP_Global.insert(TempLocal) endfunction function SP_Specular_RemoveObject(ObjectID) local Index as integer SetObjectShader(ObjectID,0) Index=-1 repeat inc Index until SP_Global[Index].ObjectID=ObjectID SP_Global.remove(Index) endfunction function SP_Specular_RemoveMesh(ObjectID,MeshID) local Index as integer SetObjectMeshShader(ObjectID,MeshID,0) Index=-1 repeat inc Index until SP_Global[Index].ObjectID=ObjectID and SP_Global[Index].MeshID=MeshID SP_Global.remove(Index) endfunction function SP_Specular_SetNormalSize(ObjectID,Size#) SetObjectShaderConstantByName(ObjectID,"normalSize",Size#,0,0,0) endfunction function SP_Specular_SetSpecularPower(ObjectID,Power#) SetObjectShaderConstantByName(ObjectID,"specularPower",Power#,0,0,0) endfunction function SP_Specular_UpdateLight(LightID,X#,Y#,Z#,Red,Green,Blue,Size#) if SP_Specular_DPShaderID>0 SetShaderConstantArrayByName(SP_Specular_DPShaderID,"lightPosition",LightID,X#,Y#,Z#,0) SetShaderConstantArrayByName(SP_Specular_DPShaderID,"lightColor",LightID,Red/255.0,Green/255.0,Blue/255.0,0) SetShaderConstantArrayByName(SP_Specular_DPShaderID,"lightSize",LightID,Size#,0,0,0) endif if SP_Specular_DPBoneShaderID>0 SetShaderConstantArrayByName(SP_Specular_DPBoneShaderID,"lightPosition",LightID,X#,Y#,Z#,0) SetShaderConstantArrayByName(SP_Specular_DPBoneShaderID,"lightColor",LightID,Red/255.0,Green/255.0,Blue/255.0,0) SetShaderConstantArrayByName(SP_Specular_DPBoneShaderID,"lightSize",LightID,Size#,0,0,0) endif if SP_Specular_SSShaderID>0 SetShaderConstantArrayByName(SP_Specular_SSShaderID,"lightPosition",LightID,X#,Y#,Z#,0) SetShaderConstantArrayByName(SP_Specular_SSShaderID,"lightColor",LightID,Red/255.0,Green/255.0,Blue/255.0,0) SetShaderConstantArrayByName(SP_Specular_SSShaderID,"lightSize",LightID,Size#,0,0,0) endif if SP_Specular_SSBoneShaderID>0 SetShaderConstantArrayByName(SP_Specular_SSBoneShaderID,"lightPosition",LightID,X#,Y#,Z#,0) SetShaderConstantArrayByName(SP_Specular_SSBoneShaderID,"lightColor",LightID,Red/255.0,Green/255.0,Blue/255.0,0) SetShaderConstantArrayByName(SP_Specular_SSBoneShaderID,"lightSize",LightID,Size#,0,0,0) endif endfunction