瀏覽代碼

Reviewed skybox and pbr examples

raysan5 4 年之前
父節點
當前提交
46650b5fb1
共有 2 個文件被更改,包括 36 次插入38 次删除
  1. 24 28
      examples/models/models_material_pbr.c
  2. 12 10
      examples/models/models_skybox.c

+ 24 - 28
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();
     }
     //------------------------------------------------------------------------------------------
 

+ 12 - 10
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 };