mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 06:48:12 +00:00

This is based mostly on Fabian "ryg" Giesen's 2011 blog series "A trip through the Graphics Pipeline" and Scratchapixel's "Rasterization: a Practical Implementation". The rasterizer processes triangles in grid aligned 16x16 pixel blocks, calculates barycentric coordinates and edge derivatives and interpolates bilinearly across each block. This will theoretically allow for better utilization of modern processor features such as SMT and SIMD, as opposed to a classic scanline based triangle rasterizer. This serves as a starting point to get something on the screen. In the future we might look into properly pipelining the main loop to make the rasterizer more flexible, enabling us to enable/disable certain features at the block rather than the pixel level.
56 lines
1,019 B
C++
56 lines
1,019 B
C++
/*
|
|
* Copyright (c) 2021, Jesse Buhagiar <jooster669@gmail.com>
|
|
* 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 glEnable(GLenum cap)
|
|
{
|
|
g_gl_context->gl_enable(cap);
|
|
}
|
|
|
|
void glDisable(GLenum cap)
|
|
{
|
|
g_gl_context->gl_disable(cap);
|
|
}
|
|
|
|
void glFrontFace(GLenum mode)
|
|
{
|
|
g_gl_context->gl_front_face(mode);
|
|
}
|
|
|
|
void glCullFace(GLenum mode)
|
|
{
|
|
g_gl_context->gl_cull_face(mode);
|
|
}
|
|
|
|
void glClear(GLbitfield mask)
|
|
{
|
|
g_gl_context->gl_clear(mask);
|
|
}
|
|
|
|
void glClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)
|
|
{
|
|
g_gl_context->gl_clear_color(red, green, blue, alpha);
|
|
}
|
|
|
|
GLubyte* glGetString(GLenum name)
|
|
{
|
|
return g_gl_context->gl_get_string(name);
|
|
}
|
|
|
|
void glViewport(GLint x, GLint y, GLsizei width, GLsizei height)
|
|
{
|
|
g_gl_context->gl_viewport(x, y, width, height);
|
|
}
|
|
|
|
GLenum glGetError()
|
|
{
|
|
return g_gl_context->gl_get_error();
|
|
}
|