summaryrefslogtreecommitdiff
path: root/Runtime/GfxDevice/opengles30/GpuProgramsGLES30.h
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2019-08-14 22:50:43 +0800
committerchai <chaifix@163.com>2019-08-14 22:50:43 +0800
commit15740faf9fe9fe4be08965098bbf2947e096aeeb (patch)
treea730ec236656cc8cab5b13f088adfaed6bb218fb /Runtime/GfxDevice/opengles30/GpuProgramsGLES30.h
+Unity Runtime codeHEADmaster
Diffstat (limited to 'Runtime/GfxDevice/opengles30/GpuProgramsGLES30.h')
-rw-r--r--Runtime/GfxDevice/opengles30/GpuProgramsGLES30.h88
1 files changed, 88 insertions, 0 deletions
diff --git a/Runtime/GfxDevice/opengles30/GpuProgramsGLES30.h b/Runtime/GfxDevice/opengles30/GpuProgramsGLES30.h
new file mode 100644
index 0000000..73bd469
--- /dev/null
+++ b/Runtime/GfxDevice/opengles30/GpuProgramsGLES30.h
@@ -0,0 +1,88 @@
+#ifndef GPUPROGRAMSGLES30_H
+#define GPUPROGRAMSGLES30_H
+
+
+#if !GFX_SUPPORTS_OPENGLES30 && !GFX_SUPPORTS_OPENGLES
+#error "Should not include GpuProgramsGLES30 on this platform"
+#endif
+
+
+#include "Runtime/GfxDevice/GpuProgram.h"
+#include "Runtime/GfxDevice/GfxDeviceTypes.h"
+#include "Runtime/GfxDevice/ChannelAssigns.h"
+#include "IncludesGLES30.h"
+#include "GpuProgramsGLES30_UniformCache.h"
+
+class ConstantBuffersGLES30;
+
+class GlslGpuProgramGLES30 : public GpuProgramGL
+{
+public:
+ GlslGpuProgramGLES30 (const std::string& source, CreateGpuProgramOutput& output);
+
+ ~GlslGpuProgramGLES30();
+
+ virtual void ApplyGpuProgram (const GpuProgramParameters& params, const UInt8* buffer) { Assert(!"Should not be used"); }
+
+ // Returns the permutation index used
+ int ApplyGpuProgramES30 (const GpuProgramParameters& params, const UInt8 *buffer);
+
+ static bool InitBinaryShadersSupport();
+
+
+ UniformCacheGLES30 m_UniformCache[kFogModeCount];
+
+ static bool CompileGlslShader(GLShaderID shader, const char* source);
+ int GetGLProgram (FogMode fog, GpuProgramParameters& outParams, ChannelAssigns& channels);
+
+private:
+
+ static void FillParams (unsigned int programID, GpuProgramParameters& params, PropertyNamesSet* outNames);
+
+ bool Create (const std::string& source, ChannelAssigns& channels);
+
+ bool CompileProgram(unsigned index, const std::string& vprog, const std::string& fshader, ChannelAssigns& channels);
+
+private:
+ std::string m_VertexShaderSourceForFog;
+ GLShaderID m_GLSLVertexShader[kFogModeCount];
+ GLShaderID m_GLSLFragmentShader[kFogModeCount];
+ int m_FogColorIndex[kFogModeCount];
+ int m_FogParamsIndex[kFogModeCount];
+ bool m_FogFailed[kFogModeCount];
+
+ static std::string _CachePath;
+ static glGetProgramBinaryOESFunc _glGetProgramBinaryOES;
+ static glProgramBinaryOESFunc _glProgramBinaryOES;
+};
+
+
+class FixedFunctionProgramGLES30
+{
+public:
+ static const ShaderLab::FastPropertyName kSLPropTransformBlock;
+ static const ShaderLab::FastPropertyName kSLPropUVTransformBlock;
+
+public:
+ FixedFunctionProgramGLES30(GLShaderID vertexShader, GLShaderID fragmentShader);
+ ~FixedFunctionProgramGLES30();
+
+ void ApplyFFGpuProgram(const BuiltinShaderParamValues& values, ConstantBuffersGLES30& cbs) const;
+
+ const BuiltinShaderParamIndices& GetBuiltinParams() const { return m_Params.GetBuiltinParams(); }
+ const GpuProgramParameters::ConstantBufferList& GetConstantBuffers() const { return m_Params.GetConstantBuffers(); }
+
+ mutable UniformCacheGLES30 m_UniformCache;
+
+protected:
+ GLShaderID Create(GLShaderID vertexShader, GLShaderID fragmentShader);
+
+private:
+ GLShaderID m_GLSLProgram;
+ GLShaderID m_GLSLVertexShader, m_GLSLFragmentShader;
+
+ GpuProgramParameters m_Params;
+};
+
+
+#endif