Cemu/src/Cafe/HW/Latte/Renderer/OpenGL/RendererShaderGL.h

42 lines
1.2 KiB
C++

#pragma once
#include "Cafe/HW/Latte/Renderer/RendererShader.h"
#include "Common/GLInclude/GLInclude.h"
class RendererShaderGL : public RendererShader
{
public:
RendererShaderGL(ShaderType type, uint64 baseHash, uint64 auxHash, bool isGameShader, bool isGfxPackShader, const std::string& glslSource);
virtual ~RendererShaderGL();
void PreponeCompilation(bool isRenderThread) override;
bool IsCompiled() override;
bool WaitForCompiled() override;
GLuint GetProgram() const { cemu_assert_debug(m_isCompiled); return m_program; }
GLuint GetShaderObject() const { cemu_assert_debug(m_isCompiled); return m_shader_object; }
sint32 GetUniformLocation(const char* name) override;
void SetUniform2fv(sint32 location, void* data, sint32 count) override;
void SetUniform4iv(sint32 location, void* data, sint32 count) override;
static void ShaderCacheLoading_begin(uint64 cacheTitleId);
static void ShaderCacheLoading_end();
static void ShaderCacheLoading_Close();
private:
GLuint m_program;
GLuint m_shader_object;
bool loadBinary();
void storeBinary();
std::string m_glslSource;
bool m_shader_attached{ false };
bool m_isCompiled{ false };
static class FileCache* s_programBinaryCache;
};