void BorderlessWindow::set_borderless(bool enabled) { Style new_style = (enabled) ? select_borderless_style() : Style::windowed; Style old_style = static_cast<Style>(GetWindowLongPtr(hwnd.get(), GWL_STYLE)); if (new_style != old_style) { borderless = enabled; SetWindowLongPtr(hwnd.get(), GWL_STYLE, static_cast<LONG>(new_style)); // when switching between borderless and windowed, restore appropriate shadow state set_shadow(borderless_shadow && (new_style != Style::windowed)); // redraw frame SetWindowPos(hwnd.get(), nullptr, 0, 0, 0, 0, SWP_FRAMECHANGED | SWP_NOMOVE | SWP_NOSIZE); show(); } }
t_vec3 raytracing_color(t_env *e, t_ray *ray, t_cam *cam, t_obj *obj) { t_lgt *light; t_vec3 color; t_vec3 diffuse; t_vec3 specular; color = (t_vec3) {0, 0, 0}; light = e->lgt; while (light != NULL) { set_light(ray->hit, obj, light); set_color(obj, ray); color = vec3_add(color, vec3_fmul(light->color, obj->mat.ambient)); diffuse = set_diffuse(obj, light); specular = set_specular(obj, cam, light); color = vec3_add(color, vec3_add(diffuse, specular)); color = vec3_mul(color, obj->mat.color); obj->mat.receive_shadow ? set_shadow(e, &color, *light, obj) : 0; light = light->next; } return (color); }
// meaning of *pass* is in [zz_material.h] bool zz_material_terrain::set (int pass) { zz_texture * firstmap, * secondmap, * lightmap; int shader_format = get_shader_format(); if (shader_format == SHADER_FORMAT_DEFAULT) return false; firstmap = (shader_format & SHADER_FORMAT_FIRSTMAP) ? textures[0] : 0; secondmap = (shader_format & SHADER_FORMAT_SECONDMAP) ? textures[1] : 0; lightmap = (shader_format & SHADER_FORMAT_LIGHTMAP) ? textures[2] : 0; bool l_use_shadow = (shader_format & SHADER_FORMAT_SHADOWMAP) > 0; // texture binding int texture_stage = 0; if (firstmap) firstmap->set(texture_stage++); if (secondmap) secondmap->set(texture_stage++); if (lightmap) lightmap->set(texture_stage++); if (l_use_shadow) s_renderer->set_texture_shadowmap(texture_stage++); #ifdef _DEBUG static bool debug_flags_multi [] = {true, true, true, true, true, true, true}; static bool debug_flags_single [] = {true, true, true, true, true, true, true}; #endif // set texture stage if (s_renderstate->use_multipass) { if (firstmap) { if (secondmap) { TEST_FLAGS_MULTI(0); set_first_second(); } else if (lightmap) { TEST_FLAGS_MULTI(1); set_first_light(); } else if (l_use_shadow) { TEST_FLAGS_MULTI(2); set_first_shadow(); } else { TEST_FLAGS_MULTI(3); set_first(); } } else if (lightmap) { if (l_use_shadow) { TEST_FLAGS_MULTI(4); set_light_shadow(); } else { TEST_FLAGS_MULTI(5); set_light(); } } else if (l_use_shadow) { TEST_FLAGS_MULTI(6); set_shadow(); } else { return false; } } else { if (firstmap) { if (secondmap) { if (lightmap) { if (l_use_shadow) { TEST_FLAGS_SINGLE(0); set_first_second_light_shadow(); } else { TEST_FLAGS_SINGLE(1); set_first_second_light(); } } else { if (l_use_shadow) { TEST_FLAGS_SINGLE(2); set_first_second_shadow(); } else { TEST_FLAGS_SINGLE(3); set_first_second(); } } } else { if (lightmap) { if (l_use_shadow) { TEST_FLAGS_SINGLE(4); set_first_light_shadow(); } else { TEST_FLAGS_SINGLE(5); set_first_light(); } } else { TEST_FLAGS_SINGLE(6); set_first(); } } } else { return false; } } set_alpha_stage(pass, lightmap ? true : false, l_use_shadow); return true; }
void TextStyle::set_shadow_none() { set_shadow(0.0f, 0.0f, 0.0f, Colorf::transparent); }
void BorderlessWindow::set_borderless_shadow(bool enabled) { if (borderless) { borderless_shadow = enabled; set_shadow(enabled); } }