summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorRay <[email protected]>2019-05-18 01:24:00 +0200
committerRay <[email protected]>2019-05-18 01:24:00 +0200
commit6332bc039878c870538ce4c1ce47d3caaf3a40c4 (patch)
tree7822b225e6e73f906d48f280691035265f73b587
parent5ef7beb0c509b61d2ccc913360fea4c446ff4d4c (diff)
downloadraylib-6332bc039878c870538ce4c1ce47d3caaf3a40c4.tar.gz
raylib-6332bc039878c870538ce4c1ce47d3caaf3a40c4.zip
Corrected issue with shader loading
When using FormatText() several times in same function, returned string is static and so, the same is returned, resulting in failures on shader loading.
-rw-r--r--examples/models/models_material_pbr.c45
-rw-r--r--examples/models/models_skybox.c20
-rw-r--r--examples/models/resources/shaders/glsl330/skybox.vs2
3 files changed, 38 insertions, 29 deletions
diff --git a/examples/models/models_material_pbr.c b/examples/models/models_material_pbr.c
index b8d320c7..af2fc5b9 100644
--- a/examples/models/models_material_pbr.c
+++ b/examples/models/models_material_pbr.c
@@ -17,12 +17,6 @@
#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 512 // Cubemap texture size
#define IRRADIANCE_SIZE 32 // Irradiance texture size
#define PREFILTERED_SIZE 256 // Prefiltered HDR environment texture size
@@ -120,9 +114,12 @@ static Material LoadMaterialPBR(Color albedo, float metalness, float roughness)
{
Material mat = { 0 }; // NOTE: All maps textures are set to { 0 }
- mat.shader = LoadShader(FormatText("resources/shaders/glsl%i/pbr.vs", GLSL_VERSION),
- FormatText("resources/shaders/glsl%i/pbr.fs", GLSL_VERSION));
-
+#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
+
// Get required locations points for PBR material
// NOTE: Those location names must be available and used in the shader code
mat.shader.locs[LOC_MAP_ALBEDO] = GetShaderLocation(mat.shader, "albedo.sampler");
@@ -149,20 +146,32 @@ static Material LoadMaterialPBR(Color albedo, float metalness, float roughness)
mat.maps[MAP_OCCLUSION].texture = LoadTexture("resources/pbr/trooper_ao.png");
// Load equirectangular to cubemap shader
- Shader shdrCubemap = LoadShader(FormatText("resources/shaders/glsl%i/cubemap.vs", GLSL_VERSION),
- FormatText("resources/shaders/glsl%i/cubemap.fs", GLSL_VERSION));
+#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
// Load irradiance (GI) calculation shader
- Shader shdrIrradiance = LoadShader(FormatText("resources/shaders/glsl%i/skybox.vs", GLSL_VERSION),
- FormatText("resources/shaders/glsl%i/irradiance.fs", GLSL_VERSION));
+#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
// Load reflection prefilter calculation shader
- Shader shdrPrefilter = LoadShader(FormatText("resources/shaders/glsl%i/skybox.vs", GLSL_VERSION),
- FormatText("resources/shaders/glsl%i/prefilter.fs", GLSL_VERSION));
+#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
- // Load bidirectional reflectance distribution function shader
- Shader shdrBRDF = LoadShader(FormatText("resources/shaders/glsl%i/brdf.vs", GLSL_VERSION),
- FormatText("resources/shaders/glsl%i/brdf.fs", GLSL_VERSION));
+ // Load bidirectional reflectance distribution function 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
// Setup required shader locations
SetShaderValue(shdrCubemap, GetShaderLocation(shdrCubemap, "equirectangularMap"), (int[1]){ 0 }, UNIFORM_INT);
diff --git a/examples/models/models_skybox.c b/examples/models/models_skybox.c
index 2d4d5710..d3369b70 100644
--- a/examples/models/models_skybox.c
+++ b/examples/models/models_skybox.c
@@ -11,12 +11,6 @@
#include "raylib.h"
-#if defined(PLATFORM_DESKTOP)
- #define GLSL_VERSION 330
-#else // PLATFORM_RPI, PLATFORM_ANDROID, PLATFORM_WEB
- #define GLSL_VERSION 100
-#endif
-
int main()
{
// Initialization
@@ -35,13 +29,19 @@ int main()
// Load skybox shader and set required locations
// NOTE: Some locations are automatically set at shader loading
- skybox.materials[0].shader = LoadShader(FormatText("resources/shaders/glsl%i/skybox.vs", GLSL_VERSION),
- FormatText("resources/shaders/glsl%i/skybox.fs", GLSL_VERSION));
-
+#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
SetShaderValue(skybox.materials[0].shader, GetShaderLocation(skybox.materials[0].shader, "environmentMap"), (int[1]){ MAP_CUBEMAP }, UNIFORM_INT);
// Load cubemap shader and setup required shader locations
- Shader shdrCubemap = LoadShader("resources/shaders/cubemap.vs", "resources/shaders/cubemap.fs");
+#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
SetShaderValue(shdrCubemap, GetShaderLocation(shdrCubemap, "equirectangularMap"), (int[1]){ 0 }, UNIFORM_INT);
// Load HDR panorama (sphere) texture
diff --git a/examples/models/resources/shaders/glsl330/skybox.vs b/examples/models/resources/shaders/glsl330/skybox.vs
index dcbe6c3d..4fe9a2c3 100644
--- a/examples/models/resources/shaders/glsl330/skybox.vs
+++ b/examples/models/resources/shaders/glsl330/skybox.vs
@@ -28,5 +28,5 @@ void main()
vec4 clipPos = projection*rotView*vec4(vertexPosition, 1.0);
// Calculate final vertex position
- gl_Position = clipPos.xyww;
+ gl_Position = clipPos.xyzw;
}