diff --git a/examples/models/models_material_pbr.c b/examples/models/models_material_pbr.c index f0420d308..eac9d9c06 100644 --- a/examples/models/models_material_pbr.c +++ b/examples/models/models_material_pbr.c @@ -21,12 +21,18 @@ #define RLIGHTS_IMPLEMENTATION #include "rlights.h" +#if defined(PLATFORM_DESKTOP) + #define GLSL_VERSION 330 +#else // PLATFORM_RPI, PLATFORM_ANDROID, PLATFORM_WEB + #define GLSL_VERSION 100 +#endif + #define CUBEMAP_SIZE 1024 // Cubemap texture size #define IRRADIANCE_SIZE 32 // Irradiance texture size #define PREFILTERED_SIZE 256 // Prefiltered HDR environment texture size #define BRDF_SIZE 512 // BRDF LUT texture size -#define LIGHT_DISTANCE 1000.0f -#define LIGHT_HEIGHT 1.0f +#define LIGHT_DISTANCE 1000.0f +#define LIGHT_HEIGHT 1.0f // PBR texture maps generation static TextureCubemap GenTextureCubemap(Shader shader, Texture2D panorama, int size, int format); // Generate cubemap (6 faces) from equirectangular (panorama) texture @@ -127,11 +133,8 @@ static Material LoadMaterialPBR(Color albedo, float metalness, float roughness) Material mat = LoadMaterialDefault(); // Initialize material to default // Load PBR shader (requires several maps) -#if defined(PLATFORM_DESKTOP) - mat.shader = LoadShader("resources/shaders/glsl330/pbr.vs", "resources/shaders/glsl330/pbr.fs"); -#else // PLATFORM_RPI, PLATFORM_ANDROID, PLATFORM_WEB - mat.shader = LoadShader("resources/shaders/glsl100/pbr.vs", "resources/shaders/glsl100/pbr.fs"); -#endif + mat.shader = LoadShader(TextFormat("resources/shaders/glsl%i/pbr.vs", GLSL_VERSION), + TextFormat("resources/shaders/glsl%i/pbr.fs", GLSL_VERSION)); // Get required locations points for PBR material // NOTE: Those location names must be available and used in the shader code @@ -187,12 +190,11 @@ static Material LoadMaterialPBR(Color albedo, float metalness, float roughness) // Generate cubemap from panorama texture //-------------------------------------------------------------------------------------------------------- Texture2D panorama = LoadTexture("resources/dresden_square_2k.hdr"); + // Load equirectangular to cubemap shader -#if defined(PLATFORM_DESKTOP) - Shader shdrCubemap = LoadShader("resources/shaders/glsl330/cubemap.vs", "resources/shaders/glsl330/cubemap.fs"); -#else // PLATFORM_RPI, PLATFORM_ANDROID, PLATFORM_WEB - Shader shdrCubemap = LoadShader("resources/shaders/glsl100/cubemap.vs", "resources/shaders/glsl100/cubemap.fs"); -#endif + Shader shdrCubemap = LoadShader(TextFormat("resources/shaders/glsl%i/pbr.vs", GLSL_VERSION), + TextFormat("resources/shaders/glsl%i/pbr.fs", GLSL_VERSION)); + SetShaderValue(shdrCubemap, GetShaderLocation(shdrCubemap, "equirectangularMap"), (int[1]){ 0 }, SHADER_UNIFORM_INT); TextureCubemap cubemap = GenTextureCubemap(shdrCubemap, panorama, CUBEMAP_SIZE, PIXELFORMAT_UNCOMPRESSED_R32G32B32); UnloadTexture(panorama); @@ -202,11 +204,9 @@ static Material LoadMaterialPBR(Color albedo, float metalness, float roughness) // Generate irradiance map from cubemap texture //-------------------------------------------------------------------------------------------------------- // Load irradiance (GI) calculation shader -#if defined(PLATFORM_DESKTOP) - Shader shdrIrradiance = LoadShader("resources/shaders/glsl330/skybox.vs", "resources/shaders/glsl330/irradiance.fs"); -#else // PLATFORM_RPI, PLATFORM_ANDROID, PLATFORM_WEB - Shader shdrIrradiance = LoadShader("resources/shaders/glsl100/skybox.vs", "resources/shaders/glsl100/irradiance.fs"); -#endif + Shader shdrIrradiance = LoadShader(TextFormat("resources/shaders/glsl%i/skybox.vs", GLSL_VERSION), + TextFormat("resources/shaders/glsl%i/irradiance.fs", GLSL_VERSION)); + SetShaderValue(shdrIrradiance, GetShaderLocation(shdrIrradiance, "environmentMap"), (int[1]){ 0 }, SHADER_UNIFORM_INT); mat.maps[MATERIAL_MAP_IRRADIANCE].texture = GenTextureIrradiance(shdrIrradiance, cubemap, IRRADIANCE_SIZE); UnloadShader(shdrIrradiance); @@ -215,11 +215,9 @@ static Material LoadMaterialPBR(Color albedo, float metalness, float roughness) // Generate prefilter map from cubemap texture //-------------------------------------------------------------------------------------------------------- // Load reflection prefilter calculation shader -#if defined(PLATFORM_DESKTOP) - Shader shdrPrefilter = LoadShader("resources/shaders/glsl330/skybox.vs", "resources/shaders/glsl330/prefilter.fs"); -#else - Shader shdrPrefilter = LoadShader("resources/shaders/glsl100/skybox.vs", "resources/shaders/glsl100/prefilter.fs"); -#endif + Shader shdrPrefilter = LoadShader(TextFormat("resources/shaders/glsl%i/skybox.vs", GLSL_VERSION), + TextFormat("resources/shaders/glsl%i/prefilter.fs", GLSL_VERSION)); + SetShaderValue(shdrPrefilter, GetShaderLocation(shdrPrefilter, "environmentMap"), (int[1]){ 0 }, SHADER_UNIFORM_INT); mat.maps[MATERIAL_MAP_PREFILTER].texture = GenTexturePrefilter(shdrPrefilter, cubemap, PREFILTERED_SIZE); UnloadTexture(cubemap); @@ -228,11 +226,9 @@ static Material LoadMaterialPBR(Color albedo, float metalness, float roughness) // Generate BRDF (bidirectional reflectance distribution function) texture (using shader) //-------------------------------------------------------------------------------------------------------- -#if defined(PLATFORM_DESKTOP) - Shader shdrBRDF = LoadShader("resources/shaders/glsl330/brdf.vs", "resources/shaders/glsl330/brdf.fs"); -#else - Shader shdrBRDF = LoadShader("resources/shaders/glsl100/brdf.vs", "resources/shaders/glsl100/brdf.fs"); -#endif + Shader shdrBRDF = LoadShader(TextFormat("resources/shaders/glsl%i/brdf.vs", GLSL_VERSION), + TextFormat("resources/shaders/glsl%i/brdf.fs", GLSL_VERSION)); + mat.maps[MATERIAL_MAP_BRDG].texture = GenTextureBRDF(shdrBRDF, BRDF_SIZE); UnloadShader(shdrBRDF); //-------------------------------------------------------------------------------------------------------- @@ -293,7 +289,7 @@ static TextureCubemap GenTextureCubemap(Shader shader, Texture2D panorama, int s rlClearScreenBuffers(); DrawCubeV(Vector3Zero(), Vector3One(), WHITE); - rlDrawRenderBatch(RLGL.currentBatch); + rlDrawRenderBatchActive(); } //------------------------------------------------------------------------------------------ diff --git a/examples/models/models_skybox.c b/examples/models/models_skybox.c index cef346116..2060688e1 100644 --- a/examples/models/models_skybox.c +++ b/examples/models/models_skybox.c @@ -12,6 +12,12 @@ #include "raylib.h" #include "rlgl.h" +#if defined(PLATFORM_DESKTOP) + #define GLSL_VERSION 330 +#else // PLATFORM_RPI, PLATFORM_ANDROID, PLATFORM_WEB + #define GLSL_VERSION 100 +#endif + // Generate cubemap (6 faces) from equirectangular (panorama) texture static TextureCubemap GenTextureCubemap(Shader shader, Texture2D panorama, int size, int format); @@ -35,21 +41,17 @@ int main(void) // Load skybox shader and set required locations // NOTE: Some locations are automatically set at shader loading -#if defined(PLATFORM_DESKTOP) - skybox.materials[0].shader = LoadShader("resources/shaders/glsl330/skybox.vs", "resources/shaders/glsl330/skybox.fs"); -#else // PLATFORM_RPI, PLATFORM_ANDROID, PLATFORM_WEB - skybox.materials[0].shader = LoadShader("resources/shaders/glsl100/skybox.vs", "resources/shaders/glsl100/skybox.fs"); -#endif + skybox.materials[0].shader = LoadShader(TextFormat("resources/shaders/glsl%i/skybox.vs", GLSL_VERSION), + TextFormat("resources/shaders/glsl%i/skybox.fs", GLSL_VERSION)); + SetShaderValue(skybox.materials[0].shader, GetShaderLocation(skybox.materials[0].shader, "environmentMap"), (int[1]){ MATERIAL_MAP_CUBEMAP }, SHADER_UNIFORM_INT); SetShaderValue(skybox.materials[0].shader, GetShaderLocation(skybox.materials[0].shader, "doGamma"), (int[1]) { useHDR ? 1 : 0 }, SHADER_UNIFORM_INT); SetShaderValue(skybox.materials[0].shader, GetShaderLocation(skybox.materials[0].shader, "vflipped"), (int[1]){ useHDR ? 1 : 0 }, SHADER_UNIFORM_INT); // Load cubemap shader and setup required shader locations -#if defined(PLATFORM_DESKTOP) - Shader shdrCubemap = LoadShader("resources/shaders/glsl330/cubemap.vs", "resources/shaders/glsl330/cubemap.fs"); -#else // PLATFORM_RPI, PLATFORM_ANDROID, PLATFORM_WEB - Shader shdrCubemap = LoadShader("resources/shaders/glsl100/cubemap.vs", "resources/shaders/glsl100/cubemap.fs"); -#endif + Shader shdrCubemap = LoadShader(TextFormat("resources/shaders/glsl%i/cubemap.vs", GLSL_VERSION), + TextFormat("resources/shaders/glsl%i/cubemap.fs", GLSL_VERSION)); + SetShaderValue(shdrCubemap, GetShaderLocation(shdrCubemap, "equirectangularMap"), (int[1]){ 0 }, SHADER_UNIFORM_INT); char skyboxFileName[256] = { 0 };