mirror of https://github.com/PCSX2/pcsx2.git
gsdx ogl: emulate GL_ARB_draw_buffers_blend and GL_ARB_viewport_array
New functions only set the parameter to a single buffer whereas old function set all buffers
This commit is contained in:
parent
4065730e36
commit
cd9ee3c468
|
@ -151,6 +151,28 @@ PFNGLCREATEPROGRAMPIPELINESPROC glCreateProgramPipelines = NUL
|
||||||
PFNGLCLIPCONTROLPROC glClipControl = NULL;
|
PFNGLCLIPCONTROLPROC glClipControl = NULL;
|
||||||
PFNGLTEXTUREBARRIERPROC glTextureBarrier = NULL;
|
PFNGLTEXTUREBARRIERPROC glTextureBarrier = NULL;
|
||||||
|
|
||||||
|
namespace ReplaceGL {
|
||||||
|
void APIENTRY BlendEquationSeparateiARB(GLuint buf, GLenum modeRGB, GLenum modeAlpha)
|
||||||
|
{
|
||||||
|
glBlendEquationSeparate(modeRGB, modeAlpha);
|
||||||
|
}
|
||||||
|
|
||||||
|
void APIENTRY BlendFuncSeparateiARB(GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha)
|
||||||
|
{
|
||||||
|
glBlendFuncSeparate(srcRGB, dstRGB, srcAlpha, dstAlpha);
|
||||||
|
}
|
||||||
|
|
||||||
|
void APIENTRY ScissorIndexed(GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height)
|
||||||
|
{
|
||||||
|
glScissor(left, bottom, width, height);
|
||||||
|
}
|
||||||
|
|
||||||
|
void APIENTRY ViewportIndexedf(GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h)
|
||||||
|
{
|
||||||
|
glViewport(x, y, w, h);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
namespace GLLoader {
|
namespace GLLoader {
|
||||||
|
|
||||||
bool fglrx_buggy_driver = false;
|
bool fglrx_buggy_driver = false;
|
||||||
|
@ -315,6 +337,18 @@ namespace GLLoader {
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
if (!found_GL_ARB_viewport_array) {
|
||||||
|
fprintf(stderr, "GL_ARB_viewport_array: not supported ! function pointer will be replaced\n");
|
||||||
|
glScissorIndexed = ReplaceGL::ScissorIndexed;
|
||||||
|
glViewportIndexedf = ReplaceGL::ViewportIndexedf;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!found_GL_ARB_draw_buffers_blend) {
|
||||||
|
fprintf(stderr, "GL_ARB_draw_buffers_blend: not supported ! function pointer will be replaced\n");
|
||||||
|
glBlendFuncSeparateiARB = ReplaceGL::BlendFuncSeparateiARB;
|
||||||
|
glBlendEquationSeparateiARB = ReplaceGL::BlendEquationSeparateiARB;
|
||||||
|
}
|
||||||
|
|
||||||
fprintf(stdout, "\n");
|
fprintf(stdout, "\n");
|
||||||
|
|
||||||
return status;
|
return status;
|
||||||
|
|
|
@ -1455,10 +1455,7 @@ void GSDeviceOGL::OMSetBlendState(uint8 blend_index, uint8 blend_factor, bool is
|
||||||
|
|
||||||
if (GLState::eq_RGB != b.op) {
|
if (GLState::eq_RGB != b.op) {
|
||||||
GLState::eq_RGB = b.op;
|
GLState::eq_RGB = b.op;
|
||||||
if (glBlendEquationSeparateiARB)
|
|
||||||
glBlendEquationSeparateiARB(0, b.op, GL_FUNC_ADD);
|
glBlendEquationSeparateiARB(0, b.op, GL_FUNC_ADD);
|
||||||
else
|
|
||||||
glBlendEquationSeparate(b.op, GL_FUNC_ADD);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (GLState::f_sRGB != b.src || GLState::f_dRGB != b.dst) {
|
if (GLState::f_sRGB != b.src || GLState::f_dRGB != b.dst) {
|
||||||
|
@ -1480,10 +1477,7 @@ void GSDeviceOGL::OMSetBlendState(uint8 blend_index, uint8 blend_factor, bool is
|
||||||
}
|
}
|
||||||
// AMD DRIVER SUCK
|
// AMD DRIVER SUCK
|
||||||
|
|
||||||
if (glBlendFuncSeparateiARB)
|
|
||||||
glBlendFuncSeparateiARB(0, src, dst, GL_ONE, GL_ZERO);
|
glBlendFuncSeparateiARB(0, src, dst, GL_ONE, GL_ZERO);
|
||||||
else
|
|
||||||
glBlendFuncSeparate(src, dst, GL_ONE, GL_ZERO);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
Loading…
Reference in New Issue