added callback for derived rendermodes to easily provide overlay color
This commit is contained in:
@@ -17,6 +17,14 @@
|
|||||||
|
|
||||||
#include "overviewer.h"
|
#include "overviewer.h"
|
||||||
|
|
||||||
|
static void get_color(void *data, RenderState *state,
|
||||||
|
unsigned char *r, unsigned char *g, unsigned char *b, unsigned char *a) {
|
||||||
|
*r = 200;
|
||||||
|
*g = 200;
|
||||||
|
*b = 255;
|
||||||
|
*a = 155;
|
||||||
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
rendermode_overlay_start(void *data, RenderState *state) {
|
rendermode_overlay_start(void *data, RenderState *state) {
|
||||||
PyObject *facemasks_py;
|
PyObject *facemasks_py;
|
||||||
@@ -33,6 +41,8 @@ rendermode_overlay_start(void *data, RenderState *state) {
|
|||||||
self->solid_blocks = PyObject_GetAttrString(state->chunk, "solid_blocks");
|
self->solid_blocks = PyObject_GetAttrString(state->chunk, "solid_blocks");
|
||||||
self->fluid_blocks = PyObject_GetAttrString(state->chunk, "fluid_blocks");
|
self->fluid_blocks = PyObject_GetAttrString(state->chunk, "fluid_blocks");
|
||||||
|
|
||||||
|
self->get_color = get_color;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -63,6 +73,7 @@ rendermode_overlay_occluded(void *data, RenderState *state) {
|
|||||||
static void
|
static void
|
||||||
rendermode_overlay_draw(void *data, RenderState *state, PyObject *src, PyObject *mask) {
|
rendermode_overlay_draw(void *data, RenderState *state, PyObject *src, PyObject *mask) {
|
||||||
RenderModeOverlay *self = (RenderModeOverlay *)data;
|
RenderModeOverlay *self = (RenderModeOverlay *)data;
|
||||||
|
unsigned char r, g, b, a;
|
||||||
|
|
||||||
/* clear the draw space -- set alpha to 0 within mask */
|
/* clear the draw space -- set alpha to 0 within mask */
|
||||||
tint_with_mask(state->img, 255, 255, 255, 0, mask, state->imgx, state->imgy, 0, 0);
|
tint_with_mask(state->img, 255, 255, 255, 0, mask, state->imgx, state->imgy, 0, 0);
|
||||||
@@ -97,8 +108,14 @@ rendermode_overlay_draw(void *data, RenderState *state, PyObject *src, PyObject
|
|||||||
}
|
}
|
||||||
Py_DECREF(block_py);
|
Py_DECREF(block_py);
|
||||||
|
|
||||||
|
/* get our color info */
|
||||||
|
self->get_color(data, state, &r, &g, &b, &a);
|
||||||
|
|
||||||
/* do the overlay */
|
/* do the overlay */
|
||||||
alpha_over_full(state->img, self->white_color, self->facemask_top, 0.5, state->imgx, state->imgy, 0, 0);
|
if (a > 0) {
|
||||||
|
alpha_over(state->img, self->white_color, self->facemask_top, state->imgx, state->imgy, 0, 0);
|
||||||
|
tint_with_mask(state->img, r, g, b, a, self->facemask_top, state->imgx, state->imgy, 0, 0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
RenderModeInterface rendermode_overlay = {
|
RenderModeInterface rendermode_overlay = {
|
||||||
|
|||||||
@@ -77,6 +77,11 @@ typedef struct {
|
|||||||
PyObject *facemask_top, *white_color;
|
PyObject *facemask_top, *white_color;
|
||||||
/* only show overlay on top of solid or fluid blocks */
|
/* only show overlay on top of solid or fluid blocks */
|
||||||
PyObject *solid_blocks, *fluid_blocks;
|
PyObject *solid_blocks, *fluid_blocks;
|
||||||
|
/* can be overridden in derived classes to control
|
||||||
|
overlay alpha and color
|
||||||
|
last four vars are r, g, b, a out */
|
||||||
|
void (*get_color)(void *, RenderState *,
|
||||||
|
unsigned char *, unsigned char *, unsigned char *, unsigned char *);
|
||||||
} RenderModeOverlay;
|
} RenderModeOverlay;
|
||||||
extern RenderModeInterface rendermode_overlay;
|
extern RenderModeInterface rendermode_overlay;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user