mirror of
https://github.com/blawar/GLideN64.git
synced 2024-07-07 03:13:49 +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);
|
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)
|
void Context::setBlendColor(f32 _red, f32 _green, f32 _blue, f32 _alpha)
|
||||||
{
|
{
|
||||||
m_impl->setBlendColor(_red, _green, _blue, _alpha);
|
m_impl->setBlendColor(_red, _green, _blue, _alpha);
|
||||||
|
|
|
@ -69,6 +69,8 @@ namespace graphics {
|
||||||
|
|
||||||
void setBlending(BlendParam _sfactor, BlendParam _dfactor);
|
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 setBlendColor(f32 _red, f32 _green, f32 _blue, f32 _alpha);
|
||||||
|
|
||||||
void clearColorBuffer(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 setViewport(s32 _x, s32 _y, s32 _width, s32 _height) = 0;
|
||||||
virtual void setScissor(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 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 setBlendColor(f32 _red, f32 _green, f32 _blue, f32 _alpha) = 0;
|
||||||
virtual void clearColorBuffer(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;
|
virtual void clearDepthBuffer() = 0;
|
||||||
|
|
|
@ -62,6 +62,7 @@ static void* IOSGLGetProcAddress (const char *name)
|
||||||
|
|
||||||
//GL Functions
|
//GL Functions
|
||||||
PFNGLBLENDFUNCPROC ptrBlendFunc;
|
PFNGLBLENDFUNCPROC ptrBlendFunc;
|
||||||
|
PFNGLBLENDFUNCSEPARATEPROC ptrBlendFuncSeparate;
|
||||||
PFNGLPIXELSTOREIPROC ptrPixelStorei;
|
PFNGLPIXELSTOREIPROC ptrPixelStorei;
|
||||||
PFNGLCLEARCOLORPROC ptrClearColor;
|
PFNGLCLEARCOLORPROC ptrClearColor;
|
||||||
PFNGLCULLFACEPROC ptrCullFace;
|
PFNGLCULLFACEPROC ptrCullFace;
|
||||||
|
@ -388,4 +389,7 @@ void initGLFunctions()
|
||||||
|
|
||||||
GL_GET_PROC_ADR(PFNGLEGLIMAGETARGETTEXTURE2DOESPROC, EGLImageTargetTexture2DOES);
|
GL_GET_PROC_ADR(PFNGLEGLIMAGETARGETTEXTURE2DOESPROC, EGLImageTargetTexture2DOES);
|
||||||
GL_GET_PROC_ADR(PFNGLEGLIMAGETARGETRENDERBUFFERSTORAGEOESPROC, EGLImageTargetRenderbufferStorageOES);
|
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
|
#endif
|
||||||
|
|
||||||
extern PFNGLBLENDFUNCPROC ptrBlendFunc;
|
extern PFNGLBLENDFUNCPROC ptrBlendFunc;
|
||||||
|
extern PFNGLBLENDFUNCSEPARATEPROC ptrBlendFuncSeparate;
|
||||||
extern PFNGLPIXELSTOREIPROC ptrPixelStorei;
|
extern PFNGLPIXELSTOREIPROC ptrPixelStorei;
|
||||||
extern PFNGLCLEARCOLORPROC ptrClearColor;
|
extern PFNGLCLEARCOLORPROC ptrClearColor;
|
||||||
extern PFNGLCULLFACEPROC ptrCullFace;
|
extern PFNGLCULLFACEPROC ptrCullFace;
|
||||||
|
@ -203,6 +204,7 @@ void initGLFunctions();
|
||||||
|
|
||||||
#define glGetError(...) opengl::FunctionWrapper::wrGetError(__VA_ARGS__)
|
#define glGetError(...) opengl::FunctionWrapper::wrGetError(__VA_ARGS__)
|
||||||
#define glBlendFunc(...) opengl::FunctionWrapper::wrBlendFunc(__VA_ARGS__)
|
#define glBlendFunc(...) opengl::FunctionWrapper::wrBlendFunc(__VA_ARGS__)
|
||||||
|
#define glBlendFuncSeparate(...) opengl::FunctionWrapper::wrBlendFuncSeparate(__VA_ARGS__)
|
||||||
#define glPixelStorei(...) opengl::FunctionWrapper::wrPixelStorei(__VA_ARGS__)
|
#define glPixelStorei(...) opengl::FunctionWrapper::wrPixelStorei(__VA_ARGS__)
|
||||||
#define glClearColor(...) opengl::FunctionWrapper::wrClearColor(__VA_ARGS__)
|
#define glClearColor(...) opengl::FunctionWrapper::wrClearColor(__VA_ARGS__)
|
||||||
#define glCullFace(...) opengl::FunctionWrapper::wrCullFace(__VA_ARGS__)
|
#define glCullFace(...) opengl::FunctionWrapper::wrCullFace(__VA_ARGS__)
|
||||||
|
|
|
@ -58,6 +58,42 @@ private:
|
||||||
GLenum m_dfactor;
|
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
|
class GlPixelStoreiCommand : public OpenGlCommand
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
|
@ -144,6 +144,15 @@ namespace opengl {
|
||||||
ptrBlendFunc(sfactor, dfactor);
|
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)
|
void FunctionWrapper::wrPixelStorei(GLenum pname, GLint param)
|
||||||
{
|
{
|
||||||
if (m_threaded_wrapper)
|
if (m_threaded_wrapper)
|
||||||
|
|
|
@ -59,6 +59,7 @@ namespace opengl {
|
||||||
static void setThreadedMode(u32 _threaded);
|
static void setThreadedMode(u32 _threaded);
|
||||||
|
|
||||||
static void wrBlendFunc(GLenum sfactor, GLenum dfactor);
|
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 wrPixelStorei(GLenum pname, GLint param);
|
||||||
static void wrClearColor(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
|
static void wrClearColor(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
|
||||||
static void wrCullFace(GLenum mode);
|
static void wrCullFace(GLenum mode);
|
||||||
|
|
|
@ -119,6 +119,15 @@ void CachedBlending::setBlending(Parameter _sfactor, Parameter _dfactor)
|
||||||
glBlendFunc(GLenum(_sfactor), GLenum(_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-------------*/
|
/*---------------CachedBlendColor-------------*/
|
||||||
|
|
||||||
void CachedBlendColor::setBlendColor(f32 _red, f32 _green, f32 _blue, f32 _alpha)
|
void CachedBlendColor::setBlendColor(f32 _red, f32 _green, f32 _blue, f32 _alpha)
|
||||||
|
@ -269,6 +278,12 @@ CachedBlending * CachedFunctions::getCachedBlending()
|
||||||
return &m_blending;
|
return &m_blending;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CachedBlendingSeparate * CachedFunctions::getCachedBlendingSeparate()
|
||||||
|
{
|
||||||
|
return &m_blendingseparate;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
CachedBlendColor * CachedFunctions::getCachedBlendColor()
|
CachedBlendColor * CachedFunctions::getCachedBlendColor()
|
||||||
{
|
{
|
||||||
return &m_blendColor;
|
return &m_blendColor;
|
||||||
|
|
|
@ -170,6 +170,13 @@ namespace opengl {
|
||||||
void setBlending(graphics::Parameter _sfactor, graphics::Parameter _dfactor);
|
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
|
class CachedBlendColor : public Cached4
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
@ -247,6 +254,8 @@ namespace opengl {
|
||||||
|
|
||||||
CachedBlending * getCachedBlending();
|
CachedBlending * getCachedBlending();
|
||||||
|
|
||||||
|
CachedBlendingSeparate * getCachedBlendingSeparate();
|
||||||
|
|
||||||
CachedBlendColor * getCachedBlendColor();
|
CachedBlendColor * getCachedBlendColor();
|
||||||
|
|
||||||
CachedClearColor * getCachedClearColor();
|
CachedClearColor * getCachedClearColor();
|
||||||
|
@ -274,6 +283,7 @@ namespace opengl {
|
||||||
CachedViewport m_viewport;
|
CachedViewport m_viewport;
|
||||||
CachedScissor m_scissor;
|
CachedScissor m_scissor;
|
||||||
CachedBlending m_blending;
|
CachedBlending m_blending;
|
||||||
|
CachedBlendingSeparate m_blendingseparate;
|
||||||
CachedBlendColor m_blendColor;
|
CachedBlendColor m_blendColor;
|
||||||
CachedClearColor m_clearColor;
|
CachedClearColor m_clearColor;
|
||||||
CachedVertexAttribArray m_attribArray;
|
CachedVertexAttribArray m_attribArray;
|
||||||
|
|
|
@ -158,6 +158,11 @@ void ContextImpl::setBlending(graphics::BlendParam _sfactor, graphics::BlendPara
|
||||||
m_cachedFunctions->getCachedBlending()->setBlending(_sfactor, _dfactor);
|
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)
|
void ContextImpl::setBlendColor(f32 _red, f32 _green, f32 _blue, f32 _alpha)
|
||||||
{
|
{
|
||||||
m_cachedFunctions->getCachedBlendColor()->setBlendColor(_red, _green, _blue, _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 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 setBlendColor(f32 _red, f32 _green, f32 _blue, f32 _alpha) override;
|
||||||
|
|
||||||
void clearColorBuffer(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