void add_light(Light *light) { ShadowMap shadow_map(GL_TEXTURE0 + get_next_texture()); if (shadow_map.init()) { fprintf(stderr, "WARNING: Failed to initialize shadow map for light.\n"); } lights.push_back(std::make_pair(light, shadow_map)); }
void texture_iterate(viewport_t *viewport) { unsigned char *data; int i, j; int next_texture = get_next_texture(viewport); #define BYTES_PER_PIXEL 2 data = (unsigned char*)viewport->screen->pixels + texture_offsets[next_texture]; memset(data, 0x80, TEXTURE_SIDE * TEXTURE_SIDE * 2); for(i = viewport->y1; i < viewport->y2; i++) { unsigned char *row = data + i * TEXTURE_SIDE * BYTES_PER_PIXEL + ((viewport->x1 * BYTES_PER_PIXEL) & 0xfffffffc); for(j = viewport->x1; j < viewport->x2; j += 2) { row[1] = row[3] = viewport->y; row[0] = viewport->u; row[2] = viewport->v; row += 4; } } return; memset(data, 0x00, TEXTURE_SIDE * TEXTURE_SIDE * 4); memset(data, viewport->y, TEXTURE_SIDE * TEXTURE_SIDE); memset(data + TEXTURE_SIDE * TEXTURE_SIDE, viewport->u, TEXTURE_SIDE * TEXTURE_SIDE / 4); memset(data + TEXTURE_SIDE * TEXTURE_SIDE + TEXTURE_SIDE * TEXTURE_SIDE / 4, viewport->u, TEXTURE_SIDE * TEXTURE_SIDE / 4); viewport->current_frame += viewport->frame_step; if(viewport->current_frame >= viewport->total_frames ) { viewport->current_frame = 0; } }
void viewport_draw(viewport_t *viewport) { texture_iterate(viewport); // usleep(4000); draw_thing(viewport); viewport->current_texture = get_next_texture(viewport); viewport->status.frames++; update_status(&viewport->status); // if(!viewport->button_down) viewport->xrot += 0.1; };
void add_light(Light *light) { ShadowMap shadow_map(GL_TEXTURE0 + get_next_texture()); shadow_map.init(); lights.push_back(std::make_pair(light, shadow_map)); }