EmbedShaders.cmake 3.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. find_program(PYTHON_EXECUTABLE python3 REQUIRED)
  2. if("${R3D_CUSTOM_SHADER_PATH}" STREQUAL "")
  3. set(R3D_CUSTOM_SHADER_PATH "${R3D_ROOT_PATH}/embedded/shaders" CACHE STRING "" FORCE)
  4. endif()
  5. message(STATUS "Using shader path: '${R3D_CUSTOM_SHADER_PATH}'")
  6. function(ProcessShader shader_file var_name)
  7. execute_process(
  8. COMMAND ${PYTHON_EXECUTABLE} "${R3D_ROOT_PATH}/scripts/glsl_minifier.py" "${shader_file}"
  9. OUTPUT_VARIABLE shader_output
  10. OUTPUT_STRIP_TRAILING_WHITESPACE
  11. )
  12. set("${var_name}" "${shader_output}" PARENT_SCOPE)
  13. endfunction()
  14. function(EmbedShaders generated_shaders_source shaders_source shaders_header)
  15. # Minify and store common shaders
  16. ProcessShader("${R3D_CUSTOM_SHADER_PATH}/common/screen.vs.glsl" VS_COMMON_SCREEN)
  17. ProcessShader("${R3D_CUSTOM_SHADER_PATH}/common/cubemap.vs.glsl" VS_COMMON_CUBEMAP)
  18. # Minify and store generate shaders
  19. ProcessShader("${R3D_CUSTOM_SHADER_PATH}/generate/gaussianBlurDualPass.fs.glsl" FS_GENERATE_GAUSSIAN_BLUR_DUAL_PASS)
  20. ProcessShader("${R3D_CUSTOM_SHADER_PATH}/generate/cubemapFromEquirectangular.fs.glsl" FS_GENERATE_CUBEMAP_FROM_EQUIRECTANGULAR)
  21. ProcessShader("${R3D_CUSTOM_SHADER_PATH}/generate/irradianceConvolution.fs.glsl" FS_GENERATE_IRRADIANCE_CONVOLUTION)
  22. ProcessShader("${R3D_CUSTOM_SHADER_PATH}/generate/prefilter.fs.glsl" FS_GENERATE_PREFILTER)
  23. # Minify and store raster shaders
  24. ProcessShader("${R3D_CUSTOM_SHADER_PATH}/raster/geometry.vs.glsl" VS_RASTER_GEOMETRY)
  25. ProcessShader("${R3D_CUSTOM_SHADER_PATH}/raster/geometry.inst.vs.glsl" VS_RASTER_GEOMETRY_INST)
  26. ProcessShader("${R3D_CUSTOM_SHADER_PATH}/raster/geometry.fs.glsl" FS_RASTER_GEOMETRY)
  27. ProcessShader("${R3D_CUSTOM_SHADER_PATH}/raster/forward.vs.glsl" VS_RASTER_FORWARD)
  28. ProcessShader("${R3D_CUSTOM_SHADER_PATH}/raster/forward.inst.vs.glsl" VS_RASTER_FORWARD_INST)
  29. ProcessShader("${R3D_CUSTOM_SHADER_PATH}/raster/forward.fs.glsl" FS_RASTER_FORWARD)
  30. ProcessShader("${R3D_CUSTOM_SHADER_PATH}/raster/skybox.vs.glsl" VS_RASTER_SKYBOX)
  31. ProcessShader("${R3D_CUSTOM_SHADER_PATH}/raster/skybox.fs.glsl" FS_RASTER_SKYBOX)
  32. ProcessShader("${R3D_CUSTOM_SHADER_PATH}/raster/depth.vs.glsl" VS_RASTER_DEPTH)
  33. ProcessShader("${R3D_CUSTOM_SHADER_PATH}/raster/depth.inst.vs.glsl" VS_RASTER_DEPTH_INST)
  34. ProcessShader("${R3D_CUSTOM_SHADER_PATH}/raster/depth.fs.glsl" FS_RASTER_DEPTH)
  35. ProcessShader("${R3D_CUSTOM_SHADER_PATH}/raster/depthCube.vs.glsl" VS_RASTER_DEPTH_CUBE)
  36. ProcessShader("${R3D_CUSTOM_SHADER_PATH}/raster/depthCube.inst.vs.glsl" VS_RASTER_DEPTH_CUBE_INST)
  37. ProcessShader("${R3D_CUSTOM_SHADER_PATH}/raster/depthCube.fs.glsl" FS_RASTER_DEPTH_CUBE)
  38. # Minify and store screen shaders
  39. ProcessShader("${R3D_CUSTOM_SHADER_PATH}/screen/ssao.fs.glsl" FS_SCREEN_SSAO)
  40. ProcessShader("${R3D_CUSTOM_SHADER_PATH}/screen/ambient.fs.glsl" FS_SCREEN_AMBIENT)
  41. ProcessShader("${R3D_CUSTOM_SHADER_PATH}/screen/lighting.fs.glsl" FS_SCREEN_LIGHTING)
  42. ProcessShader("${R3D_CUSTOM_SHADER_PATH}/screen/scene.fs.glsl" FS_SCREEN_SCENE)
  43. ProcessShader("${R3D_CUSTOM_SHADER_PATH}/screen/bloom.fs.glsl" FS_SCREEN_BLOOM)
  44. ProcessShader("${R3D_CUSTOM_SHADER_PATH}/screen/fog.fs.glsl" FS_SCREEN_FOG)
  45. ProcessShader("${R3D_CUSTOM_SHADER_PATH}/screen/tonemap.fs.glsl" FS_SCREEN_TONEMAP)
  46. ProcessShader("${R3D_CUSTOM_SHADER_PATH}/screen/adjustment.fs.glsl" FS_SCREEN_ADJUSTMENT)
  47. ProcessShader("${R3D_CUSTOM_SHADER_PATH}/screen/fxaa.fs.glsl" FS_SCREEN_FXAA)
  48. # Generate shaders source file
  49. set(GENERATED_SHADERS_SOURCE "${CMAKE_BINARY_DIR}/generated/src/embedded/r3d_shaders.c")
  50. set(${generated_shaders_source} "${GENERATED_SHADERS_SOURCE}" PARENT_SCOPE)
  51. configure_file("${shaders_source}" "${GENERATED_SHADERS_SOURCE}")
  52. endfunction()