mirror of https://github.com/axmolengine/axmol.git
136 lines
4.1 KiB
C++
136 lines
4.1 KiB
C++
|
|
#ifndef __EFFEKSEERRENDERER_GL_SHADER_H__
|
|
#define __EFFEKSEERRENDERER_GL_SHADER_H__
|
|
|
|
//----------------------------------------------------------------------------------
|
|
// Include
|
|
//----------------------------------------------------------------------------------
|
|
#include "EffekseerRendererGL.DeviceObject.h"
|
|
#include "EffekseerRendererGL.RendererImplemented.h"
|
|
|
|
#include "../../EffekseerRendererCommon/EffekseerRenderer.ShaderBase.h"
|
|
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
//-----------------------------------------------------------------------------------
|
|
//
|
|
//-----------------------------------------------------------------------------------
|
|
namespace EffekseerRendererGL
|
|
{
|
|
|
|
using ShaderCodeView = Effekseer::StringView<char>;
|
|
|
|
const char* GetVertexShaderHeader(OpenGLDeviceType deviceType);
|
|
|
|
const char* GetFragmentShaderHeader(OpenGLDeviceType deviceType);
|
|
|
|
class Shader : public DeviceObject, public ::EffekseerRenderer::ShaderBase
|
|
{
|
|
private:
|
|
OpenGLDeviceType m_deviceType;
|
|
Backend::GraphicsDeviceRef graphicsDevice_;
|
|
Backend::ShaderRef shader_;
|
|
Backend::ShaderRef shaderOverride_;
|
|
Backend::VertexLayoutRef vertexLayout_;
|
|
|
|
int32_t m_vertexSize;
|
|
|
|
Backend::UniformBufferRef vertexConstantBuffer_;
|
|
Backend::UniformBufferRef pixelConstantBuffer_;
|
|
|
|
std::string name_;
|
|
|
|
Effekseer::CustomVector<GLint> attribs_;
|
|
|
|
bool isTransposeEnabled_ = false;
|
|
|
|
GLint baseInstance_ = -1;
|
|
|
|
Backend::ShaderRef& GetCurrentShader();
|
|
|
|
const Backend::ShaderRef& GetCurrentShader() const;
|
|
|
|
void AssignAttribs();
|
|
|
|
Shader(const Backend::GraphicsDeviceRef& graphicsDevice,
|
|
Backend::ShaderRef shader,
|
|
const char* name);
|
|
|
|
public:
|
|
virtual ~Shader() override = default;
|
|
|
|
static Shader* Create(const Backend::GraphicsDeviceRef& graphicsDevice,
|
|
Backend::ShaderRef shader,
|
|
const char* name);
|
|
|
|
static Shader* Create(const Backend::GraphicsDeviceRef& graphicsDevice, const Effekseer::CustomVector<Effekseer::StringView<char>>& vsCodes, const Effekseer::CustomVector<Effekseer::StringView<char>>& psCodes, Effekseer::Backend::UniformLayoutRef layout, const char* name)
|
|
{
|
|
auto shader = graphicsDevice->CreateShaderFromCodes(vsCodes, psCodes, layout).DownCast<Backend::Shader>();
|
|
return Create(graphicsDevice, shader, name);
|
|
}
|
|
|
|
static Shader* CreateWithHeader(const Backend::GraphicsDeviceRef& graphicsDevice, const Effekseer::StringView<char>& vsCode, const Effekseer::StringView<char>& psCode, Effekseer::Backend::UniformLayoutRef layout, const char* name)
|
|
{
|
|
|
|
auto shader = graphicsDevice->CreateShaderFromCodes(
|
|
{{GetVertexShaderHeader(graphicsDevice->GetDeviceType())}, vsCode},
|
|
{{GetFragmentShaderHeader(graphicsDevice->GetDeviceType())}, psCode},
|
|
layout)
|
|
.DownCast<Backend::Shader>();
|
|
return Create(graphicsDevice, shader, name);
|
|
}
|
|
|
|
public:
|
|
virtual void OnLostDevice() override
|
|
{
|
|
}
|
|
virtual void OnResetDevice() override;
|
|
|
|
public:
|
|
void OverrideShader(::Effekseer::Backend::ShaderRef shader) override;
|
|
|
|
GLuint GetInterface() const;
|
|
|
|
void SetVertexLayout(Backend::VertexLayoutRef vertexLayout);
|
|
|
|
void BeginScene();
|
|
void EndScene();
|
|
void EnableAttribs();
|
|
void DisableAttribs();
|
|
|
|
void SetVertexConstantBufferSize(int32_t size) override;
|
|
void SetPixelConstantBufferSize(int32_t size) override;
|
|
|
|
void* GetVertexConstantBuffer() override
|
|
{
|
|
return vertexConstantBuffer_ != nullptr ? vertexConstantBuffer_->GetBuffer().data() : nullptr;
|
|
}
|
|
void* GetPixelConstantBuffer() override
|
|
{
|
|
return pixelConstantBuffer_ != nullptr ? pixelConstantBuffer_->GetBuffer().data() : nullptr;
|
|
}
|
|
|
|
void SetConstantBuffer() override;
|
|
|
|
GLint GetTextureSlot(int32_t index);
|
|
bool GetTextureSlotEnable(int32_t index);
|
|
|
|
void SetIsTransposeEnabled(bool isTransposeEnabled)
|
|
{
|
|
isTransposeEnabled_ = isTransposeEnabled;
|
|
}
|
|
|
|
bool IsValid() const;
|
|
};
|
|
|
|
//----------------------------------------------------------------------------------
|
|
//
|
|
//----------------------------------------------------------------------------------
|
|
} // namespace EffekseerRendererGL
|
|
|
|
//----------------------------------------------------------------------------------
|
|
//
|
|
//----------------------------------------------------------------------------------
|
|
#endif // __EFFEKSEERRENDERER_GL_SHADER_H__
|