summaryrefslogtreecommitdiff
path: root/src/shader.h
diff options
context:
space:
mode:
authorKahrl <kahrl@gmx.net>2012-03-19 02:59:12 +0100
committerPerttu Ahola <celeron55@gmail.com>2012-12-02 00:46:18 +0200
commit22e6fb7056dcc888e9ccf768fefb6c073077a3b5 (patch)
treef85461ee0449602fa12dde14b97c5c96cf813133 /src/shader.h
parente3258b78e263c3f95007e1fbc92fcc3a51646f69 (diff)
downloadminetest-22e6fb7056dcc888e9ccf768fefb6c073077a3b5.tar.gz
minetest-22e6fb7056dcc888e9ccf768fefb6c073077a3b5.tar.bz2
minetest-22e6fb7056dcc888e9ccf768fefb6c073077a3b5.zip
ShaderSource and silly example shaders
Diffstat (limited to 'src/shader.h')
-rw-r--r--src/shader.h89
1 files changed, 89 insertions, 0 deletions
diff --git a/src/shader.h b/src/shader.h
new file mode 100644
index 000000000..d6a425311
--- /dev/null
+++ b/src/shader.h
@@ -0,0 +1,89 @@
+/*
+Minetest-c55
+Copyright (C) 2012 celeron55, Perttu Ahola <celeron55@gmail.com>
+Copyright (C) 2012 Kahrl <kahrl@gmx.net>
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License along
+with this program; if not, write to the Free Software Foundation, Inc.,
+51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+
+#ifndef SHADER_HEADER
+#define SHADER_HEADER
+
+#include "irrlichttypes_extrabloated.h"
+#include "threads.h"
+#include <string>
+
+class IGameDef;
+
+/*
+ shader.{h,cpp}: Shader handling stuff.
+*/
+
+/*
+ Gets the path to a shader by first checking if the file
+ name_of_shader/filename
+ exists in shader_path and if not, using the data path.
+
+ If not found, returns "".
+
+ Utilizes a thread-safe cache.
+*/
+std::string getShaderPath(const std::string &name_of_shader,
+ const std::string &filename);
+
+struct ShaderInfo
+{
+ std::string name;
+ video::E_MATERIAL_TYPE material;
+
+ ShaderInfo(): name(""), material(video::EMT_SOLID) {}
+};
+
+/*
+ ShaderSource creates and caches shaders.
+*/
+
+class IShaderSource
+{
+public:
+ IShaderSource(){}
+ virtual ~IShaderSource(){}
+ virtual u32 getShaderId(const std::string &name){return 0;}
+ virtual u32 getShaderIdDirect(const std::string &name){return 0;}
+ virtual std::string getShaderName(u32 id){return "";}
+ virtual ShaderInfo getShader(u32 id){return ShaderInfo();}
+ virtual ShaderInfo getShader(const std::string &name){return ShaderInfo();}
+};
+
+class IWritableShaderSource : public IShaderSource
+{
+public:
+ IWritableShaderSource(){}
+ virtual ~IWritableShaderSource(){}
+ virtual u32 getShaderId(const std::string &name){return 0;}
+ virtual u32 getShaderIdDirect(const std::string &name){return 0;}
+ virtual std::string getShaderName(u32 id){return "";}
+ virtual ShaderInfo getShader(u32 id){return ShaderInfo();}
+ virtual ShaderInfo getShader(const std::string &name){return ShaderInfo();}
+
+ virtual void processQueue()=0;
+ virtual void insertSourceShader(const std::string &name_of_shader,
+ const std::string &filename, const std::string &program)=0;
+ virtual void rebuildShaders()=0;
+};
+
+IWritableShaderSource* createShaderSource(IrrlichtDevice *device);
+
+#endif