From fa51a54042bb29d9f36b5de62275eb31a0734eb9 Mon Sep 17 00:00:00 2001 From: usernameak Date: Thu, 5 Jul 2018 15:01:16 +0300 Subject: [PATCH] Made ability to define custom material shaders for ProcessMaterial function --- src/gl/shaders/gl_shader.cpp | 3 ++- src/r_data/gldefs.cpp | 10 +++++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/gl/shaders/gl_shader.cpp b/src/gl/shaders/gl_shader.cpp index 8bff7ee2a..31e9bbc5d 100644 --- a/src/gl/shaders/gl_shader.cpp +++ b/src/gl/shaders/gl_shader.cpp @@ -496,6 +496,7 @@ static const FDefaultShader defaultshaders[]= }; TArray usershaders; +TArray usermaterials; struct FEffectShader { @@ -647,7 +648,7 @@ void FShaderCollection::CompileShaders(EPassType passType) FString name = ExtractFileBase(usershaders[i]); FName sfn = name; - FShader *shc = Compile(sfn, usershaders[i], "shaders/glsl/material_normal.fp", "", true, passType); + FShader *shc = Compile(sfn, usershaders[i], usermaterials[i], "", true, passType); mMaterialShaders.Push(shc); } diff --git a/src/r_data/gldefs.cpp b/src/r_data/gldefs.cpp index 573868021..97619cd0f 100644 --- a/src/r_data/gldefs.cpp +++ b/src/r_data/gldefs.cpp @@ -51,6 +51,7 @@ void AddLightAssociation(const char *actor, const char *frame, const char *light void InitializeActorLights(TArray &LightAssociations); extern TArray usershaders; +extern TArray usermaterials; extern TDeletingArray LightDefaults; @@ -1378,6 +1379,7 @@ class GLDefsParser bool iwad = false; int maplump = -1; FString maplumpname; + FString materiallumpname = "shaders/glsl/material_normal.fp"; float speed = 1.f; sc.MustGetString(); @@ -1393,6 +1395,11 @@ class GLDefsParser sc.MustGetString(); maplumpname = sc.String; } + else if (sc.Compare("material")) + { + sc.MustGetString(); + materiallumpname = sc.String; + } else if (sc.Compare("speed")) { sc.MustGetFloat(); @@ -1432,13 +1439,14 @@ class GLDefsParser tex->shaderspeed = speed; for (unsigned i = 0; i < usershaders.Size(); i++) { - if (!usershaders[i].CompareNoCase(maplumpname)) + if (!usershaders[i].CompareNoCase(maplumpname) && !usermaterials[i].CompareNoCase(materiallumpname)) { tex->shaderindex = i + FIRST_USER_SHADER; return; } } tex->shaderindex = usershaders.Push(maplumpname) + FIRST_USER_SHADER; + usermaterials.Push(materiallumpname); } } }