gl-renderer: Move debug mode setup to dedicated func
This moves debug mode setup to a dedicated function because the addition of new modes made it bigger. Signed-off-by: Loïc Molinari <loic.molinari@collabora.com>
This commit is contained in:
parent
e512f5482d
commit
dbf408791c
@ -1373,6 +1373,66 @@ store_indices(size_t count,
|
|||||||
return strips[count][15];
|
return strips[count][15];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
set_debug_mode(struct gl_renderer *gr,
|
||||||
|
struct gl_shader_config *sconf,
|
||||||
|
const uint32_t *barycentrics,
|
||||||
|
bool opaque)
|
||||||
|
{
|
||||||
|
/* Debug mode tints indexed by gl_debug_mode enumeration. While tints
|
||||||
|
* are meant to be premultiplied, debug modes can have invalid colors in
|
||||||
|
* order to create visual effects. */
|
||||||
|
static const float tints[DEBUG_MODE_LAST][4] = {
|
||||||
|
{}, /* DEBUG_MODE_NONE */
|
||||||
|
{ 0.0f, 0.0f, 0.0f, 0.3f }, /* DEBUG_MODE_WIREFRAME */
|
||||||
|
{}, /* DEBUG_MODE_BATCHES */
|
||||||
|
{ 0.4f, -0.4f, -0.4f, 0.0f }, /* DEBUG_MODE_DAMAGE */
|
||||||
|
{ -0.4f, -0.4f, 0.7f, 0.0f }, /* DEBUG_MODE_OPAQUE */
|
||||||
|
};
|
||||||
|
static const float batch_tints[][4] = {
|
||||||
|
{ 0.9f, 0.0f, 0.0f, 0.9f },
|
||||||
|
{ 0.0f, 0.9f, 0.0f, 0.9f },
|
||||||
|
{ 0.0f, 0.0f, 0.9f, 0.9f },
|
||||||
|
{ 0.9f, 0.9f, 0.0f, 0.9f },
|
||||||
|
{ 0.9f, 0.0f, 0.9f, 0.9f },
|
||||||
|
{ 0.0f, 0.9f, 0.9f, 0.9f },
|
||||||
|
{ 0.9f, 0.9f, 0.9f, 0.9f },
|
||||||
|
};
|
||||||
|
int i;
|
||||||
|
|
||||||
|
switch (gr->debug_mode) {
|
||||||
|
case DEBUG_MODE_WIREFRAME:
|
||||||
|
/* Wireframe rendering is based on Celes & Abraham's "Fast and
|
||||||
|
* versatile texture-based wireframe rendering", 2011. */
|
||||||
|
sconf->req.wireframe = true;
|
||||||
|
sconf->wireframe_tex = gr->wireframe_tex;
|
||||||
|
glEnableVertexAttribArray(SHADER_ATTRIB_LOC_BARYCENTRIC);
|
||||||
|
glVertexAttribPointer(SHADER_ATTRIB_LOC_BARYCENTRIC, 4,
|
||||||
|
GL_UNSIGNED_BYTE, GL_TRUE, 0,
|
||||||
|
barycentrics);
|
||||||
|
FALLTHROUGH;
|
||||||
|
|
||||||
|
case DEBUG_MODE_DAMAGE:
|
||||||
|
sconf->req.tint = true;
|
||||||
|
copy_uniform4f(sconf->tint, tints[gr->debug_mode]);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case DEBUG_MODE_OPAQUE:
|
||||||
|
sconf->req.tint = opaque;
|
||||||
|
copy_uniform4f(sconf->tint, tints[gr->debug_mode]);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case DEBUG_MODE_BATCHES:
|
||||||
|
sconf->req.tint = true;
|
||||||
|
i = gr->nbatches++ % ARRAY_LENGTH(batch_tints);
|
||||||
|
copy_uniform4f(sconf->tint, batch_tints[i]);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
unreachable("Invalid debug mode");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
draw_mesh(struct gl_renderer *gr,
|
draw_mesh(struct gl_renderer *gr,
|
||||||
struct weston_paint_node *pnode,
|
struct weston_paint_node *pnode,
|
||||||
@ -1385,61 +1445,8 @@ draw_mesh(struct gl_renderer *gr,
|
|||||||
{
|
{
|
||||||
assert(nidx > 0);
|
assert(nidx > 0);
|
||||||
|
|
||||||
if (gr->debug_mode) {
|
if (gr->debug_mode)
|
||||||
/* Debug mode tints indexed by gl_debug_mode enumeration. While
|
set_debug_mode(gr, sconf, barycentrics, opaque);
|
||||||
* tints are meant to be premultiplied, debug modes can have
|
|
||||||
* invalid colors in order to create visual effects. */
|
|
||||||
static const float tints[DEBUG_MODE_LAST][4] = {
|
|
||||||
{}, /* DEBUG_MODE_NONE */
|
|
||||||
{ 0.0f, 0.0f, 0.0f, 0.3f }, /* DEBUG_MODE_WIREFRAME */
|
|
||||||
{}, /* DEBUG_MODE_BATCHES */
|
|
||||||
{ 0.4f, -0.4f, -0.4f, 0.0f }, /* DEBUG_MODE_DAMAGE */
|
|
||||||
{ -0.4f, -0.4f, 0.7f, 0.0f }, /* DEBUG_MODE_OPAQUE */
|
|
||||||
};
|
|
||||||
static const float batch_tints[][4] = {
|
|
||||||
{ 0.9f, 0.0f, 0.0f, 0.9f },
|
|
||||||
{ 0.0f, 0.9f, 0.0f, 0.9f },
|
|
||||||
{ 0.0f, 0.0f, 0.9f, 0.9f },
|
|
||||||
{ 0.9f, 0.9f, 0.0f, 0.9f },
|
|
||||||
{ 0.9f, 0.0f, 0.9f, 0.9f },
|
|
||||||
{ 0.0f, 0.9f, 0.9f, 0.9f },
|
|
||||||
{ 0.9f, 0.9f, 0.9f, 0.9f },
|
|
||||||
};
|
|
||||||
int i;
|
|
||||||
|
|
||||||
switch (gr->debug_mode) {
|
|
||||||
case DEBUG_MODE_WIREFRAME:
|
|
||||||
/* Wireframe rendering is based on Celes & Abraham's
|
|
||||||
* "Fast and versatile texture-based wireframe
|
|
||||||
* rendering", 2011. */
|
|
||||||
sconf->req.wireframe = true;
|
|
||||||
sconf->wireframe_tex = gr->wireframe_tex;
|
|
||||||
glEnableVertexAttribArray(SHADER_ATTRIB_LOC_BARYCENTRIC);
|
|
||||||
glVertexAttribPointer(SHADER_ATTRIB_LOC_BARYCENTRIC, 4,
|
|
||||||
GL_UNSIGNED_BYTE, GL_TRUE, 0,
|
|
||||||
barycentrics);
|
|
||||||
FALLTHROUGH;
|
|
||||||
|
|
||||||
case DEBUG_MODE_DAMAGE:
|
|
||||||
sconf->req.tint = true;
|
|
||||||
copy_uniform4f(sconf->tint, tints[gr->debug_mode]);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case DEBUG_MODE_OPAQUE:
|
|
||||||
sconf->req.tint = opaque;
|
|
||||||
copy_uniform4f(sconf->tint, tints[gr->debug_mode]);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case DEBUG_MODE_BATCHES:
|
|
||||||
sconf->req.tint = true;
|
|
||||||
i = gr->nbatches++ % ARRAY_LENGTH(batch_tints);
|
|
||||||
copy_uniform4f(sconf->tint, batch_tints[i]);
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
unreachable("Invalid debug mode");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!gl_renderer_use_program(gr, sconf))
|
if (!gl_renderer_use_program(gr, sconf))
|
||||||
gl_renderer_send_shader_error(pnode); /* Use fallback shader. */
|
gl_renderer_send_shader_error(pnode); /* Use fallback shader. */
|
||||||
|
Loading…
Reference in New Issue
Block a user