mirror of
https://github.com/RGBCube/serenity
synced 2025-07-27 16:07:46 +00:00
LibGL: Add defines and stubs for glBlendFunc()
This commit is contained in:
parent
1b358d3b94
commit
279737642c
6 changed files with 92 additions and 0 deletions
|
@ -1,5 +1,6 @@
|
|||
set(SOURCES
|
||||
Clipper.cpp
|
||||
GLBlend.cpp
|
||||
GLColor.cpp
|
||||
GLContext.cpp
|
||||
GLLists.cpp
|
||||
|
|
|
@ -42,6 +42,19 @@ extern "C" {
|
|||
#define GL_RENDERER 0x1F01
|
||||
#define GL_VERSION 0x1F02
|
||||
|
||||
/* Blend factors */
|
||||
#define GL_ZERO 0
|
||||
#define GL_ONE 1
|
||||
#define GL_SRC_COLOR 0x0300
|
||||
#define GL_ONE_MINUS_SRC_COLOR 0x0301
|
||||
#define GL_SRC_ALPHA 0x0302
|
||||
#define GL_ONE_MINUS_SRC_ALPHA 0x0303
|
||||
#define GL_DST_ALPHA 0x0304
|
||||
#define GL_ONE_MINUS_DST_ALPHA 0x0305
|
||||
#define GL_DST_COLOR 0x0306
|
||||
#define GL_ONE_MINUS_DST_COLOR 0x0307
|
||||
#define GL_SRC_ALPHA_SATURATE 0x0308
|
||||
|
||||
// Culled face side
|
||||
#define GL_FRONT 0x0404
|
||||
#define GL_BACK 0x0405
|
||||
|
@ -65,6 +78,12 @@ extern "C" {
|
|||
#define GL_COMPILE 0x1300
|
||||
#define GL_COMPILE_AND_EXECUTE 0x1301
|
||||
|
||||
// More blend factors
|
||||
#define GL_CONSTANT_COLOR 0x8001
|
||||
#define GL_ONE_MINUS_CONSTANT_COLOR 0x8002
|
||||
#define GL_CONSTANT_ALPHA 0x8003
|
||||
#define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004
|
||||
|
||||
//
|
||||
// OpenGL typedefs
|
||||
//
|
||||
|
@ -126,6 +145,7 @@ GLAPI void glEndList(void);
|
|||
GLAPI void glNewList(GLuint list, GLenum mode);
|
||||
GLAPI void glFlush();
|
||||
GLAPI void glFinish();
|
||||
GLAPI void glBlendFunc(GLenum sfactor, GLenum dfactor);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
15
Userland/Libraries/LibGL/GLBlend.cpp
Normal file
15
Userland/Libraries/LibGL/GLBlend.cpp
Normal file
|
@ -0,0 +1,15 @@
|
|||
/*
|
||||
* Copyright (c) 2021, Stephan Unverwerth <s.unverwerth@gmx.de>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
||||
#include "GL/gl.h"
|
||||
#include "GLContext.h"
|
||||
|
||||
extern GL::GLContext* g_gl_context;
|
||||
|
||||
void glBlendFunc(GLenum sfactor, GLenum dfactor)
|
||||
{
|
||||
return g_gl_context->gl_blend_func(sfactor, dfactor);
|
||||
}
|
|
@ -49,6 +49,7 @@ public:
|
|||
virtual void gl_new_list(GLuint list, GLenum mode) = 0;
|
||||
virtual void gl_flush() = 0;
|
||||
virtual void gl_finish() = 0;
|
||||
virtual void gl_blend_func(GLenum src_factor, GLenum dst_factor) = 0;
|
||||
|
||||
virtual void present() = 0;
|
||||
};
|
||||
|
|
|
@ -859,6 +859,57 @@ void SoftwareGLContext::gl_finish()
|
|||
// No-op since SoftwareGLContext is completely synchronous at the moment
|
||||
}
|
||||
|
||||
void SoftwareGLContext::gl_blend_func(GLenum src_factor, GLenum dst_factor)
|
||||
{
|
||||
if (m_in_draw_state) {
|
||||
m_error = GL_INVALID_OPERATION;
|
||||
return;
|
||||
}
|
||||
|
||||
// FIXME: The list of allowed enums differs between API versions
|
||||
// This was taken from the 2.0 spec on https://docs.gl/gl2/glBlendFunc
|
||||
|
||||
if (!(src_factor == GL_ZERO
|
||||
|| src_factor == GL_ONE
|
||||
|| src_factor == GL_SRC_COLOR
|
||||
|| src_factor == GL_ONE_MINUS_SRC_COLOR
|
||||
|| src_factor == GL_DST_COLOR
|
||||
|| src_factor == GL_ONE_MINUS_DST_COLOR
|
||||
|| src_factor == GL_SRC_ALPHA
|
||||
|| src_factor == GL_ONE_MINUS_SRC_ALPHA
|
||||
|| src_factor == GL_DST_ALPHA
|
||||
|| src_factor == GL_ONE_MINUS_DST_ALPHA
|
||||
|| src_factor == GL_CONSTANT_COLOR
|
||||
|| src_factor == GL_ONE_MINUS_CONSTANT_COLOR
|
||||
|| src_factor == GL_CONSTANT_ALPHA
|
||||
|| src_factor == GL_ONE_MINUS_CONSTANT_ALPHA
|
||||
|| src_factor == GL_SRC_ALPHA_SATURATE)) {
|
||||
m_error = GL_INVALID_ENUM;
|
||||
return;
|
||||
}
|
||||
|
||||
if (!(dst_factor == GL_ZERO
|
||||
|| dst_factor == GL_ONE
|
||||
|| dst_factor == GL_SRC_COLOR
|
||||
|| dst_factor == GL_ONE_MINUS_SRC_COLOR
|
||||
|| dst_factor == GL_DST_COLOR
|
||||
|| dst_factor == GL_ONE_MINUS_DST_COLOR
|
||||
|| dst_factor == GL_SRC_ALPHA
|
||||
|| dst_factor == GL_ONE_MINUS_SRC_ALPHA
|
||||
|| dst_factor == GL_DST_ALPHA
|
||||
|| dst_factor == GL_ONE_MINUS_DST_ALPHA
|
||||
|| dst_factor == GL_CONSTANT_COLOR
|
||||
|| dst_factor == GL_ONE_MINUS_CONSTANT_COLOR
|
||||
|| dst_factor == GL_CONSTANT_ALPHA
|
||||
|| dst_factor == GL_ONE_MINUS_CONSTANT_ALPHA)) {
|
||||
m_error = GL_INVALID_ENUM;
|
||||
return;
|
||||
}
|
||||
|
||||
m_blend_source_factor = src_factor;
|
||||
m_blend_destination_factor = dst_factor;
|
||||
}
|
||||
|
||||
void SoftwareGLContext::present()
|
||||
{
|
||||
m_rasterizer.blit_to(*m_frontbuffer);
|
||||
|
|
|
@ -55,6 +55,7 @@ public:
|
|||
virtual void gl_new_list(GLuint list, GLenum mode) override;
|
||||
virtual void gl_flush() override;
|
||||
virtual void gl_finish() override;
|
||||
virtual void gl_blend_func(GLenum src_factor, GLenum dst_factor) override;
|
||||
|
||||
virtual void present() override;
|
||||
|
||||
|
@ -105,6 +106,9 @@ private:
|
|||
GLenum m_front_face = GL_CCW;
|
||||
GLenum m_culled_sides = GL_BACK;
|
||||
|
||||
GLenum m_blend_source_factor = GL_ONE;
|
||||
GLenum m_blend_destination_factor = GL_ZERO;
|
||||
|
||||
NonnullRefPtr<Gfx::Bitmap> m_frontbuffer;
|
||||
|
||||
Clipper m_clipper;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue