ps2sdk  1.1
A collection of Open Source libraries used for developing applications on Sony's PlayStation 2® (PS2).
font.c File Reference
#include <dma.h>
#include <stdio.h>
#include <string.h>
#include <tamtypes.h>
#include <packet.h>
#include <graph.h>
#include <gs_psm.h>
#include <draw.h>
#include <kernel.h>
#include <font.h>
+ Include dependency graph for font.c:

Go to the source code of this file.

Functions

void draw_init_env ()
 
void init_texture ()
 
void run_demo (packet_t *packet)
 
int main (void)
 

Variables

unsigned int image_clut32 []
 
unsigned char image_pixel []
 
int myaddress = 0
 
int clutaddress = 0
 
fsfont_t impress
 
fontx_t krom_u
 
fontx_t krom_k
 
packet_t packet
 

Function Documentation

◆ draw_init_env()

void draw_init_env ( )

Definition at line 26 of file font.c.

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 }
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
#define DMA_CHANNEL_GIF
Definition: dma.h:24
qword_t * draw_setup_environment(qword_t *q, int context, framebuffer_t *frame, zbuffer_t *z)
Definition: draw.c:11
qword_t * draw_finish(qword_t *q)
Definition: draw.c:188
#define ZTEST_METHOD_GREATER
Definition: draw_tests.h:35
packet_t packet
Definition: font.c:24
int graph_initialize(int fbp, int width, int height, int psm, int x, int y)
Definition: graph.c:6
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_32
Definition: gs_psm.h:11
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 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
qword_t * data
Definition: packet.h:27
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

References framebuffer_t::address, zbuffer_t::address, packet_t::data, DMA_CHANNEL_GIF, dma_channel_send_normal(), dma_wait_fast(), draw_finish(), draw_setup_environment(), zbuffer_t::enable, GRAPH_ALIGN_PAGE, graph_initialize(), graph_vram_allocate(), GS_PSM_32, framebuffer_t::height, framebuffer_t::mask, zbuffer_t::mask, zbuffer_t::method, packet, packet_free(), packet_init(), PACKET_NORMAL, framebuffer_t::psm, framebuffer_t::width, zbuffer_t::zsm, and ZTEST_METHOD_GREATER.

Referenced by main().

◆ init_texture()

void init_texture ( )

Definition at line 61 of file font.c.

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 }
int dma_channel_send_chain(int channel, void *data, int qwc, int flags, int spr)
Definition: dma.c:184
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
qword_t * draw_texture_flush(qword_t *q)
Definition: draw.c:208
unsigned int image_clut32[]
Definition: impress.c:11
unsigned char image_pixel[]
Definition: impress.c:31
int clutaddress
Definition: font.c:19
int myaddress
Definition: font.c:18
#define GRAPH_ALIGN_BLOCK
Definition: graph_vram.h:16
#define GS_PSM_4
Definition: gs_psm.h:23

References clutaddress, packet_t::data, DMA_CHANNEL_GIF, dma_channel_send_chain(), dma_wait_fast(), draw_texture_flush(), draw_texture_transfer(), GRAPH_ALIGN_BLOCK, graph_vram_allocate(), GS_PSM_32, GS_PSM_4, image_clut32, image_pixel, myaddress, packet, packet_free(), packet_init(), and PACKET_NORMAL.

Referenced by main().

◆ main()

int main ( void  )

Definition at line 185 of file font.c.

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 }
int dma_channel_initialize(int channel, void *handler, int flags)
Definition: dma.c:58
void dma_channel_fast_waits(int channel)
Definition: dma.c:108
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
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 DOUBLE_BYTE
Definition: font.h:14
char * fontstudio_load_ini(const char *path)
Definition: fsfont.c:53
#define SINGLE_BYTE
Definition: font.h:13
s32 SleepThread(void)
#define NULL
Definition: tamtypes.h:91

References dma_channel_fast_waits(), DMA_CHANNEL_GIF, dma_channel_initialize(), DOUBLE_BYTE, draw_init_env(), fontstudio_load_ini(), fontstudio_parse_ini(), fontstudio_unload_ini(), fontx_load(), fontx_unload(), impress, init_texture(), krom_k, krom_u, NULL, packet, run_demo(), SINGLE_BYTE, and SleepThread().

◆ run_demo()

void run_demo ( packet_t packet)

Definition at line 83 of file font.c.

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 }
#define v0
Definition: as_reg_compat.h:35
lod_t lod
Definition: main.c:86
u8 context
Definition: main.c:71
clutbuffer_t clut
Definition: main.c:80
void draw_wait_finish(void)
Definition: draw.c:200
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
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 CENTER_ALIGN
Definition: font.h:61
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
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
void graph_wait_vsync(void)
Definition: graph.c:99
static GS_GIF_PACKET packets[2][GIF_PACKET_MAX]
Definition: main.c:29
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
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
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
float q
Definition: draw_types.h:46

References color_t::a, texbuffer_t::address, clutbuffer_t::address, color_t::b, lod_t::calculation, CENTER_ALIGN, clut, CLUT_LOAD, CLUT_STORAGE_MODE1, clutaddress, texinfo_t::components, context, packet_t::data, DMA_CHANNEL_GIF, dma_channel_send_normal(), dma_wait_fast(), draw_clear(), draw_finish(), draw_log2(), draw_texture_sampling(), draw_texturebuffer(), draw_wait_finish(), fontstudio_print_string(), fontx_print_sjis(), texinfo_t::function, color_t::g, graph_wait_vsync(), GS_PSM_32, GS_PSM_4, texinfo_t::height, impress, texbuffer_t::info, lod_t::k, krom_k, krom_u, lod_t::l, clutbuffer_t::load_method, lod, LOD_MAG_LINEAR, LOD_MIN_LINEAR, LOD_USE_K, lod_t::mag_filter, lod_t::max_level, lod_t::min_filter, myaddress, packet, packet_init(), PACKET_NORMAL, packets, texbuffer_t::psm, clutbuffer_t::psm, color_t::q, color_t::r, fsfont_t::scale, clutbuffer_t::start, clutbuffer_t::storage_mode, TEXTURE_COMPONENTS_RGBA, TEXTURE_FUNCTION_MODULATE, v0, texinfo_t::width, and texbuffer_t::width.

Referenced by main().

Variable Documentation

◆ clutaddress

int clutaddress = 0

Definition at line 19 of file font.c.

Referenced by init_texture(), and run_demo().

◆ image_clut32

unsigned int image_clut32[]
extern

Definition at line 11 of file impress.c.

Referenced by init_texture().

◆ image_pixel

unsigned char image_pixel[]
extern

Definition at line 31 of file impress.c.

Referenced by init_texture().

◆ impress

fsfont_t impress

Definition at line 21 of file font.c.

Referenced by main(), and run_demo().

◆ krom_k

fontx_t krom_k

Definition at line 23 of file font.c.

Referenced by main(), and run_demo().

◆ krom_u

fontx_t krom_u

Definition at line 22 of file font.c.

Referenced by main(), and run_demo().

◆ myaddress

int myaddress = 0

Definition at line 18 of file font.c.

Referenced by init_texture(), and run_demo().

◆ packet