⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lines.c

📁 psp开发用的所有头文件。包含所有系统API。需要psp-gcc编译器。在www.psp-dev.com上有
💻 C
字号:
/* * PSP Software Development Kit - http://www.pspdev.org * ----------------------------------------------------------------------- * Licensed under the BSD license, see LICENSE in PSPSDK root for details. * * Copyright (c) 2005 Jesper Svennevid */#include <pspkernel.h>#include <pspdisplay.h>#include <pspdebug.h>#include <stdlib.h>#include <stdio.h>#include <math.h>#include <string.h>#include <time.h>#include <pspgu.h>#include "../common/callbacks.h"#include "../common/vram.h"PSP_MODULE_INFO("Lines Sample", 0, 1, 1);PSP_MAIN_THREAD_ATTR(THREAD_ATTR_USER);static unsigned int __attribute__((aligned(16))) list[262144];struct Vertex{	float x,y,z;};#define BUF_WIDTH (512)#define SCR_WIDTH (480)#define SCR_HEIGHT (272)#define NUM_SLICES 128#define NUM_ROWS 128#define RING_SIZE 2.0f#define RING_RADIUS 1.0f#define SPRITE_SIZE 0.025funsigned int colors[8] = {	0xffff0000,	0xffff00ff,	0xff0000ff,	0xff00ffff,	0xff00ff00,	0xffffff00,	0xffffffff,	0xff00ffff};#define NUM_LINES 12#define NUM_VERTICES 8#define SPEED 4.0f#define FADE_SPEED 0.015f;struct Vertex lines[NUM_LINES][NUM_VERTICES];unsigned int curr_line = 0;struct Vertex position[8];struct Vertex direction[8];float fade = 0;unsigned int color_index = 0;int main(int argc, char* argv[]){	unsigned int i;	setupCallbacks();	// initialize lines	memset(lines,0,sizeof(lines));	srand(time(0));	for (i = 0; i < NUM_VERTICES; ++i)	{		position[i].x = (((float)rand())/RAND_MAX) * (SCR_WIDTH-1);		position[i].y = (((float)rand())/RAND_MAX) * (SCR_HEIGHT-1);		direction[i].x = (((float)rand())/(RAND_MAX/2)-1.0f) * SPEED;		direction[i].y = (((float)rand())/(RAND_MAX/2)-1.0f) * SPEED;	}	// setup GU	void* fbp0 = getStaticVramBuffer(BUF_WIDTH,SCR_HEIGHT,GU_PSM_8888);	void* fbp1 = getStaticVramBuffer(BUF_WIDTH,SCR_HEIGHT,GU_PSM_8888);	void* zbp = getStaticVramBuffer(BUF_WIDTH,SCR_HEIGHT,GU_PSM_4444);	sceGuInit();	sceGuStart(GU_DIRECT,list);	sceGuDrawBuffer(GU_PSM_8888,fbp0,BUF_WIDTH);	sceGuDispBuffer(SCR_WIDTH,SCR_HEIGHT,fbp1,BUF_WIDTH);	sceGuDepthBuffer(zbp,BUF_WIDTH);	sceGuOffset(2048 - (SCR_WIDTH/2),2048 - (SCR_HEIGHT/2));	sceGuViewport(2048,2048,SCR_WIDTH,SCR_HEIGHT);	sceGuDepthRange(65535,0);	sceGuScissor(0,0,SCR_WIDTH,SCR_HEIGHT);	sceGuEnable(GU_SCISSOR_TEST);	sceGuFinish();	sceGuSync(0,0);	sceDisplayWaitVblankStart();	sceGuDisplay(GU_TRUE);	// run sample	while(running())	{		unsigned int i,j;		unsigned int result;		// update lines		for (i = 0; i < NUM_VERTICES; ++i)		{			position[i].x += direction[i].x;			position[i].y += direction[i].y;			if (position[i].x < 0)			{				position[i].x = 0;				direction[i].x = (((float)rand())/RAND_MAX) * SPEED;				direction[i].y += 0.1f * (direction[i].y / fabsf(direction[i].y));			}			else if (position[i].x >= SCR_WIDTH)			{				position[i].x = (SCR_WIDTH-1);				direction[i].x = -(((float)rand())/RAND_MAX) * SPEED;				direction[i].y += 0.1f * (direction[i].y / fabsf(direction[i].y));			}			if (position[i].y < 0)			{				position[i].y = 0;				direction[i].x += 0.1f * (direction[i].x / fabsf(direction[i].x));				direction[i].y = (0.1f+((float)rand())/RAND_MAX) * SPEED;			}			else if (position[i].y >= SCR_HEIGHT)			{				position[i].y = (SCR_HEIGHT-1);				direction[i].x += 0.1f * (direction[i].x / fabsf(direction[i].x));				direction[i].y = -(0.1f+((float)rand())/RAND_MAX) * SPEED;			}			lines[curr_line][i].x = position[i].x;			lines[curr_line][i].y = position[i].y;		}		curr_line = (curr_line+1) % NUM_LINES;		fade += FADE_SPEED;		if (fade >= 1.0f)		{			fade -= 1.0f;			color_index = (color_index+1) & 7;		}		sceGuStart(GU_DIRECT,list);		// clear screen		sceGuClearColor(0);		sceGuClear(GU_COLOR_BUFFER_BIT);		// render lines		result = 0;		for (i = 0; i < 4; ++i)		{			int ca = (colors[color_index] >> (i*8)) & 0xff;			int cb = (colors[(color_index+1)&7] >> (i*8)) & 0xff;			result |= ((unsigned char)(ca + (cb-ca) * fade)) << (i*8);		}				sceGuColor(result);		for (i = 0; i < NUM_LINES; ++i)		{			// we make local copies of the line into the main buffer here, so we don't have to flush the cache			struct Vertex* vertices = sceGuGetMemory((NUM_VERTICES+1) * sizeof(struct Vertex));			// create a lineloop			for (j = 0; j < NUM_VERTICES; ++j)				vertices[j] = lines[i][j];			vertices[NUM_VERTICES] = lines[i][0];					sceGuDrawArray(GU_LINE_STRIP,GU_VERTEX_32BITF|GU_TRANSFORM_2D,(NUM_VERTICES+1),0,vertices);		}		// wait for next frame		sceGuFinish();		sceGuSync(0,0);		sceDisplayWaitVblankStart();		sceGuSwapBuffers();	}	sceGuTerm();	sceKernelExitGame();	return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -