int set_mvp( uint32_t *fifo, float angle ) { float matrix[16]; identity( matrix ); float w = 0.4f; float h = 0.3f; frustrum( -w, +w, -h, +h, 1.0f, 100.0f, matrix ); translatef( 0.0f, 0.0f, -4.0f, matrix ); rotatef( angle, 0.0f, 1.0f, 0.0f, matrix ); rotatef( 90.0f, 1.0f, 0.0f, 0.0f, matrix ); return set_vertex_shader_constants( matrix, 0, 16, fifo, Nv3D ); }
/*#ifdef __cplusplus extern "C" { #endif * w */ int _trace (struct logfile_info *lfi, const char *fmt, va_list ap) { int ret = 0; if(lfi->fptr) { ret = vfprintf(lfi->fptr, fmt, ap); fflush(lfi->fptr); lfi->count += ret; if (max_log_size && lfi->count > max_log_size) { fclose(lfi->fptr); lfi->fptr = NULL; } if (ringbuffer_size && lfi->count > ringbuffer_size) { rotatef(lfi); lfi->count = 0; } } return ret; }
int gfx_step( uint32_t *fifo, uint32_t jmp, int off ) { static bool init_particles = false; if( !init_particles ) { init_particles = true; for( size_t i = 0; i < INUMBER; ++i ) { dt[i] = ( rand() & 63 ) + 32; rnds[i][0] = 360.0f * i / (float)( INUMBER );//rnd( 0.0f, 360.0f ); rnds[i][1] = rnd( -0.2f, +0.2f ); rnds[i][2] = rnd( -0.8f, +0.3f ); rnds[i][3] = rnd( 0.3f, 1.0f ); insts[i].time = rand(); insts[i].col[0] = rnd( 0.8f, 1.0f ); insts[i].col[1] = rnd( 0.8f, 1.0f ); insts[i].col[2] = rnd( 0.8f, 1.0f ); insts[i].col[3] = 1.0f; } } for( size_t i = 0; i < INUMBER; ++i ) { insts[i].time += dt[i]; identity( insts[i].mat ); rotatef( 80.0f, 1.0f, 0.0f, 0.0f, insts[i].mat ); rotatef( off * 0.5f + rnds[i][0], 0.0f, 0.0f, 1.0f, insts[i].mat ); translatef( 1.6f, rnds[i][1], rnds[i][2], insts[i].mat ); scalef( rnds[i][3], insts[i].mat ); float d = insts[i].mat[11]; d = ( 1.0f - 0.6f * d ); insts[i].scale = rnds[i][3]; insts[i].col[0] = d; insts[i].col[1] = 0.5f + d; insts[i].col[2] = d; //translatef( 1.0f * sin( t * rnds[i][0] ), 1.0f * cos( t * rnds[i][0] ), 1.0f * sin( t * rnds[i][2] ), insts[i].mat ); } clear_buffer_t clear; clear.clearR = clear.clearG = clear.clearB = clear.clearA = clear.clearD = 1; clear.rgba = 50 + ( 10 << 8 ) + ( 5 << 16 ); clear.depth = 0xffff; static job_t job; static size_t curr = 0x0; job.pd.insts = (uint32_t)insts; job.pd.isize = INUMBER; job.pd.dynamic = (uint32_t)( dynamic ) + curr * 24; job.pd.fx = (uint32_t)fx.get_data(); job.pd.atlas = (uint32_t)atlas.get_data(); job.pd.asize = atlas.get_size(); job.kick_job( ); job.join(); uint32_t *ptr = fifo; static float angle = 180.0f; ptr += setup_surfaces_with_offset( ptr, off % 3 ); ptr += clear_buffers( &clear, ptr, Nv3D ); ptr += set_mvp( ptr, angle ); ptr += set_cnst( ptr ); //ptr += troll_texture.set( ptr ); //ptr += troll.set( ptr ); //ptr += custom.set( ptr ); ptr += particles.set( ptr ); ptr += particle_texture.set( ptr ); ptr += draw_primitives( 0, QUADS, curr, job.pd.quads * 4, ptr, Nv3D ); curr += job.pd.quads * 4;// + 128; curr = ( curr + 16 ) & 2047; //printf( "%d \n", job.pd.quads ); ptr += jump_to_address( ptr, jmp ); return ptr - fifo; }
void rotate_errorf() { rotatef(&error_lfi); strcpy(screen_logfile, error_lfi.file_name); }
void rotate_logfile() { rotatef(&log_lfi); }
void rotate_shortmessagef() { rotatef(&shortmessage_lfi); }
void rotate_messagef() { rotatef(&message_lfi); }
void rotate_calldebugf() { rotatef(&calldebug_lfi); }