mirror of
https://github.com/blawar/GLideN64.git
synced 2024-07-02 09:03:37 +00:00
Make glBlendFuncSeparate() available
This commit is contained in:
parent
4c8a40c6d8
commit
3df3df9964
|
@ -100,6 +100,11 @@ void Context::setBlending(BlendParam _sfactor, BlendParam _dfactor)
|
|||
m_impl->setBlending(_sfactor, _dfactor);
|
||||
}
|
||||
|
||||
void graphics::Context::setBlendingSeparate(BlendParam _sfactorcolor, BlendParam _dfactorcolor, BlendParam _sfactoralpha, BlendParam _dfactoralpha)
|
||||
{
|
||||
m_impl->setBlendingSeparate(_sfactorcolor, _dfactorcolor, _sfactoralpha, _dfactoralpha);
|
||||
}
|
||||
|
||||
void Context::setBlendColor(f32 _red, f32 _green, f32 _blue, f32 _alpha)
|
||||
{
|
||||
m_impl->setBlendColor(_red, _green, _blue, _alpha);
|
||||
|
|
|
@ -69,6 +69,8 @@ namespace graphics {
|
|||
|
||||
void setBlending(BlendParam _sfactor, BlendParam _dfactor);
|
||||
|
||||
void setBlendingSeparate(BlendParam _sfactorcolor, BlendParam _dfactorcolor, BlendParam _sfactoralpha, BlendParam _dfactoralpha);
|
||||
|
||||
void setBlendColor(f32 _red, f32 _green, f32 _blue, f32 _alpha);
|
||||
|
||||
void clearColorBuffer(f32 _red, f32 _green, f32 _blue, f32 _alpha);
|
||||
|
|
|
@ -22,6 +22,7 @@ namespace graphics {
|
|||
virtual void setViewport(s32 _x, s32 _y, s32 _width, s32 _height) = 0;
|
||||
virtual void setScissor(s32 _x, s32 _y, s32 _width, s32 _height) = 0;
|
||||
virtual void setBlending(BlendParam _sfactor, BlendParam _dfactor) = 0;
|
||||
virtual void setBlendingSeparate(BlendParam _sfactorcolor, BlendParam _dfactorcolor, BlendParam _sfactoralpha, BlendParam _dfactoralpha) = 0;
|
||||
virtual void setBlendColor(f32 _red, f32 _green, f32 _blue, f32 _alpha) = 0;
|
||||
virtual void clearColorBuffer(f32 _red, f32 _green, f32 _blue, f32 _alpha) = 0;
|
||||
virtual void clearDepthBuffer() = 0;
|
||||
|
|
|
@ -62,6 +62,7 @@ static void* IOSGLGetProcAddress (const char *name)
|
|||
|
||||
//GL Functions
|
||||
PFNGLBLENDFUNCPROC ptrBlendFunc;
|
||||
PFNGLBLENDFUNCSEPARATEPROC ptrBlendFuncSeparate;
|
||||
PFNGLPIXELSTOREIPROC ptrPixelStorei;
|
||||
PFNGLCLEARCOLORPROC ptrClearColor;
|
||||
PFNGLCULLFACEPROC ptrCullFace;
|
||||
|
@ -388,4 +389,7 @@ void initGLFunctions()
|
|||
|
||||
GL_GET_PROC_ADR(PFNGLEGLIMAGETARGETTEXTURE2DOESPROC, EGLImageTargetTexture2DOES);
|
||||
GL_GET_PROC_ADR(PFNGLEGLIMAGETARGETRENDERBUFFERSTORAGEOESPROC, EGLImageTargetRenderbufferStorageOES);
|
||||
|
||||
GL_GET_PROC_ADR(PFNGLBLENDFUNCSEPARATEPROC, BlendFuncSeparate);
|
||||
|
||||
}
|
||||
|
|
|
@ -52,6 +52,7 @@ typedef void (APIENTRYP PFNGLCOPYTEXIMAGE2DPROC) (GLenum target, GLint level, GL
|
|||
#endif
|
||||
|
||||
extern PFNGLBLENDFUNCPROC ptrBlendFunc;
|
||||
extern PFNGLBLENDFUNCSEPARATEPROC ptrBlendFuncSeparate;
|
||||
extern PFNGLPIXELSTOREIPROC ptrPixelStorei;
|
||||
extern PFNGLCLEARCOLORPROC ptrClearColor;
|
||||
extern PFNGLCULLFACEPROC ptrCullFace;
|
||||
|
@ -203,6 +204,7 @@ void initGLFunctions();
|
|||
|
||||
#define glGetError(...) opengl::FunctionWrapper::wrGetError(__VA_ARGS__)
|
||||
#define glBlendFunc(...) opengl::FunctionWrapper::wrBlendFunc(__VA_ARGS__)
|
||||
#define glBlendFuncSeparate(...) opengl::FunctionWrapper::wrBlendFuncSeparate(__VA_ARGS__)
|
||||
#define glPixelStorei(...) opengl::FunctionWrapper::wrPixelStorei(__VA_ARGS__)
|
||||
#define glClearColor(...) opengl::FunctionWrapper::wrClearColor(__VA_ARGS__)
|
||||
#define glCullFace(...) opengl::FunctionWrapper::wrCullFace(__VA_ARGS__)
|
||||
|
|
|
@ -58,6 +58,42 @@ private:
|
|||
GLenum m_dfactor;
|
||||
};
|
||||
|
||||
class GlBlendFuncSeparateCommand : public OpenGlCommand
|
||||
{
|
||||
public:
|
||||
GlBlendFuncSeparateCommand() :
|
||||
OpenGlCommand(false, false, "glBlendFuncSeparate")
|
||||
{
|
||||
}
|
||||
|
||||
static std::shared_ptr<OpenGlCommand> get(GLenum sfactorcolor, GLenum dfactorcolor, GLenum sfactoralpha, GLenum dfactoralpha)
|
||||
{
|
||||
static int poolId = OpenGlCommandPool::get().getNextAvailablePool();
|
||||
auto ptr = getFromPool<GlBlendFuncSeparateCommand>(poolId);
|
||||
ptr->set(sfactorcolor, dfactorcolor, sfactoralpha, dfactoralpha);
|
||||
return ptr;
|
||||
}
|
||||
|
||||
void commandToExecute() override
|
||||
{
|
||||
ptrBlendFuncSeparate(m_sfactorcolor, m_dfactorcolor, m_sfactoralpha, m_dfactoralpha);
|
||||
}
|
||||
private:
|
||||
void set(GLenum sfactorcolor, GLenum dfactorcolor, GLenum sfactoralpha, GLenum dfactoralpha)
|
||||
{
|
||||
m_sfactorcolor = sfactorcolor;
|
||||
m_dfactorcolor = dfactorcolor;
|
||||
m_sfactoralpha = sfactoralpha;
|
||||
m_dfactoralpha = dfactoralpha;
|
||||
}
|
||||
|
||||
GLenum m_sfactorcolor;
|
||||
GLenum m_dfactorcolor;
|
||||
GLenum m_sfactoralpha;
|
||||
GLenum m_dfactoralpha;
|
||||
};
|
||||
|
||||
|
||||
class GlPixelStoreiCommand : public OpenGlCommand
|
||||
{
|
||||
public:
|
||||
|
|
|
@ -144,6 +144,15 @@ namespace opengl {
|
|||
ptrBlendFunc(sfactor, dfactor);
|
||||
}
|
||||
|
||||
void FunctionWrapper::wrBlendFuncSeparate(GLenum sfactorcolor, GLenum dfactorcolor, GLenum sfactoralpha, GLenum dfactoralpha)
|
||||
{
|
||||
if (m_threaded_wrapper)
|
||||
executeCommand(GlBlendFuncSeparateCommand::get(sfactorcolor, dfactorcolor, sfactoralpha, dfactoralpha));
|
||||
else
|
||||
ptrBlendFuncSeparate(sfactorcolor, dfactorcolor, sfactoralpha, dfactoralpha);
|
||||
}
|
||||
|
||||
|
||||
void FunctionWrapper::wrPixelStorei(GLenum pname, GLint param)
|
||||
{
|
||||
if (m_threaded_wrapper)
|
||||
|
|
|
@ -59,6 +59,7 @@ namespace opengl {
|
|||
static void setThreadedMode(u32 _threaded);
|
||||
|
||||
static void wrBlendFunc(GLenum sfactor, GLenum dfactor);
|
||||
static void wrBlendFuncSeparate(GLenum sfactorcolor, GLenum dfactorcolor, GLenum sfactoralpha, GLenum dfactoralpha);
|
||||
static void wrPixelStorei(GLenum pname, GLint param);
|
||||
static void wrClearColor(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
|
||||
static void wrCullFace(GLenum mode);
|
||||
|
|
|
@ -119,6 +119,15 @@ void CachedBlending::setBlending(Parameter _sfactor, Parameter _dfactor)
|
|||
glBlendFunc(GLenum(_sfactor), GLenum(_dfactor));
|
||||
}
|
||||
|
||||
/*---------------CachedBlendingSeparate-------------*/
|
||||
|
||||
void CachedBlendingSeparate::setBlendingSeparate(Parameter _sfactorcolor, Parameter _dfactorcolor, Parameter _sfactoralpha, Parameter _dfactoralpha)
|
||||
{
|
||||
if (update(_sfactorcolor, _dfactorcolor, _sfactoralpha, _dfactoralpha))
|
||||
glBlendFuncSeparate(GLenum(_sfactorcolor), GLenum(_dfactorcolor), GLenum(_sfactoralpha), GLenum(_dfactoralpha));
|
||||
}
|
||||
|
||||
|
||||
/*---------------CachedBlendColor-------------*/
|
||||
|
||||
void CachedBlendColor::setBlendColor(f32 _red, f32 _green, f32 _blue, f32 _alpha)
|
||||
|
@ -269,6 +278,12 @@ CachedBlending * CachedFunctions::getCachedBlending()
|
|||
return &m_blending;
|
||||
}
|
||||
|
||||
CachedBlendingSeparate * CachedFunctions::getCachedBlendingSeparate()
|
||||
{
|
||||
return &m_blendingseparate;
|
||||
}
|
||||
|
||||
|
||||
CachedBlendColor * CachedFunctions::getCachedBlendColor()
|
||||
{
|
||||
return &m_blendColor;
|
||||
|
|
|
@ -170,6 +170,13 @@ namespace opengl {
|
|||
void setBlending(graphics::Parameter _sfactor, graphics::Parameter _dfactor);
|
||||
};
|
||||
|
||||
class CachedBlendingSeparate : public Cached4 //<graphics::Parameter, graphics::Parameter, graphics::Parameter, graphics::Parameter>
|
||||
{
|
||||
public:
|
||||
void setBlendingSeparate(graphics::Parameter _sfactorcolor, graphics::Parameter _dfactorcolor, graphics::Parameter _sfactoralpha, graphics::Parameter _dfactoralpha);
|
||||
};
|
||||
|
||||
|
||||
class CachedBlendColor : public Cached4
|
||||
{
|
||||
public:
|
||||
|
@ -246,6 +253,8 @@ namespace opengl {
|
|||
CachedScissor * getCachedScissor();
|
||||
|
||||
CachedBlending * getCachedBlending();
|
||||
|
||||
CachedBlendingSeparate * getCachedBlendingSeparate();
|
||||
|
||||
CachedBlendColor * getCachedBlendColor();
|
||||
|
||||
|
@ -274,6 +283,7 @@ namespace opengl {
|
|||
CachedViewport m_viewport;
|
||||
CachedScissor m_scissor;
|
||||
CachedBlending m_blending;
|
||||
CachedBlendingSeparate m_blendingseparate;
|
||||
CachedBlendColor m_blendColor;
|
||||
CachedClearColor m_clearColor;
|
||||
CachedVertexAttribArray m_attribArray;
|
||||
|
|
|
@ -158,6 +158,11 @@ void ContextImpl::setBlending(graphics::BlendParam _sfactor, graphics::BlendPara
|
|||
m_cachedFunctions->getCachedBlending()->setBlending(_sfactor, _dfactor);
|
||||
}
|
||||
|
||||
void ContextImpl::setBlendingSeparate(graphics::BlendParam _sfactorcolor, graphics::BlendParam _dfactorcolor, graphics::BlendParam _sfactoralpha, graphics::BlendParam _dfactoralpha)
|
||||
{
|
||||
m_cachedFunctions->getCachedBlendingSeparate()->setBlendingSeparate(_sfactorcolor, _dfactorcolor, _sfactoralpha, _dfactoralpha);
|
||||
}
|
||||
|
||||
void ContextImpl::setBlendColor(f32 _red, f32 _green, f32 _blue, f32 _alpha)
|
||||
{
|
||||
m_cachedFunctions->getCachedBlendColor()->setBlendColor(_red, _green, _blue, _alpha);
|
||||
|
|
|
@ -44,6 +44,8 @@ namespace opengl {
|
|||
|
||||
void setBlending(graphics::BlendParam _sfactor, graphics::BlendParam _dfactor) override;
|
||||
|
||||
void setBlendingSeparate(graphics::BlendParam _sfactorcolor, graphics::BlendParam _dfactorcolor, graphics::BlendParam _sfactoralpha, graphics::BlendParam _dfactoralpha) override;
|
||||
|
||||
void setBlendColor(f32 _red, f32 _green, f32 _blue, f32 _alpha) override;
|
||||
|
||||
void clearColorBuffer(f32 _red, f32 _green, f32 _blue, f32 _alpha) override;
|
||||
|
|
Loading…
Reference in New Issue
Block a user