bool gs_texrender_begin(gs_texrender_t texrender, uint32_t cx, uint32_t cy) { if (!texrender || texrender->rendered) return false; if (cx == 0) cx = gs_get_width(); if (cy == 0) cy = gs_get_height(); assert(cx && cy); if (!cx || !cy) return false; if (texrender->cx != cx || texrender->cy != cy) if (!texrender_resetbuffer(texrender, cx, cy)) return false; gs_viewport_push(); gs_projection_push(); gs_matrix_push(); gs_matrix_identity(); texrender->prev_target = gs_get_render_target(); texrender->prev_zs = gs_get_zstencil_target(); gs_set_render_target(texrender->target, texrender->zs); gs_set_viewport(0, 0, texrender->cx, texrender->cy); return true; }
void draw_outlines(struct ft2_source *srcdata) { // Horrible (hopefully temporary) solution for outlines. uint32_t *tmp; struct gs_vb_data *vdata = gs_vertexbuffer_get_data(srcdata->vbuf); if (!srcdata->text) return; tmp = vdata->colors; vdata->colors = srcdata->colorbuf; gs_matrix_push(); for (int32_t i = 0; i < 8; i++) { gs_matrix_translate3f(offsets[i * 2], offsets[(i * 2) + 1], 0.0f); draw_uv_vbuffer(srcdata->vbuf, srcdata->tex, srcdata->draw_effect, (uint32_t)wcslen(srcdata->text) * 6); } gs_matrix_identity(); gs_matrix_pop(); vdata->colors = tmp; }
void draw_drop_shadow(struct ft2_source *srcdata) { // Horrible (hopefully temporary) solution for drop shadow. uint32_t *tmp; struct gs_vb_data *vdata = gs_vertexbuffer_get_data(srcdata->vbuf); tmp = vdata->colors; vdata->colors = srcdata->colorbuf; gs_matrix_push(); gs_matrix_translate3f(4.0f, 4.0f, 0.0f); draw_uv_vbuffer(srcdata->vbuf, srcdata->tex, srcdata->draw_effect, (uint32_t)wcslen(srcdata->text) * 6); gs_matrix_identity(); gs_matrix_pop(); vdata->colors = tmp; }
void xcursor_render(xcursor_t *data) { struct matrix4 trans; gs_effect_t effect = gs_get_effect(); gs_eparam_t image = gs_effect_get_param_by_name(effect, "image"); gs_effect_set_texture(image, data->tex); gs_matrix_push(); gs_matrix_get(&trans); gs_matrix_identity(); gs_matrix_translate3f(data->pos_x, data->pos_y, 0.0f); gs_matrix_mul(&trans); gs_enable_blending(True); gs_blend_function(GS_BLEND_ONE, GS_BLEND_INVSRCALPHA); gs_draw_sprite(data->tex, 0, 0, 0); gs_matrix_pop(); }