ps2sdk  1.1
A collection of Open Source libraries used for developing applications on Sony's PlayStation 2® (PS2).
font.c
Go to the documentation of this file.
1 #include <dma.h>
2 
3 #include <stdio.h>
4 #include <string.h>
5 #include <tamtypes.h>
6 
7 #include <packet.h>
8 #include <graph.h>
9 #include <gs_psm.h>
10 #include <draw.h>
11 #include <kernel.h>
12 
13 #include <font.h>
14 
15 extern unsigned int image_clut32[];
16 extern unsigned char image_pixel[];
17 
18 int myaddress = 0;
19 int clutaddress = 0;
20 
25 
27 {
28 
29  framebuffer_t frame;
30  zbuffer_t z;
31 
33 
34  qword_t *q = packet->data;
35 
36  frame.width = 640;
37  frame.height = 448;
38  frame.psm = GS_PSM_32;
39  frame.mask = 0;
40  frame.address = graph_vram_allocate(frame.width,frame.height,frame.psm,GRAPH_ALIGN_PAGE);
41 
42  z.enable = 0;
44  z.address = 0;
45  z.mask = 1;
46  z.zsm = 0;
47 
48  graph_initialize(frame.address,640,448,GS_PSM_32,0,0);
49 
50  q = draw_setup_environment(q,0,&frame,&z);
51 
52  q = draw_finish(q);
53 
55  dma_wait_fast();
56 
58 
59 }
60 
62 {
64 
65  qword_t *q = packet->data;
66 
69 
70  q = packet->data;
71 
74  q = draw_texture_flush(q);
75 
77  dma_wait_fast();
78 
80 
81 }
82 
84 {
85 
86  int context = 0;
87 
88  vertex_t v0;
89 
90  color_t c0;
91  color_t c1;
92 
93  texbuffer_t texbuf;
95  lod_t lod;
96 
97  packet_t *packets[2];
98  packet_t *current;
99 
100  packets[0] = packet_init(10000,PACKET_NORMAL);
101  packets[1] = packet_init(10000,PACKET_NORMAL);
102 
103  // Use linear filtering for good scaling results
105  lod.max_level = 0;
108  lod.l = 0;
109  lod.k = 0;
110 
111  texbuf.width = 512;
112  texbuf.psm = GS_PSM_4;
113  texbuf.address = myaddress;
114 
115  texbuf.info.width = draw_log2(512);
116  texbuf.info.height = draw_log2(256);
119 
121  clut.start = 0;
122 
123  clut.psm = GS_PSM_32;
126 
127  v0.x = 320.0f;
128  v0.y = 240.0f;
129  v0.z = 4;
130 
131  c0.r = 0xFF;
132  c0.g = 0xFF;
133  c0.b = 0xFF;
134  c0.a = 0x80;
135  c0.q = 1.0f;
136 
137  c1.r = 0xFF;
138  c1.g = 0x00;
139  c1.b = 0x00;
140  c1.a = 0x40;
141  c1.q = 1.0f;
142 
143  // UTF-8
144  unsigned char str0[] = { 0x61, 0x62, 0xC2, 0xA9, 0x78, 0xC2, 0xA5, 0xC2, 0xB2, '\0'};
145 
146  // Shift-JIS
147  unsigned char str1[] = {0x81, 0xBC, 0x93, 0xF1, 0x93, 0xF1, 0x93, 0xF1, 0x81, 0x69, 0x81, 0x40, 0x81,
148  0x4F, 0x83, 0xD6, 0x81, 0x4F, 0x81, 0x6A, 0x93, 0xF1, 0x81, 0xBD, 0x0D, '\0' };
149 
150  qword_t *q = packet->data;
151 
152  while(1)
153  {
154 
155  current = packets[context];
156  q = current->data;
157 
158  q = draw_clear(q,0,0,0,640.0f,448.0f,0x40,0x40,0x40);
159 
160  q = draw_texture_sampling(q,0,&lod);
161  q = draw_texturebuffer(q,0,&texbuf,&clut);
162 
163  impress.scale = 3.0f;
164 
165  q = fontx_print_sjis(q,0,str1,CENTER_ALIGN,&v0,&c0,&krom_u,&krom_k);
166  q = fontstudio_print_string(q,0,str0,CENTER_ALIGN,&v0,&c1,&impress);
167 
168  q = draw_finish(q);
169 
170  dma_wait_fast();
171  dma_channel_send_normal(DMA_CHANNEL_GIF,current->data, q - current->data, 0,0);
172 
174 
175  context ^= 1;
176 
178 
179  }
180 
181  free(packets[0]);
182  free(packets[1]);
183 }
184 
185 int main(void)
186 {
187  char *ini;
188 
191 
192  fontx_load("rom0:KROM", &krom_u, SINGLE_BYTE, 2, 1, 1);
193  fontx_load("rom0:KROM", &krom_k, DOUBLE_BYTE, 2, 1, 1);
194 
195  if((ini = fontstudio_load_ini("host:impress.ini")) != NULL)
196  {
197  fontstudio_parse_ini(&impress, ini, 512, 256);
198  free(ini);
199 
200  draw_init_env();
201 
202  init_texture();
203 
204  run_demo(&packet);
205 
207 
210  } else {
211  printf("Error: cannot load ini file.\n");
212  }
213 
214  SleepThread();
215 
216  return 0;
217 }
#define v0
Definition: as_reg_compat.h:35
void dma_wait_fast(void)
Definition: dma.c:115
int dma_channel_send_normal(int channel, void *data, int qwc, int flags, int spr)
Definition: dma.c:238
int dma_channel_initialize(int channel, void *handler, int flags)
Definition: dma.c:58
#define DMA_CHANNEL_GIF
Definition: dma.h:24
void dma_channel_fast_waits(int channel)
Definition: dma.c:108
int dma_channel_send_chain(int channel, void *data, int qwc, int flags, int spr)
Definition: dma.c:184
lod_t lod
Definition: main.c:86
u8 context
Definition: main.c:71
clutbuffer_t clut
Definition: main.c:80
qword_t * draw_setup_environment(qword_t *q, int context, framebuffer_t *frame, zbuffer_t *z)
Definition: draw.c:11
qword_t * draw_texture_transfer(qword_t *q, void *src, int width, int height, int psm, int dest, int dest_width)
Definition: draw.c:223
void draw_wait_finish(void)
Definition: draw.c:200
qword_t * draw_finish(qword_t *q)
Definition: draw.c:188
qword_t * draw_clear(qword_t *q, int context, float x, float y, float width, float height, int r, int g, int b)
Definition: draw.c:148
qword_t * draw_texture_flush(qword_t *q)
Definition: draw.c:208
unsigned char draw_log2(unsigned int x)
Definition: draw.c:348
#define CLUT_LOAD
Definition: draw_buffers.h:27
qword_t * draw_texturebuffer(qword_t *q, int context, texbuffer_t *texbuffer, clutbuffer_t *clut)
#define TEXTURE_COMPONENTS_RGBA
Definition: draw_buffers.h:13
#define TEXTURE_FUNCTION_MODULATE
Definition: draw_buffers.h:16
#define CLUT_STORAGE_MODE1
Definition: draw_buffers.h:22
#define LOD_MAG_LINEAR
Definition: draw_sampling.h:17
#define LOD_USE_K
Definition: draw_sampling.h:13
qword_t * draw_texture_sampling(qword_t *q, int context, lod_t *lod)
#define LOD_MIN_LINEAR
Definition: draw_sampling.h:19
#define ZTEST_METHOD_GREATER
Definition: draw_tests.h:35
unsigned int image_clut32[]
Definition: impress.c:11
fontx_t krom_u
Definition: font.c:22
void run_demo(packet_t *packet)
Definition: font.c:83
void draw_init_env()
Definition: font.c:26
fontx_t krom_k
Definition: font.c:23
void init_texture()
Definition: font.c:61
fsfont_t impress
Definition: font.c:21
packet_t packet
Definition: font.c:24
unsigned char image_pixel[]
Definition: impress.c:31
int main(void)
Definition: font.c:185
int clutaddress
Definition: font.c:19
int myaddress
Definition: font.c:18
int fontstudio_parse_ini(fsfont_t *font, char *ini, float tex_width, float tex_height)
Definition: fsfont.c:91
void fontx_unload(fontx_t *fontx)
Definition: fontx.c:383
int fontx_load(const char *path, fontx_t *fontx, int type, int wmargin, int hmargin, int bold)
Definition: fontx.c:262
void fontstudio_unload_ini(fsfont_t *font)
Definition: fsfont.c:313
#define CENTER_ALIGN
Definition: font.h:61
#define DOUBLE_BYTE
Definition: font.h:14
qword_t * fontstudio_print_string(qword_t *q, int context, const unsigned char *string, int alignment, vertex_t *v0, color_t *c0, fsfont_t *font)
Definition: fsfont.c:456
char * fontstudio_load_ini(const char *path)
Definition: fsfont.c:53
#define SINGLE_BYTE
Definition: font.h:13
qword_t * fontx_print_sjis(qword_t *q, int context, const unsigned char *str, int alignment, vertex_t *v0, color_t *c0, fontx_t *ascii, fontx_t *kanji)
Definition: fontx.c:735
int graph_initialize(int fbp, int width, int height, int psm, int x, int y)
Definition: graph.c:6
void graph_wait_vsync(void)
Definition: graph.c:99
#define GRAPH_ALIGN_BLOCK
Definition: graph_vram.h:16
int graph_vram_allocate(int width, int height, int psm, int alignment)
Definition: graph_vram.c:7
#define GRAPH_ALIGN_PAGE
Definition: graph_vram.h:13
#define GS_PSM_4
Definition: gs_psm.h:23
#define GS_PSM_32
Definition: gs_psm.h:11
s32 SleepThread(void)
static GS_GIF_PACKET packets[2][GIF_PACKET_MAX]
Definition: main.c:29
packet_t * packet_init(int qwords, int type)
Definition: packet.c:8
#define PACKET_NORMAL
Definition: packet.h:14
void packet_free(packet_t *packet)
Definition: packet.c:63
unsigned int load_method
Definition: draw_buffers.h:68
unsigned int start
Definition: draw_buffers.h:67
unsigned int storage_mode
Definition: draw_buffers.h:66
unsigned int psm
Definition: draw_buffers.h:65
unsigned int address
Definition: draw_buffers.h:64
Definition: font.h:16
unsigned int address
Definition: draw_buffers.h:41
unsigned int height
Definition: draw_buffers.h:43
unsigned int psm
Definition: draw_buffers.h:44
unsigned int mask
Definition: draw_buffers.h:45
unsigned int width
Definition: draw_buffers.h:42
Definition: font.h:50
float scale
Definition: font.h:51
unsigned char mag_filter
Definition: draw_sampling.h:42
float k
Definition: draw_sampling.h:46
unsigned char l
Definition: draw_sampling.h:45
unsigned char calculation
Definition: draw_sampling.h:40
unsigned char min_filter
Definition: draw_sampling.h:43
unsigned char max_level
Definition: draw_sampling.h:41
qword_t * data
Definition: packet.h:27
unsigned int address
Definition: draw_buffers.h:57
unsigned int width
Definition: draw_buffers.h:58
unsigned int psm
Definition: draw_buffers.h:59
texinfo_t info
Definition: draw_buffers.h:60
unsigned char height
Definition: draw_buffers.h:35
unsigned char function
Definition: draw_buffers.h:37
unsigned char components
Definition: draw_buffers.h:36
unsigned char width
Definition: draw_buffers.h:34
unsigned int mask
Definition: draw_buffers.h:53
unsigned int method
Definition: draw_buffers.h:50
unsigned int address
Definition: draw_buffers.h:51
unsigned int enable
Definition: draw_buffers.h:49
unsigned int zsm
Definition: draw_buffers.h:52
#define NULL
Definition: tamtypes.h:91
float q
Definition: draw_types.h:46