Subversion Repositories Kolibri OS

Rev

Rev 5260 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
5235 alpine 1
#include "rskos.h"
2
 
3
#ifndef RS_KOS
4
 
5
#include "rs/rstexture.h"
6
#include "rs/rsgl.h"
7
#include "rs/rsshader.h"
8
 
9
#include "rs/rsaudio.h"
10
 
11
#include 
12
#include 
13
 
14
//unsigned char* rskos_malloc(unsigned int bytes_count) {
15
//    return malloc(bytes_count);
16
//};
17
//
18
//void rskos_free(unsigned char* pointer) {
19
//    free(pointer);
20
//};
21
//
22
//void rskos_memset(unsigned char* pointer, unsigned char value, unsigned int bytes_count) {
23
//    memset(pointer, value, bytes_count);
24
//};
25
//
26
//void rskos_memcpy(unsigned char* dest, unsigned char* src, unsigned int bytes_count) {
27
//    memcpy(dest, src, bytes_count);
28
//};
29
 
30
 
31
 
32
unsigned int rskos_get_time() {
33
 
34
    return rs_app.app_time;
35
 
36
};
37
 
5239 alpine 38
void rskos_draw_area(int x, int y, int w, int h, int k_scale, unsigned char *data, unsigned char *scaled_buffer, int image_format) {
39
 
40
    int bpp = image_format == RSKOS_BGR ? 3 : 4;
5235 alpine 41
 
5239 alpine 42
//    int i, j;
43
//
44
//    for (i = 0; i < h*k_scale; i++) {
45
//        for (j = 0; j < w*k_scale; j++) {
46
//            scaled_buffer[ (i*w*k_scale + j)*3 + 0] = data[ ( (i/k_scale)*w + (j/k_scale) )*4 + 0];
47
//            scaled_buffer[ (i*w*k_scale + j)*3 + 1] = data[ ( (i/k_scale)*w + (j/k_scale) )*4 + 1];
48
//            scaled_buffer[ (i*w*k_scale + j)*3 + 2] = data[ ( (i/k_scale)*w + (j/k_scale) )*4 + 2];
49
//        };
50
//    };
5235 alpine 51
 
52
 
53
 
54
 
55
 
56
 
57
 
58
	glViewport(0, 0, rs_app.width, rs_app.height);
59
    glClearColor( 0.2596078431, 0.2815686275, 0.3929411765, 1.0 ); // #98d0ed
60
    //glClearColor( 0.0, 0.4, 0.1 + 0.5*0.001*(rs_get_time()%1024) , 1.0 );
61
 
62
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // <-- FBO
63
 
64
 
65
 
66
 
67
 
68
 
5239 alpine 69
    //rs_tx_t tex = rs_tx_create_from_data(w*k_scale, h*k_scale, 3, 0, 1, scaled_buffer);
70
    rs_tx_t tex = rs_tx_create_from_data(w, h, bpp, 0, 1, data);
5235 alpine 71
 
72
    glBindTexture(GL_TEXTURE_2D, tex);
73
 
74
    rs_sh_use(DefaultShader);
75
 
76
    rs_mx_identity_modelview();
77
    rs_mx_ortho_proj();
78
 
79
    glUniformMatrix4fv( DefaultShader[RS_SH_PROJ_ID], 1, GL_FALSE, rs_reg.mx_proj );
80
    glUniformMatrix4fv( DefaultShader[RS_SH_MODELVIEW_ID], 1, GL_FALSE, rs_reg.mx_modelview );
81
 
82
    glrsDrawRect(x, y, x+w*k_scale, y+h*k_scale, DefaultShader[RS_SH_POS_ID], DefaultShader[RS_SH_UV_ID]);
83
 
84
    rs_tx_destroy(&tex);
85
 
86
 
87
 
88
 
89
    rsDoSwapBuffers();
90
 
91
};
92
 
93
 
94
void rskos_resize_window(int w, int h) {
95
    //
96
};
97
 
98
void rskos_get_screen_size(unsigned int  *pw, unsigned int  *ph) {
99
    *pw = rs_app.width + 50;
100
    *ph = rs_app.height + 50;
101
};
102
 
103
void rskos_exit() {
104
    rsAppExit();
105
};
106
 
5260 alpine 107
 
108
 
109
 
110
int rskos_file_save(char *filename, unsigned char *data, int length) {
111
    FILE *fp;
112
 
113
    fp = fopen(filename, "w");
114
    if (!fp) {
115
        return 0;
116
    };
117
 
118
    fwrite(data, 1, length, fp);
119
    fclose(fp);
120
 
121
    return 1;
122
 
123
};
124
 
125
int rskos_file_load(char *filename, unsigned char *data, int length) {
126
    FILE *fp;
127
 
128
    fp = fopen(filename, "r");
129
    if (!fp) {
130
        return 0;
131
    };
132
 
133
    fread(data, 1, length, fp);
134
    fclose(fp);
135
 
136
    return 1;
137
};
138
 
139
 
140
 
141
 
142
 
143
 
144
 
145
 
146
 
5235 alpine 147
//void rskos_snd_init() {
148
//    //
149
//
150
//    rs_audio
151
//
152
//};
153
 
154
void rskos_snd_create_buffer(SNDBUF *hbuf, signed short *buffer, unsigned int length) {
155
    //
156
 
157
    rs_sound_t *snd = malloc( sizeof(rs_sound_t) );
158
    rs_sound_create_from_data(snd, length*2, (unsigned char*) buffer);
159
 
160
    *hbuf = snd;
161
 
162
};
163
 
164
void rskos_snd_update_buffer(SNDBUF *hbuf, signed short *buffer, unsigned int length) {
165
 
166
    rs_sound_destroy(*hbuf);
167
    rskos_snd_create_buffer(hbuf, buffer, length);
168
 
169
};
170
 
171
void rskos_snd_play(SNDBUF *hbuf, unsigned int mode) {
172
 
173
    rs_sound_play(*hbuf);
174
 
175
};
176
 
177
void rskos_snd_stop(SNDBUF *hbuf) {
178
    rs_sound_stop(*hbuf);
179
};
180
 
181
 
182
#else
183
 
184
    #include "rs/rsplatform.h"
5260 alpine 185
 
186
 
187
    #pragma pack(push,1)
188
 
189
    typedef struct rskos_file_struct_t {
190
 
191
        unsigned int func_num;
192
        unsigned int offset;
193
        unsigned int flags;
194
        unsigned int length;
195
        unsigned char *data;
196
        unsigned char  zero;
197
        char *filename;
198
 
199
    } rskos_file_struct_t;
200
 
201
    #pragma pack(pop)
202
 
5235 alpine 203
 
204
 
205
    unsigned int rskos_get_time() {
206
        return 1;
207
    };
5260 alpine 208
 
209
 
210
 
5235 alpine 211
 
5260 alpine 212
 
213
 
214
 
215
 
216
 
217
    int rskos_file_load(char *filename, unsigned char *data, int length) {
218
 
219
//        char filename_abs[] = "/sys/games/************************";
220
//        memcpy( filename_abs[ strchr(filename_abs, "*") ], filename, strlen(filename)+1 );
221
 
222
        rskos_file_struct_t file_struct;
223
        file_struct.func_num = 0;
224
        file_struct.offset = 0;
225
        file_struct.flags = 0;
226
        file_struct.length = length;
227
        file_struct.data = data;
228
        file_struct.zero = 0;
229
        file_struct.filename = filename;
230
 
231
        asm volatile ("int $0x40"::"a"(70), "b"(&file_struct) : "memory");
232
 
233
        return 1;
234
    }
235
 
236
 
237
 
238
    int rskos_file_save(char *filename, unsigned char *data, int length) {
239
 
240
//        char filename_abs[] = "/sys/games/************************";
241
//        memcpy( filename_abs[ strchr(filename_abs, "*") ], filename, strlen(filename)+1 );
242
 
243
        rskos_file_struct_t file_struct;
244
        file_struct.func_num = 2;
245
        file_struct.offset = 0;
246
        file_struct.flags = 0;
247
        file_struct.length = length;
248
        file_struct.data = data;
249
        file_struct.zero = 0;
250
        file_struct.filename = filename;
251
 
252
        asm volatile ("int $0x40"::"a"(70), "b"(&file_struct) : "memory" );
253
 
254
        return 1;
255
    }
256
 
257
 
258
 
259
 
260
 
261
 
262
 
263
 
264
 
265
 
5239 alpine 266
    void rskos_draw_area(int x, int y, int w, int h, int k_scale, unsigned char *data, unsigned char *scaled_buffer, int image_format) {
5235 alpine 267
 
5324 alpine 268
        int i, j;
269
 
270
        for (i = 0; i < h*k_scale; i++) {
271
            for (j = 0; j < w*k_scale; j++) {
272
                scaled_buffer[ (i*w*k_scale + j)*3 + 0] = data[ ( (i/k_scale)*w + (j/k_scale) )*4 + 0];
273
                scaled_buffer[ (i*w*k_scale + j)*3 + 1] = data[ ( (i/k_scale)*w + (j/k_scale) )*4 + 1];
274
                scaled_buffer[ (i*w*k_scale + j)*3 + 2] = data[ ( (i/k_scale)*w + (j/k_scale) )*4 + 2];
5235 alpine 275
            };
5324 alpine 276
        };
5235 alpine 277
 
5324 alpine 278
        kol_paint_image(0, 0, w*k_scale, h*k_scale, scaled_buffer);
5235 alpine 279
 
280
    };
281
 
282
    void rskos_resize_window(int w, int h) {
283
 
284
        // !!!!!!!!! add define-fix here
285
 
286
        w = -1 + w + 10; // 2 x 5px border
287
        h = -1 + kol_skin_height() + h + 5; // bottom 5px border
288
 
289
        asm volatile ("int $0x40"::"a"(67), "b"(-1), "c"(-1), "d"(w), "S"(h));
290
 
291
    };
292
 
293
    void rskos_get_screen_size(unsigned int  *pw, unsigned int  *ph) {
294
        kol_screen_get_size(pw, ph);
295
    };
296
 
297
    void rskos_exit() {
298
        kol_exit();
299
    };
300
 
301
    #define fmt PCM_1_16_16 // 1 channel, 16 bit per sample, 16 kHz
302
 
303
    void rskos_snd_create_buffer(SNDBUF *phbuf, signed short *buffer, unsigned int length_samples) {
304
        unsigned int snd_format = fmt;
305
        CreateBuffer(snd_format|PCM_STATIC, length_samples*2, phbuf);
306
        int offset = 0;
307
        SetBuffer(*phbuf, (void*)buffer, offset, length_samples*2);
308
    };
309
 
310
    void rskos_snd_update_buffer(SNDBUF *phbuf, signed short *buffer, unsigned int length_samples) {
311
        unsigned int snd_format = fmt;
312
//        CreateBuffer(snd_format|PCM_STATIC, length, phbuf);
313
        int offset = 0;
314
        SetBuffer(*phbuf, (void*)buffer, offset, length_samples*2);
315
    };
316
 
317
    void rskos_snd_play(SNDBUF *phbuf, unsigned int mode) {
318
        SetBufferPos(*phbuf, 0);
319
        PlayBuffer(*phbuf, 0);
320
    };
321
 
322
    void rskos_snd_stop(SNDBUF *phbuf) {
323
        StopBuffer(*phbuf);
324
    };
325
 
326
 
327
 
328
#endif